S9SourceNine Labs / CMAPI Docs 1.0
CMAPI / Reference

Changelog

Complete CMAPI release history through 1.0.0.

View source ↗
CMAPI 1.0.0Standalone runtimeWindows x64Tested with Planet Crafter 2.008

Changelog

1.0.0 — first standalone release

Standalone platform

  • Promoted the proven Planet Crafter-specific runtime, public mod API, and bootstrap contract to 1.0.0. BepInEx is not a build, runtime, packaging, installer, or player dependency.
  • Preserved the 0.15 behavioral baseline: CMAPI-owned bootstrap and lifecycle, manifests and dependency ordering, console IPC, compatibility diagnostics, player/content/environment APIs, save safety, host-safe mutations, trainer, update discovery, and the separately versioned optional menu.
  • Kept CMAPI Mod Menu 0.2.2 explicitly experimental beta so its known controller and catalog-navigation limitations do not redefine core-runtime stability.

Setup clarity and release safety

  • Setup now presents full action names and descriptions. Clean targets offer Install; healthy targets expose Update, Repair, and Uninstall, with Repair recommended when the installed version already matches the package.
  • Completion screens now state exactly whether CMAPI was installed, updated, repaired, or uninstalled. Uninstall no longer ends on a generic ready screen and offers an immediate safe path back to Install.
  • Fixed Review revalidation resetting an explicitly selected Update, Repair, or Uninstall action back to Setup's recommendation. The selected action now survives validation whenever it is still valid for the detected install.
  • Added source-gate coverage for installer action availability, operation-specific completion text, same-version Repair selection, and the aligned 1.0 product/API/bootstrap/Test Mod contract.
  • Corrected the trusted updater, release, and Pages origins to the actual SourceNineLabs/CMAPI repository so official 1.0 assets are accepted by the same strict origin checks that reject third-party packages.
  • Retained package manifests, SHA-256 verification, negative archive gates, transaction rollback, receipt-owned uninstall, official UnityDoorstop provenance, and explicit user approval for updates.

0.15.0 — release-candidate safety and owned updates

Setup and recovery gates

  • Added a Windows transaction gate to every source/release build which proves clean install, update, damaged-file repair, forced mid-operation rollback, receipt integrity, uninstall, and preservation of mods, configuration, user data, backups, logs, and cache.
  • Setup now reports any remaining recovery transaction as a Repair state; it no longer describes an installation with unresolved maintenance state as healthy.
  • Removed the final known build warnings in game-input discovery and mod manifest nullability without changing the public API.

CMAPI-owned update path

  • Replaced unauthenticated GitHub-latest discovery with a strict versioned SourceNine Labs GitHub Pages feed for stable and beta channels.
  • Added explicit CMAPI.exe --update: it validates the feed, semantic versions, official release origin, expected filename, package size, SHA-256, and the installed Planet Crafter Assembly-CSharp MVID before extracting safely into a unique LocalAppData staging folder.
  • The updater never edits the live install directly. It opens the existing verified Setup wizard with the game path and staged package; the user still approves Update, and the transactional installer remains the only component allowed to modify CMAPI-owned files.
  • Release builds now emit a validated Pages feed fragment beside the ZIP and checksum. Offline checks remain silent and never delay game startup.

Release provenance

  • Added a guarded UnityDoorstop import workflow and made public release builds require the pinned binary, exact upstream version, LGPL license, and matching SHA-256 file.
  • Pinned the official UnityDoorstop v4.5.0 Windows x64 release with machine-readable archive, binary, license, source, and URL provenance. The importer verifies the complete upstream archive before extracting the only approved proxy, and the final ZIP verifier independently checks the packaged files against that pin.
  • Kept the deliberately forced installer rollback test quiet while preserving its failure assertion, so a passing source gate no longer prints an expected red Get-FileHash error.
  • Made final .NET license verification tolerate the wording and text encoding used by the installed Windows SDK while still rejecting missing, truncated, or obviously invalid distribution notices. The release continues packaging the exact LICENSE.txt and ThirdPartyNotices.txt used to publish CMAPI.
  • Kept product version 0.15.0 separate from public API 0.13.0 and CMAPI Mod Menu 0.2.2 experimental beta.

0.14.0 — release hardening and transactional setup

Package integrity

  • Added deterministic CMAPI-package.json inventories with a SHA-256 digest for every distributed file. The setup UI, maintenance engine, and final ZIP verifier validate the inventory independently before installation.
  • Release builds now exercise negative gates which prove that a modified listed file and an unlisted extra file are rejected even when the outer ZIP checksum is recomputed.
  • Added a source gate for product/bootstrap/Test Mod version alignment, public API-version routing, legal inputs, and the absence of BepInEx project seams.

Transactional setup

  • Fixed Windows PowerShell transaction replacement so update, repair, receipt commit, and rollback always provide File.Replace a valid same-volume backup path instead of $null.
  • Receipt rollback now runs only after a new receipt was actually committed. A successful repair also clears recognized finalized recovery journals left by an earlier interrupted 0.14.0 transaction.
  • Replaced per-file maintenance with same-volume staging, verified backups, atomic replacement, a versioned ownership receipt, and reverse-order rollback across the complete install/update/repair transaction.
  • A successful rollback removes its temporary state and reports that the prior CMAPI install was restored. An incomplete rollback preserves a journal and exact recovery directory instead of hiding the failure.
  • Setup now verifies every installed receipt-owned file by SHA-256 when choosing Update versus Repair and fails closed on an invalid ownership receipt.

Version and layout policy

  • Split the CMAPI product version (0.14.0) from the public mod API version (0.13.0). Product-only hardening no longer forces mods to raise their MinimumApiVersion.
  • Retained the proven game-local binary layout for this pass. Executable/runtime relocation requires a separately tested bootstrap locator and will not be mixed into installer hardening. Documents is not a supported binary location.
  • CMAPI Mod Menu remains 0.2.2 experimental beta and outside the core gate.

0.13.0 — developer foundation and standalone cutoff

Public mod foundation

  • Added IModStorage with per-mod typed config.json, private persistent JSON data, disposable cache paths, path-containment checks, atomic writes, and timestamped preservation of unreadable files.
  • Added owner-scoped IModScheduler for next-update and delayed main-thread callbacks with cancellation, exception isolation, deterministic ordering, and failed-mod/runtime cleanup.
  • Added helper.Events.GameLoop with update and approximately one-second monotonic ticks. Missed seconds never produce catch-up bursts.
  • Added public API-version discovery and stable feature identifiers for storage, scheduling, and game-loop events.
  • Expanded CMAPI Test Mod with persistent start-state, storage inspection, scheduled callback, game-loop counter, and feature probes.

Standalone ownership

  • Removed the private legacy BepInEx adapter project, reference-sync/build scripts, log bridge, lifecycle entry point, and solution seams.
  • Removed BepInEx migration/restoration actions from setup and maintenance. Since CMAPI has never been publicly released, 0.13 uses a clean standalone install/update/repair/uninstall contract and never manages unrelated files.
  • Release verification rejects legacy adapters, BepInEx folders, game assemblies, Test Mod, debug output, and unsafe archive entries.
  • Self-contained launcher/setup packages now require the publishing .NET license, third-party notices, and exact SDK version alongside Doorstop, Cecil, and Newtonsoft notices.
  • Added explicit health diagnostics for CMAPI runtime ownership, mod-data path, public API version, and queued scheduler work.

Setup and polish

  • Reworked CMAPI Setup with a light, higher-contrast palette and clearer install/update/repair states while retaining the DPI-safe layout.
  • Kept CMAPI Mod Menu 0.2.2 experimental and outside the standalone runtime release gate.

0.12.0 — first-party setup and standalone polish

CMAPI Setup wizard

  • Added a SourceNine Labs Windows setup wizard which automatically finds Steam libraries and detects clean, healthy standalone, damaged, and conflicting installations.
  • Added guided install, update, repair, and receipt-based uninstall actions over the existing fail-closed maintenance engine. The wizard keeps PowerShell internal and captures its progress and errors in the UI.
  • Added one-click post-install launch, package completeness validation, UAC-safe maintenance, release packaging integration, and development wizard-package export without weakening pinned UnityDoorstop release requirements.
  • Rebuilt the wizard shell around DPI-aware, isolated navigation, content, and footer regions so anchored controls no longer render beneath the sidebar or clip at supported window sizes.

Runtime and console polish

  • Bare trainer commands such as god_mode, infinite_oxygen, and infinite_power now toggle immediately; status remains read-only and on/off remain explicit.
  • Fixed doubled field-label colons in styled command output.
  • Declared the launcher Windows-only so its intentional Steam Registry access no longer produces cross-platform analyzer warnings.
  • Hardened atomic installer replacements with real recovery paths and useful per-file diagnostics under Windows PowerShell.

0.11.0 — standalone runtime development checkpoint

CMAPI-owned bootstrap and lifecycle

  • Split the product into a small CMAPI.Bootstrap and CMAPI.Runtime while retaining the 0.10 runtime services and CMAPI mod model.
  • Replaced BaseUnityPlugin, ManualLogSource, and BepInEx.Paths usage with a persistent CMAPI-owned Unity lifecycle object, owned paths, session logs, and the existing dedicated console IPC.
  • Added a Planet Crafter-specific Mono.Cecil bootstrap hook at the same UnityEngine.Application lifecycle boundary proven by the 0.10 control. The bootstrap does not discover patchers, plugins, or arbitrary Unity games.
  • Added early executable/file/MVID checks, bootstrap/runtime crash reports, a concise startup-failure marker, and launcher reporting that stops safely instead of waiting on an unexplained pipe timeout.
  • Retained a separately built CMAPI.LegacyBepInEx adapter solely for behavioral baseline comparison. It is excluded from the standalone solution and rejected by release-package verification.

Mod loading and failure isolation

  • Added required/optional manifest dependencies, semantic minimum-version checks, deterministic required-dependency order, cycle diagnostics, and fail-closed dependent loading.
  • Added private mod dependency resolution limited to the requesting mod folder, with explicit protection against shadowing CMAPI, game, Unity, and framework assemblies.
  • Added public IModRegistry feature/loaded-mod discovery and stable CMAPIFeatures IDs; added features and Test Mod validation coverage.
  • Isolated per-frame runtime services so one recurring lifecycle/service exception is logged once without preventing unrelated CMAPI services from updating.

Packaging and migration groundwork

  • Replaced the BepInEx package layout with CMAPI/Bootstrap, CMAPI/Runtime, CMAPI/Mods, CMAPI-owned logs/crash reports, and root Doorstop files.
  • Added install, update, repair, explicit BepInEx migration, and receipt-based uninstall scripting. Mods, configuration, backups, logs, user data, and unrelated BepInEx files are preserved; ambiguous bootstrap coexistence fails closed.
  • Added hard packaging gates and notices for UnityDoorstop 4 (LGPL-2.1), Mono.Cecil 0.11.6 (MIT), and Newtonsoft.Json 13.0.4 (MIT).
  • CMAPI Mod Menu remains 0.2.2 experimental beta and is not a standalone runtime release gate.

0.10.0 — content discovery and deterministic lifecycle

World, save, and weather lifecycle

  • Added owner-scoped IWorldEvents for ready world entry, world exit, completed planet travel, completed saves, and observed synchronized weather start/end.
  • World readiness requires both a connected local player and a loaded planet. Planet travel ends the previous weather observation before PlanetChanged; world teardown ends weather before WorldExited.
  • Save completion binds directly to Planet Crafter's SavedDataHandler.OnSaved rather than treating a save request as completion.
  • Event handlers run on the main thread, isolate/log subscriber exceptions, and are removed automatically if a mod fails to load.

Recipes and unlocks

  • Added IRecipeManager, IRecipeDefinition, and IRecipeIngredient over the live group catalog. Repeated native ingredient entries collapse into explicit quantities; item recipes report native crafting-station IDs.
  • Added IUnlockManager and immutable unlock snapshots covering live state, current-planet availability, global save unlocks, blueprint requirements, supported world-unit thresholds, and explicit planet IDs.
  • Added ContentKind so authors can distinguish inventory items, constructibles, and future/unknown group types without game references.
  • Added a fail-closed Content API compatibility seam and surfaced missing hooks in startup, gameinfo, and health_check diagnostics.

Local inventory and commands

  • Added IPlayerInventoryManager with fresh backpack/equipment slot snapshots, stable-ID item counts, and owner-scoped native add/remove events containing a post-change snapshot.
  • Kept the first inventory contract read-only and aggregated. It intentionally excludes mutable WorldObject references and per-instance genetics, text, growth, and other save internals.
  • Added inventory, recipes, recipe, unlocks, and unlock_info, with multi-field search, explicit filters, bounded output, and no mutations.
  • Expanded CMAPI Test Mod to 0.10.0 with lifecycle/event logging and direct recipe, unlock, and inventory API checks.

Documentation and beta separation

  • Added the content/lifecycle API guide, 0.9 migration guide, focused 0.10 sanity pass, release gates, command documentation, and XML summaries for every new public member.
  • Froze CMAPI Mod Menu at separately versioned 0.2.2 experimental beta and documented its known controller-open and Item Catalog submenu defects. Core API/console validation no longer waits on those two navigation defects; input leakage, stuck cursor state, save mutation, and repeated trainer side effects remain blockers.

0.9.0 — synchronized weather and world environment APIs

Weather and meteor control

  • Added the Unity-free IWeatherManager, immutable weather definitions, live WeatherSnapshot, and structured EnvironmentActionResult outcomes.
  • Added weather_events, weather_status, and host-only weather_start. Commands accept exact asset IDs, readable names, or one unambiguous partial match and expose the weather and weather_list discovery aliases.
  • Weather starts use Planet Crafter's native synchronized MeteoHandler path, including shared seed, reference player/position, environment, audio, rain, terrain wetness, sky prefab, and asteroid behavior.
  • Starts respect terraformation-stage bounds and refuse to replace active weather. Forced stopping remains intentionally unavailable until every game cleanup path is proven safe on host, clients, world exit, and planet travel.

Read-only environment surface

  • Added IWorldStateManager with immutable oxygen, energy, heat, pressure, terraformation, biomass, plant, insect, animal, purification, values and gross/net rates plus current/next terraformation stages.
  • Added IEnvironmentManager for synchronized day/night snapshots, local and arbitrary-position underwater checks, and an asynchronous host-only reset to full day.
  • Added IPlanetManager with the current planet and installed/purchased planet definitions. Forced travel is deliberately excluded because it mutates players, inventories, world objects, Netcode state, and saves.
  • Added world_state, environment, day_reset, and planets, with short aliases for frequent read-only queries.

Public local-player placement

  • Added IModHelper.PlayerPlacement and IPlayerPlacementManager, backed by the proven native SetPlayerPlacement(..., teleport: true) path.
  • TeleportAsync validates finite ±1,000,000 coordinates, stays on the current planet, requires the local host, runs on Unity's main thread, logs the action, and uses the native CMAPI HUD notice setting.
  • Added structured PlayerPlacementResult/PlayerPlacementStatus outcomes and owner-scoped return points. Player-session changes, planet changes, failed mod load, and owner removal reject or clear stale recovery state.
  • Mutation owners are now active during Mod.Entry, so a mod may safely submit documented asynchronous API work during initialization; failed entry rolls that ownership and pending work back through the existing cleanup path.

Console and diagnostics

  • Added color-aware command output for headings, field labels, command names, table separators, warnings, and failures while preserving plain redirected output and the existing console protocol.
  • Extended full-game compatibility inspection and health_check to cover weather reflection fields, world units, stages, day/night, water, live weather state, and world-state readiness.
  • Environment services now fail closed on a build missing required hooks: mutations return UnsupportedGameBuild, while read-only services return unavailable or empty snapshots instead of invoking incompatible game code.
  • Command search now matches provider Unique IDs, so commands SourceNine finds commands owned by SourceNineLabs.* mods.
  • teleport bsck and similar one-edit mistakes now suggest teleport back.
  • Expanded the test mod, developer guide, migration guide, release checklist, packaging rules, and in-game tests for every new public surface.

Optional CMAPI Mod Menu 0.2.2 and reversible trainer

  • Added a separately versioned, session-only in-game menu module integrated into CMAPI. CMAPI remains 0.9.0 while the menu advances to 0.2.2. Both authoritative version constants now live in CMAPI.Shared.
  • cmapi_inject creates the persistent overlay only when requested; cmapi_uninject destroys it and restores trainer state without unloading CMAPI or mods. Commands remain case-insensitive.
  • Replaced the read-only dashboard with Player, Inventory, World, Teleport, Mods, and Console workspaces. Actions call the same validated commands as the external console, preserving host checks, limits, logs, and HUD feedback.
  • Added host-only god_mode, refill_vitals, individual oxygen/water/health/ toxicity locks, no_fall_damage, native fly_mode, reversible move_speed, and fail-closed runtime infinite_power controls plus concise aliases.
  • Captures and restores the game's prior movement, flight, and fall-damage state. Host/player loss, uninject, and shutdown disable every trainer effect; power returns through the game's grid recalculation path.
  • Redesigned the interface as a compact 410-by-530 classic trainer surface with vertical drill-down pages, one selected row, concise right-side values, live vitals, bounded activity output, scrolling, draggable placement, live resolution/safe-area clamping, and centering.
  • Explicitly styled every normal, hover, active, focused, and on GUI state, fixing the full-window bright highlight seen after clicking the old menu.
  • Kept Insert as the configurable keyboard default. F8/F9 migrate away from tested game/store conflicts, and live binding checks select a session fallback only when the configured key actually overlaps a game action.
  • Removed the Steam-reserved View+Menu controller chord. Holding L3+R3 now toggles the menu; D-pad selects, A activates, B returns/hides, LB/RB scroll, X centers, and Y requires a second confirmation press to uninject.
  • Added selection-follow scrolling and removed analog-stick scrolling/window movement, making controller navigation deterministic instead of cursor-like.
  • Replaced Inventory's console-output-only item search with a real searchable, browsable Item Catalog page. Selecting a result fills its stable item ID and returns to the grant page; controller users can browse without typing.
  • Captures Planet Crafter's separate UI input module as well as its player action maps, preventing mouse clicks and controller submit actions from reaching a pause/inventory screen behind CMAPI. Mouse input remains available to IMGUI. Hide, uninject, destruction, and scene changes restore only CMAPI's captured states; failure to establish capture keeps the overlay hidden.
  • Cursor handoff now respects an already-open Planet Crafter window and records the last device used in CMAPI, preventing a hidden mouse after uninjection.
  • Reworked Infinite Power against the verified energy checker. CMAPI suspends its periodic coroutine and immediate recalculation gate, applies one requester transition, pins the manager state silently, and restarts one native calculation on disable, removing the repeated power-loss/restored sound loop without editing save data.
  • Added UnityEngine.TextRenderingModule.dll to automatic reference sync and the runtime project so IMGUI FontStyle and TextAnchor compile cleanly.

0.8.0 — command discovery and actionable diagnostics

Player-facing command catalog

  • Added commands [search], a live catalog grouped by System, Diagnostics, Mods, Updates, Players, Save Safety, Gameplay, and mod-defined categories.
  • Catalog search matches canonical names, aliases, categories, descriptions, usage text, and providers. help with no arguments opens the same catalog; help <command> now shows aliases and category too.
  • Replaced the doctor command with the clearer health_check. Its expanded report covers build compatibility, session/host state, registered commands, loaded mods, save backups, gameplay authority, HUD notifications, and update results with an explicit PASS, CAUTION, or FAIL conclusion.
  • Added the read-only config command so players can see active settings and the exact file to edit without hunting through folders.

Command framework and developer experience

  • Added first-class command aliases. give_tokens now resolves to the single canonical give_money entry instead of appearing as a duplicate command.
  • Added public ConsoleCommandOptions metadata so mods can register a category and any number of aliases while keeping the simpler existing overloads.
  • Alias collisions participate in the same global ownership checks as canonical names; removal and failed-mod rollback clean up every alias atomically.
  • Expanded the test mod with the categorized test_echo command and test_say alias, plus catalog, migration, packaging, and release-checklist coverage.

Console polish

  • Removed log-level alignment padding entirely. Runtime lines now render as [INFO] [CMAPI], [DEBUG] [CMAPI], and [WARNING] [CMAPI] with one normal space between labels.
  • Added host-only-by-default teleport <x> <y> <z> through Planet Crafter's native network placement path. It validates finite bounded coordinates, preserves facing, refreshes game environment state, shows native feedback, and records an immediate teleport back recovery point.

0.7.0 — native feedback and public gameplay actions

Native in-game notifications

  • Wrapped Planet Crafter's native information-card and Terra Token popup systems instead of drawing a competing CMAPI overlay.
  • Successful item grants now show one localized inventory card with the item icon, inventory marker, and applied amount. Terra Token grants show the game's standard token popup.
  • Added notify <message> and the documented IModHelper.Notifications API for general, item, and token feedback.
  • Added a bounded, thread-safe notification queue with main-thread delivery, five-per-frame throttling, 20-second expiry, validation, failure isolation, and failed-mod cleanup.
  • Added ShowGameplayNotifications so automatic grant feedback can be disabled without disabling commands or explicit mod notifications.

Public gameplay mutation API

  • Added host-safe IItemManager.AddToLocalBackpackAsync and ITerraTokenManager.AddAsync methods using Planet Crafter's real network-aware inventory and server-RPC paths.
  • Added GameplayActionResult and stable GameplayActionStatus values for validation, readiness, authority, item lookup, capacity, overflow, partial rejection, timeout, and unexpected failure.
  • Public mutations may be requested from any thread; CMAPI schedules Unity/game access on the main thread. Item tasks complete after every native callback or a ten-second safety timeout.
  • Public mutation authority is always host-only and cannot be weakened by the console cheat-command configuration.

Console and developer experience

  • Removed padding inside log-level brackets: [INFO], [DEBUG], [WARNING], and [ERROR] now render cleanly with alignment spacing outside the bracket.
  • Made unquoted multi-word item input the primary documented form, such as give_item Super Alloy 2; quoted arguments remain supported globally.
  • Expanded the internal test mod with notification and public-mutation commands, and added focused notification/migration documentation and release gates.

0.6.0 — Steam integration, save safety, and gameplay tools

Steam and process lifetime

  • Added the "<GameRoot>\CMAPI.exe" %command% Steam launch path, automatic argument forwarding, steam, --steam-launch-option, and a clipboard helper.
  • Coupled game and console lifetime in both directions by default. Ctrl+C first requests a normal game close and waits 15 seconds; a Windows Job Object covers direct console-window termination.
  • Added CloseConsoleWithGame and CloseGameWithConsole settings.

Save safety

  • Added rolling ZIP snapshots before launch, after exit, and after a manual in-game save completes. Archives include metadata and retain the newest 20 by default.
  • Added backup, backups, --list-backups, and guarded offline restore.
  • Restore refuses to run while the game is open, makes a pre-restore snapshot, rejects unsafe archive entries, and never deletes unrelated saves.

Gameplay tools and API

  • Added items [search], give_item <item> [amount], give_money <amount>, and the give_tokens alias.
  • Item commands resolve IDs and localized names, explain ambiguous matches, and validate amount and backpack capacity before changing anything.
  • Mutation commands are host-only by default and use the game's network-aware token and inventory paths.
  • Added the documented, Unity-free IModHelper.Items catalog and IModHelper.TerraTokens read-only services.
  • Expanded diagnostics, configuration, test-mod coverage, installation guides, and the release checklist for the new surface.

0.5.0 — full-game beta foundation

Full-game compatibility

  • Ported the runtime target from The Planet Crafter Prologue to the complete game without changing the public player or command APIs.
  • Compared the complete game's PlayersManager, PlayerMainController, and PlayerGaugesHandler sources against the Prologue build. Every CMAPI player lifecycle and state member retains a compatible signature.
  • Renamed the Prologue-specific adapter and added exact Assembly-CSharp MVID, game-version, and required-member detection at startup.
  • Compatible unknown game builds now continue with a warning. Builds missing a required player hook keep the mod loader and console alive with the player API disabled and list the missing members.
  • Added gameinfo and doctor diagnostics.

Installation and launcher

  • Added Sync-GameReferences.ps1 to copy the current full game's Assembly-CSharp, Unity, Netcode, and BepInEx compile references safely before building.
  • Updated development deployment and Visual Studio launch defaults for the full game.
  • Added launcher auto-detection for the game root, normal Steam installs, registry-discovered Steam installs, and additional Steam libraries.
  • Added launcher preflight checks for BepInEx and the deployed CMAPI runtime.
  • Added a release build script which produces a self-contained win-x64 launcher and clean game-root archive, generates its SHA-256 sidecar, and verifies the archive layout and entry safety.

Manifests and updates

  • Added required mod Description and MinimumApiVersion fields plus optional provider-prefixed UpdateKeys.
  • Added detailed validation for required text, stable UniqueIDs, semantic versions, minimum CMAPI compatibility, duplicates, and malformed update keys.
  • Added non-blocking GitHub release checks, configurable timeouts, a six-hour success cache, per-mod failure isolation, startup summaries, and the updates [check] command.
  • Extended modinfo with descriptions, minimum CMAPI versions, and update state.
  • Added a non-blocking launcher check for CMAPI's own official GitHub releases. Automatic replacement remains intentionally disabled until signed/checksummed release assets and rollback behavior are finalized.

Documentation and testing

  • Added full-game source comparison, installation, manifest, release, update feed, and migration documentation.
  • Expanded the test mod manifest and bumped the test mod to 0.4.0.
  • Replaced the Prologue test pass with a complete full-game beta gate.

0.4.0 — approachable console commands

Public API and developer experience

  • Added IModHelper.ConsoleCommands so mods can register and remove their own interactive console commands without referencing runtime internals.
  • Added documented command handlers and invocation contexts with read-only parsed arguments, standard usage output, and console response methods.
  • Added XML documentation to every public CMAPI.API type and member, including parameter, return-value, exception, threading, lifetime, and identity notes.
  • Enabled CMAPI.API.xml generation and development deployment so those descriptions appear in editor IntelliSense beside CMAPI.API.dll.
  • Added a focused beginner guide with a minimal project, manifest, mod entry point, command example, folder layout, and troubleshooting checklist.

Runtime and console

  • Added global, case-insensitive command registration with mod ownership, strict beginner-readable validation, and collision diagnostics that identify the existing provider.
  • Added quoted arguments, escaped quotes, unmatched-quote errors, and typo suggestions for unknown command names.
  • Expanded help with built-in/mod grouping and detailed help <command> output for provider, description, and usage.
  • Isolated command-handler exceptions so a broken mod command is logged without breaking the console or other commands.
  • Removes a mod's commands automatically when its Entry method or final registration fails.
  • Extended modinfo to list commands registered by the selected mod.

Test mod

  • Added test_player [clientId] to exercise player lookup and current public state from a mod-owned command.
  • Added test_echo <message> to verify argument splitting, quotes, usage help, and command output.

0.3.0 — player API

Public API

  • Added IPlayerManager through IModHelper.Players with local-player, connected-roster, and client-ID lookup access.
  • Added the Unity-free IPlayer, WorldPosition, and PlayerVitals contracts.
  • Added local and multiplayer-aware started/stopped events which pass the affected IPlayer directly to mods.
  • Kept player state read-only while multiplayer authority rules are still being established.

Runtime

  • Added a Prologue-specific player adapter and registry behind the public API.
  • Normalized the native PlayersManager callbacks after the game's player initialization/removal work completes.
  • Retains the last complete player snapshot for stopped-event handlers.
  • Reconciles scene/session changes so stale Unity player objects are not kept in the public roster.
  • Isolates every player-event subscription by owning mod.

Console and testing

  • Added the players command for live roster, role, position, and vital-state diagnostics.
  • Expanded the test mod to exercise all four lifecycle events and verify that helper.Players.LocalPlayer matches the event player.
  • Documented the Prologue identity constraint and full-game adapter boundary.

0.2.0 — foundation rebuild

Runtime and API

  • Split public mod contracts into CMAPI.API.dll so ordinary mods no longer compile against the BepInEx runtime or Planet Crafter assemblies.
  • Reduced Plugin to BepInEx/Unity lifecycle forwarding.
  • Added a runtime host, explicit main-thread dispatcher, dedicated mod loader, scoped event hub, and Planet Crafter player-event bridge.
  • Added the public IMonitor service while retaining the base Mod logging convenience methods.
  • Changed the BepInEx plugin ID to com.sourceninelabs.cmapi before public API compatibility is established.

Console and IPC

  • Replaced marker strings with versioned JSON-line messages.
  • Added command IDs and explicit command-output/completion messages.
  • Gave the runtime exactly one named-pipe reader thread and one writer thread.
  • Startup logs can queue before connection and are delivered in order.
  • Asynchronous runtime logs are pushed immediately without waiting for a command.
  • Added connection/startup timeouts and protocol/version diagnostics.
  • Rebuilt the launcher UI with colored structured logs, status markers, command history, cursor editing, and prompt redraw around live messages.

Mod loading

  • Made mod discovery deterministic and case-insensitive by UniqueID.
  • Rejects EntryDll paths that escape a mod directory.
  • Requires exactly one public concrete Mod entry class with a parameterless constructor.
  • Removes event subscriptions when mod startup fails.
  • Isolates event-handler exceptions so one mod cannot prevent later handlers.
  • Uses the mod DLL's load context so dependencies beside the entry DLL can be resolved by the runtime.

Development

  • Added a SourceNine Labs test manifest.
  • Added a safe build/deploy PowerShell script.
  • Made game/BepInEx reference paths portable within the solution and stopped copying compile-time game assemblies into runtime output.
  • Added architecture, testing, and source-backed game-hook documentation.