Changelog
All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[0.9.1-exp.1] - 2026-10-22
Changed
[CliCommand(name, description)]reads a dotted name as group and name ("animation.skeleton.set_bone"), and is no longer obsolete.[CliCommand(description)]infers the group from the declaring type's namespace and class, and the name from the method.
Fixed
- UAL0010/UAL0013 AutoStaticsCleanup analyzer warnings when opening a project with Unity 7.0.
- Building for Android, iOS or any other non-Standalone platform no longer throws
ArgumentException: Subtarget property is not available for the platformin the Pipeline's pre-build step, which skipped baking the runtime settings into the build.
[0.9.0-exp.1] - 2026-09-22
Added
- [AUTHAPI-82] A
list_build_platformscommand that lists the platforms a Build Profile can target. - [AUTHAPI-82] A
create_build_profilecommand that creates a Build Profile asset for a platform. - [AUTHAPI-82] An
edit_build_profilecommand that changes a Build Profile's scene list and scripting defines. - [AUTHAPI-84] Added new analytics data allowing cross reference between CLI events and Pipeline events.
- [CLI-1432]
editor_set_run_in_backgroundkeeps the game running while the Editor is unfocused; builds keep the project's own setting. - [CLI-1432] An "Ensure editor runs in background in PlayMode" setting under Project Settings > Pipeline > Editor.
- [CLI-1432]
editor_statusand/api/statusreport Run In Background and whether the player loop is advancing while in Play mode. - [AUTHAPI-48]
/api/commandscan filter, group and index commands by group. - [AUTHAPI-75] The instance descriptor lists every way to connect to the instance.
- [AUTHAPI-77] Every command accepts
--verboseand--omit-nullson the command line, shaping its result as theverboseandomitNullsrequest flags do. - [AUTHAPI-48]
[CliCommand(group, name, description)]and[CliGroupCommand(group, description)]declare a command in a group.
Changed
- AUTHAPI-81 simplify how a user can link with Pipeline for a Build. A single options available in the Project Settings take care of enabling pipeline for Dev build or for Release build.
- Code Reload is now Method Reload. Attributes, namespaces, doc updated.
- [AUTHAPI-48] Commands are grouped: run them as
unity command <group> <name>; the old names no longer work. - [AUTHAPI-48] The first argument of
[CliCommand]is now the command's group, and the name comes from the method. - [AUTHAPI-48]
CommandRegistry.RegisterCommandtakes the group and the name first. - [AUTHAPI-48] When two commands share a name, the package's own command is kept and the other is refused.
- [AUTHAPI-75] The instance descriptor refreshes its heartbeat every 15 seconds and is replaced in one step, so it is never read half-written.
- [AUTHAPI-75] In Play Mode, the runtime server is listed in the Editor's descriptor instead of writing its own file.
- [AUTHAPI-58] Ensure timeouts are per command and that any command supporting timeout properly uses the --timeout switch to allow timeout overrides.
- Moved the unity-pipeline agent skill out of the package to the repository root.
- [AUTHAPI-77] The editor_status and test-status endpoints no longer wait for the running command to finish; editor_status gives up after 60 seconds if the main thread stays blocked.
- [AUTHAPI-77] The limit of 100 waiting or running commands now counts synchronous
/api/execrequests as well as jobs, and a request over it returns 429. - [AUTHAPI-77] A detached job with a missing or invalid argument is refused when it is submitted, instead of failing after it starts.
- [AUTHAPI-48] A bare command name runs the
globalcommand of that name, including one named like a group.
Deprecated
- [AUTHAPI-48]
[CliCommand(name, description)]registers the command in theglobalgroup; it still runs by its name alone.
Removed
- [AUTHAPI-48]
CliCommand.RuntimeOnly; tag the commandruntimeinstead. - [AUTHAPI-77] The
GetBusyReasonandOnCommandDonehooks ofBasePipelineServer, and theCommandExecutionInfotype they reported with. - [AUTHAPI-77]
/api/execreplies no longer includedialogsDuringExecution;/api/dialogand/api/statusstill report open dialogs.
Fixed
create_assetandfind_assetsresolve short type names such as "Material" correctly on Unity 7.- [UUM-154017] An unknown command name suggests the closest match, or the commands starting with it, instead of listing every registered command.
- [UUM-154657] Allow browser connection from localhost.
- Paths starting with "assets/" or "packages/" in any casing are treated as project paths instead of being nested under the authoring root.
- [UUM-154806] Entering Play Mode no longer logs errors when the Test Framework assembly cannot be loaded.
- Add proper guidance if an old naming convention command is invoked.
- [AUTHAPI-106] Update license agreement.
- [SCP-2254] Unity pipeline package no longer fails the build when including development version of it into runtime builds when building development player with the release managed code variant. It will now only be included in debug, checked or instrumented managed code variants.
Security
- The server refuses requests whose Host header is not its own 127.0.0.1 address, blocking DNS rebinding from a web page.
[0.8.0-exp.1] - 2026-09-22
Added
- IL interpreter: delegates naming an interpreted class now run. Single-target only.
- IL interpreter:
new string(char[])and theBitConverterbit-casts are now callable. /api/commands?detail=tagsreturns one row per tag with its command count instead of the commands; combining it withgroup_byorsort=packageis refused.
Changed
- [UUM-152774]
capture_game_viewnow defaults tosource=screenand works in Edit Mode; passsource=camerafor the previous behaviour. - [UUM-153151]
[CliCommand]and[CliArg]moved to the unconstrainedUnity.Pipeline.Attributesassembly; reference it instead ofUnity.Pipelineto declare commands. - [UUM-153151]
CommandRegistryis now public, allowing dynamic registration. Discovery and caching stay internal. - The Player command surface is identified by the
runtimetag instead of being hidden, so an Editor server lists those commands;batchstill refuses them and no public signature changed. - Development player builds no longer get a generated code-reload
link.xml; the project's own stripping level applies, and a push warns which referenced members are missing. - The bundled Roslyn compiler ships only to the Editor and desktop players;
reload_filereports the platform as unsupported elsewhere. - The Editor and Runtime servers answer only requests addressed to
127.0.0.1; dial the port by IP, notlocalhost. - [AUTHAPI-79] Samples moved to the separate
com.unity.pipeline.samplespackage; add it to get them. - [UUM-152382]
simulate_keyandsimulate_pointernow report whether the Input System is missing or excluded by Active Input Handling. - [AUTHAPI-66] The Editor server is configured from Project Settings > Pipeline > Editor, not an asset; the old menu item is gone and
EditorPipelineManager.assetis not migrated. - A runtime settings file replaced by another process is picked up within 500 ms rather than on the next frame.
- [AUTHAPI-43] The package is now made available under the Unity Terms of Service instead of the Unity Package Distribution License.
Fixed
- [UUM-153645] Editing the Project Settings > Pipeline pages no longer marks the open scene as unsaved.
RuntimePipelineDriver.Updateno longer allocates every frame in the Editor and Play Mode. Player builds were unaffected.- IL interpreter: correctness fixes to 64-bit values, struct copies, virtual dispatch, casts,
ToString, delegates, parameter typing and malformed assemblies. - [UUM-152380] The package assembly no longer fails to compile with CS0234 on Unity 6000.3.0a1 through 6000.3.0a4.
- [UUM-152630] The nine
*_statuscommands return their payload as real JSON instead of a JSON string; the fields are unchanged, so a client no longer parses the result twice. - [UUM-152630]
build_statusreports a realelapsedMswhile a build runs; it was always0outside UTC. get_lighting_settings/set_lighting_settingsnow compile against Unity 6000.7+, whereLightingSettings.realtimeGIbecame obsolete.- The occlusion-culling bake commands now compile against Unity 6000.7+, where
StaticOcclusionCullingbecame obsolete. They keep working. - The runtime dev-server code is gated on
ENABLE_PROFILERinstead of the deprecatedDEVELOPMENT_BUILD(UAC0009), so an instrumented non-development player build now includes it. - Code reload now binds targets applied from Edit Mode instead of reporting them all as missing.
- A code-reloaded method with no dispatch target now names the cause instead of always blaming stale compiled code.
codereload_statusandcleanup_codereloadare now available on the Editor server, not only with a runtime driver.- [UUM-152953] Entering Play Mode no longer scans every loaded assembly with reflection to find
[CodeReload]methods in the Editor; discovery now usesTypeCache.GetMethodsWithAttribute.
Security
- The Editor and Runtime servers now bind to
127.0.0.1instead of every interface; the port was previously reachable from the local network, though every request still required a loopback origin and the bearer token.
[0.7.0-exp.1] - 2026-09-10
Changed
- [AUTHAPI-71] The Pipeline runtime assemblies and the bundled Roslyn DLLs are no longer included in non-development Player builds. Enabling the runtime server for a release build now has no effect instead of warning. Add the
ENABLE_RUNTIME_PIPELINEscripting define symbol to include them in a build that is not a Development Build. - [AUTHAPI-71] The code reload attributes moved to their own
Unity.Pipeline.Attributesassembly, so code tagged with them still compiles for a release build, where they do nothing. An assembly definition that referencedUnity.Pipelineto get the attributes must addUnity.Pipeline.Attributesto its references; scripts that are not in an assembly definition need no change. - [UUM-151473]
consoleis now robust across domain reloads, Editor restarts and play-mode transitions. It reports the capture session alongside its cursor and refuses a cursor it cannot honor rather than returning an empty result; it backfills from the Editor console's own store, so compile errors logged before capture started are visible; and it re-arms itself when Unity drops the log callback. Every response also carries the Editor's own console counts and compile-failure flag, so a client can tell in one call when the buffer and the Console window disagree. - [UUM-151473]
clear_consolemoved to the runtime assembly besideconsoleandconsole_status, so all three console commands live in one file andclear_consolenow works in player builds too (where it clears the captured buffer; there is no Editor console to clear).
Added
- [AUTHAPI-25] Added server-side condition waiting: a wait command that polls an editor/object state until it holds (or times out), synchronously or in the background with status polling and cancelation.
- [AUTHAPI-51]
CommandRegistry.RegisterCommand/UnregisterCommand: register commands at runtime without a[CliCommand]attribute, for command sets that depend on runtime state. A dynamic registration behaves exactly like an attribute-declared one — same/api/commandsmetadata, same[CliArg]parameter discovery on the handler, same/api/execexecution — and additionally accepts an instance-bound delegate, so a command can run against a specific object. Registrations survive a discovery-mechanism swap and last until unregistered or the domain reloads — one made while in Play Mode is dropped when Play Mode exits, so a handler registered fromAwakere-registers cleanly on the next entry even with domain reload disabled. A name already in use throws rather than shadowing the existing command. SeeDocumentation~/creating-commands.md. - [UUM-151473]
consoleresponses carrycounts(entries the buffer retains per severity) andgroundTruth(the Editor's owncompilationFailed,compiling, console entry counts, whether the buffer was seeded, and the sample'sageMs), so a client can spot the buffer disagreeing with the Console window in one round trip. - [UUM-151473] New
console_statuscommand: the same counters and compile-failure flag without the entries, cheap enough to poll while a compile runs. - [UUM-151473]
consoleentries carrylogType(Unity's exactLogTypename, keeping the Exception/Assert distinction thatlevelcollapses) andseeded(read from the Editor console store rather than captured live, so the timestamp is the read time). - [UUM-151473]
recompile_statusreportscompilationFailed.
Fixed
- [UUM-151473] Fixed
consolereturning an empty result that was indistinguishable from "nothing new" when thesincecursor came from an earlier Editor session. Sequence numbers restart with the process (the buffer is persisted underTemp/, which Unity deletes at every launch), so such a cursor filtered out every entry held. Responses now carry asession,consoleacceptssince_session, and a cursor that cannot be honored returns the tail withreset=trueanddropped=true. - [UUM-151473] Fixed
ConsoleLogBuffer.Loaddiscarding entries logged since the snapshot it restores, and lowering the sequence counter when the snapshot was stale. It now merges by sequence number and never rewinds a cursor already handed out. - [UUM-151473] Fixed
consolenever reporting Editor compile errors logged before capture started. Those are logged as sticky entries that survive every console clear until the next compile completes, so they can stand in the Console window indefinitely; the buffer is now backfilled once per session from the Editor console's own store. - [UUM-151473] Fixed console capture staying dead after Unity unregistered the native log callback with no observable symptom. The Editor now samples the console's own counts and re-arms capture when they move while the buffer's cursor does not.
- [UUM-151473] Fixed
recompilereportingup_to_datewhile compile errors were still standing. A failed editor compile suppresses the domain reload and leaves the errors in place, so a repeat call with nothing changed compiled nothing and erased the recorded failure. Bothrecompileandrecompile_statusnow consult Unity's native compile-failure flag, which also covers the status file being deleted withTemp/at every Editor launch. - [UUM-151473] Fixed
clear_consoleclearing only one of the package's two console buffers, soconsolekept returning entries that had been cleared. - [UUM-151968] The runtime instance descriptor now writes to
Application.persistentDataPathon Android instead of besideApplication.dataPath, which is read-only there. - [AUTHAPI-49]
Pipeline_SessionStoppednow fires onEditorApplication.wantsToQuitinstead ofEditorApplication.quitting, since the Analytics service is already shutting down by the timequittingruns and the event was never actually sent.
Removed
- [UUM-151473] Removed
get_console_logs, which duplicatedconsoleover a second buffer of its own — every log line was captured twice, andclear_consolecleared only one of them. Useconsole; its newlogTypefield carries the exact log typeget_console_logsreported.
[0.6.0-exp.1] - 2026-08-31
Changed
- Hot reload is now called code reload throughout. The attributes are
[CodeReload],[OnCodeReload]and[CodeReloadOverrideMethod]in namespaceUnity.Pipeline.CodeReload; the registry isCodeReloadRegistry; the commandshotreload_statusandcleanup_hotreloadare nowcodereload_statusandcleanup_codereload(tagscripts/codereload); the sample lives underSamples~/CodeReload; the documentation page iscode-reload.md. The watcher and the folder push now pick up.csfiles that mentionCodeReloadinstead ofHotReload. The[HotReload]family no longer exists, so user code must be updated. - [AUTHAPI-49]
BasePipelineServer.OnTransactionProcessed(requestJson, responseJson)is replaced byOnCommandDone(in CommandExecutionInfo), which also carries the command that ran, whether it succeeded, and how long it took. A detached job now reports when it actually completes, not only when its job handle was returned. - [UUM-149580] Reorganized the Pipeline Runtime settings page (Project Settings > Pipeline > Runtime) into "Server" and "Runtime Behavior" groups, moved the status/security HelpBox to the top, and added an always-visible feature description when there's nothing to warn about. All fields except Max Work Items Per Frame are now read-only while in Play Mode, since edits to them would silently not apply until the next Play session or build; Max Work Items Per Frame stays live-editable —
RuntimePipelineDriverpolls it fresh every frame (cheaply, gated on the settings file's timestamp), matching the pre-redesign component's behavior for that field. - [UUM-149580] Every field except Enable In Builds itself is now greyed out on the Pipeline Runtime settings page while Enable In Builds is off, instead of staying editable for a server that will not run.
reload_fileresult contract, stated: a reload that compiles but applies NO methods now fails with the per-method reasons (previously a silent success); a file whose[HotReload]methods all match the compiled baseline reports an explicit "up to date" success — naming any stale overrides it reverted — instead of "hot reload successful with 0 methods".- [AUTHAPI-26] A non-positive
timeout/timeout_msoneval,eval_file, orrun_scriptnow returns a clear400 Bad Requestinstead of an opaque dispatcher timeout. - Reformatted CHANGELOG.md to more accurately track Keep a Changelog
- [AUTHAPI-59] Test fixtures and test-only helper classes under
Tests/are nowinternalinstead ofpublic— they were never part of the package's public API surface. - [AUTHAPI-59] Command handler classes and their result/DTO types under
Editor/Commands/andRuntime/Commands/are nowinternalinstead ofpublic. Command registration and dispatch work via reflection regardless of accessibility (seeDocumentation~/creating-commands.md), so this was never functionally required. - [AUTHAPI-59]
EditorPipelineManager,EditorPipelineManagerEditor,PipelineServerStartup,EditorPipelineServer,PipelineRuntimeBuildProcessor,HotReloadInPlaceILPostProcessor, andSecurityTokenManagerare nowinternalinstead ofpublic.[CustomEditor],[InitializeOnLoad], the build pipeline, andILPostProcessordiscovery all work via reflection regardless of accessibility, and none of these types were referenced outside the package. - [AUTHAPI-59]
RuntimePipelineConfigEditor,RuntimePipelineSettingsProvider,PushEnvelope,PushVerifier,PushVerifyStatus,RotatingFileBackup, and theUnity.Pipeline.Telemetryeval-usage helper types are nowinternalinstead ofpublic— same rationale:[CustomEditor]/[SettingsProvider]discovery is reflection-based, and none of these are referenced outside the package.
Removed
- The separate-override-file hot reload workflow: the
reload_file_overridecommand, the[HotReloadWithOverrides]attribute,HotReloadHelper, and theHotReload_WithHelperssample. Tag methods[HotReload]and edit them in place withreload_fileinstead (seeDocumentation~/hot-reload.md). The unused[HotReloadableComponent],[HotReloadComponent]and[HotReloadTarget]attributes are gone too.
Fixed
- Code reload: a
varlocal whose inferred type is nested in the reloaded class (var inp = new BufferedInput { ... }) no longer fails to compile with "The type name 'var' does not exist in the type ..."; ausingalias for such a type is left alone too. - Code reload: when a reload fails to compile, each diagnostic now names the user's file and line, the compiler error code, and the generated line that failed, and the full generated source is written to
Temp/CodeReload/<assembly>.failed.csfor inspection. - Code reload in the Editor no longer depends on the runtime Pipeline server being enabled.
[CodeReload]targets were only discovered by the runtime driver, which is not created whenenableInBuildsis off (the default), so an in-editor reload compiled but bound 0 methods with a misleading "added after the running build" reason. Entering Play Mode now registers the targets either way, and an empty registry is reported as such. - Interpreter backend:
new S { x = 1 }anddefault(S)on a host struct bound boxed (the auto-bind default, e.g. astructnested in the reloaded MonoBehaviour) failed at runtime with "Non-static field requires a target". The default box is now created, both forinitobjand for the initobj-free form Roslyn emits when every field is assigned (S s; s.x = 1; s.y = 2;), so object initializers, field-by-field construction and nullable-struct fields work in reloaded bodies. Reading or writing a host field on a null object now reports the field name and source line instead of the bare reflection error, and an exception escaping a reloaded body is logged with its script location before it propagates. build: a scripted build withDevelopmentinoptionsno longer trips the "enableInBuilds without a Development Build" security dialog (the guard only looked at the Build Settings toggle, so abuildcommand from the CLI stalled on a modal, or was cancelled).reload_file_player_interpreter: a push made before the player's signing handshake has arrived now waits up to 10 s for it instead of 2 s; the first push to a freshly connected IL2CPP player was dropped at 2 s.- [UUM-149991] AutoStaticsCleanup: Fixed usage-analysis findings.
- [UUM-149991] Fixed
CommandRegistrystaying on reflection-based command discovery after exiting Play Mode without a domain reload;PipelineServerStartupnow restores TypeCache discovery onEnteredEditMode. - [UUM-149977] Removed the "Editor is not in automated mode" console warning. Now surfaced as
infoon the instance descriptor instead. - [AUTHAPI-36] Fixed
TestResultCollector.RunFinishedthrowingInvalidOperationException(double-complete) when a run had already been completed bySetError/Cancel(e.g. a timed-out or errored run): a lateRunFinishedis now a no-op and the original error/cancellation is preserved. - [UUM-149580] The Pipeline server no longer permanently enables Player Settings "Run In Background" on start; the runtime driver now saves and restores the project's original value around start/stop.
- [UUM-149580] Transient
RuntimePipelineConfig/RuntimePipelineBuildInfoassets left behind by an interrupted build are now purged at the start of every build, so a disabled build can no longer ship the runtime Pipeline server. - [UUM-149580] Reading Runtime settings (Project Settings page,
get_runtime_pipeline_settings, or a refused/dry-runset_runtime_pipeline_settings) no longer writes the settings file. - [UUM-149580]
set_runtime_pipeline_settingsnow rejects aport,requestTimeoutMs, ormaxWorkItemsPerFrameoutside the same bounds the Project Settings page enforces, instead of silently persisting an invalid value (amaxWorkItemsPerFrameof 0 permanently starved the dispatcher's work queue).
Added
- [AUTHAPI-68]
POST /api/execaccepts an unparsed command line ascommandLine(a string the server tokenizes) orargv(pre-split tokens), binding positional and--flagarguments against the command's declared parameters server-side. Exactly one ofcommand,commandLineorargvmay be present, andparameterscannot accompany the raw forms. Argument failures return400witherrorCode: "INVALID_COMMAND_ARGS", a machine-readableargProblemsarray, and the command'scommandSchema; successful raw-form replies echo the boundparameters. Servers advertiseexec.argv/exec.commandLineincapabilitieson/api/statusand in the port descriptor.commandis no longer a JSON-required property, so a body carrying none of the three forms is now rejected by request validation as400 {"error":"Invalid Request","errorDetails":"Command name is required"}instead of by deserialization as400 {"error":"Invalid JSON"}. - [AUTHAPI-64] Added a new endpoint reporting currently-open modal dialogs, and command execution now reports any dialogs shown while it ran. Main-thread commands are rejected with a busy status while a dialog is open, and status polling reports that a dialog is blocking it. Requires a recent enough trunk build.
- [AUTHAPI-29] Instrument
eval/eval_fileusage: each call logs a JSONL record (timing, success, statement/expression shape, and an API fingerprint of top-level member accesses) to<project>/Library/Pipeline/eval-usage.jsonl, editor-only and local-first — raw source isn't stored unlessStore Eval Sourceis enabled. Toggle viaEval Telemetry Enabled. - [AUTHAPI-29] New
report_evalscommand: ranks logged eval fingerprints by frequency and cross-references the command catalog to surface patterns not yet covered by an existing command. - [AUTHAPI-49] Editor analytics:
Pipeline_SessionStartedon the first command a client executes,Pipeline_CommandExecutedper command executed, andPipeline_SessionStoppedwhen the Editor quits.isEvalWithExistingCommandAvailablereuses the AUTHAPI-29 eval fingerprints and coverage map, so it agrees withreport_evalsby construction. Only commands shipped in the package report their name and tags; a project-declared command reports<customUserCommand>and no tags. SeeDocumentation~/analytics.md. - [UUM-149580]
runtime_statusnow reportspipelineDriver(isServerRunning, actualPort, and the enableInBuilds/requestTimeoutMs/enableAuditLogging/autoStart/maxWorkItemsPerFrame values actually governing the running driver, not just what Project Settings currently shows) —nullif no driver was ever bootstrapped. - [UUM-149580] New
get_runtime_pipeline_settings/set_runtime_pipeline_settingscommands: structured,confirm/dry_run-gated read/write access to Pipeline Runtime settings (Project Settings > Pipeline > Runtime), matching the existing Audio/Graphics/Input/Physics/Player/Quality/Time settings command family. Refused while in Play Mode. - [AUTHAPI-27] New
batchcommand: run up to 200 ordered operations in one request, with later ops referencing earlier results. Transactional by default (single Undo step, rolled back on failure); supportson_error,dry_run,time_budget_ms, and detachedjobexecution. SeeDocumentation~/commands/batch.mdfor details. - [AUTHAPI-26] New
run_scriptcommand: compile a single C# file in memory (no domain reload) and execute a named static entry point. Supportsephemeral(compile→run→discard) andhotpatchmodes, JSON-coerced args, custom references/defines, anddry_runcompilation. Returns{ result, diagnostics, compileMs, executeMs, assemblyName }; runtime errors include sourcefile:line. - [AUTHAPI-21] Leaner
/api/execresponses by default: compact JSON, no null envelope keys, no always-on metadata — a minimal success is just{"success":true,"result":...}. Use"verbose": trueto restore the full envelope, or"omitNulls": trueto also drop nulls insideresult. Addedformat="value"toget_serialized_fieldsto return raw values instead of a full descriptor. - [AUTHAPI-21] New
warningsarray on responses for non-fatal corrective guidance (e.g. an ignored/invalid query parameter). - [AUTHAPI-21]
/api/job,/api/job/cancel, and/api/progressnow include null keys explicitly; passomit_nulls=trueto drop them. - [AUTHAPI-21]
POST /api/execnow rejects a literal JSONnullbody with a structured 400 instead of an internal error. - Add an IL interpreter (IlInterpreter) that works in IL2CPP players and the editor. Opt in with the
reload_file_editor_interpretercommand or by pushing to a connected device withreload_file_player_interpreter; the hot-reload watch always uses it. A shipped Roslyn analyzer (MS002–MS023) marks the supported C# subset in[HotReload]method bodies. - Add an
[OnHotReload]attribute to react to code being hot-reloaded. - Add a
.cschange watcher, enabled from the Pipeline settings, that hot-reloads changed code without a domain reload — in editor play mode, or in a player connected via the profiler connection.
[0.5.0-exp.1] - 2026-08-10
Added
- [CLI-488] New
GET /api/progressendpoint reporting the currently executing command's progress, served off the main thread so it responds even during a blocking command. Command authors report viaCliProgress.Report(...)orCliEditorProgress.DisplayProgressBar;UnityEditor.Progressitems are mirrored automatically. Powers live progress bars in theunityCLI. (with CLI-335) - [CLI-335] Detached command jobs:
POST /api/execwith"job": trueruns in the background and returns a job id immediately; pollGET /api/job?id=…for state/progress/result.POST /api/job/cancelcancels a queued job or requests cooperative cancellation of a running one via the newPipelineCancellationAPI. Results are retained for 1 hour / last 100 jobs. - [CLI-488] New
audit/audit_statuscommands: run a Project Auditor static-analysis scan and poll it, producing an issue CSV. Works via reflection so the package still runs without Project Auditor installed; reportsunavailablewith install guidance when analysis rules are missing. - [AUTHAPI-35] Report
settlingon/api/statusand reject main-thread commands with503 Server Busywhile the Editor is still importing/compiling after a cold start. Background commands (recompile_status,package_status,console,editor_status) stay servable throughout.
Changed
- [CLI-335] Raised the
evaltimeout cap from 30 seconds to 24 hours. - [CLI-335] The HTTP server now processes requests concurrently —
/api/statusand/api/progressanswer immediately even during a long-running command. Command execution itself remains strictly serialized. - [CLI-335] Hardening: a command's own timeout (not a fixed 60s) governs
/api/exec's wait;editor_status/test_statusqueue behind the exec gate; progress/job state is scoped per server instance; detached jobs are capped at 100 concurrent (further submissions get429).
Fixed
- Fixed
executedAtreturning a zero-value instead of the actual execution time foreval/eval_file,hot-reload, andrun_tests/test_status. - [UUM-148802] Fixed
get_console_logs/clear_console/consolelosing console capture after exiting Play Mode by re-subscribing to Unity's log callback on every play-mode transition. - [UUM-148605]
set_autotick's enabled/interval state now persists across domain reloads via SessionState. Added apersistflag (defaulttrue) to opt out. - [UUM-149016] Fixed
InvalidOperationExceptions after repeatedrun_testsruns caused by a staleTestResultCollectorstill registered with Unity's TestRunnerApi.
[0.4.0-exp.1] - 2026-07-23
- Persist the pipeline server auth token across editor domain reloads so long-lived clients (MCP/IDE) no longer get
401after a recompile. (CLI-412) capture_game_viewgains asourceparameter:camera(default, unchanged) orscreen.source=screencaptures the composited game view backbuffer so Screen Space - Overlay UI (HUDs, menus) is included — the camera path never sees overlay canvases. Screen capture requires Play Mode; in Edit Mode it returns a clear error. (AUTHAPI-10)capture_game_view/capture_scene_viewwithsave_pathnow return a path-only result (no base64) so agent tool results stay small; passinclude_inline_image=truefor the old behavior. Addmax_resolutionto cap the inline image size. (AUTHAPI-8)- Object-reference string handles now accept authoring-root-relative asset paths (e.g.
Materials/Floor.mat, not justAssets/Materials/Floor.mat): a relative string with a file extension is treated as an asset path and normalized under the authoring root, and a failed lookup now reports every strategy tried instead of a misleading hierarchy-path-only error. (AUTHAPI-9)
[0.3.1-exp.1] - 2026-07-16
- Update docs
[0.3.0-exp.1] - 2026-07-13
- Improve security by ensuring token usage and enforcing read control on the token.
- Fix all upm-pvp warnings.
- Fix Samples installation.
- All server works if the App is minimized (in the RunInBackground).
- Rework all docs.
- Improve connectivity regaridng IPv4 vs IPv6 support.
- Add
eval_filecommand: evaluate C# code read from a.csfile on disk, as a file-based alternative toeval(which takes inlinecode). Both commands run the source through the same evaluation path. - Add a large set of Editor automation commands for agentic content-pipeline control:
- Assets & files:
create_asset,import_asset,move_asset,copy_asset,rename_asset,delete_asset,find_assets,create_folder,get_import_settings,set_import_settings,read_text_file,write_text_file. - Scenes:
create_scene,open_scene,save_scene,save_all,list_open_scenes,set_active_scene,get_scene_hierarchy,add_scene_to_build,remove_scene_from_build. - GameObjects & components:
create_gameobject,create_gameobjects,delete_gameobject,find_gameobjects,rename_gameobject,set_parent,set_transform,set_active,set_tag,set_layer,add_component,remove_component,get_component_properties,set_component_properties. - Prefabs:
create_prefab,create_prefab_variant,instantiate_prefab,apply_prefab_overrides,revert_prefab_overrides,unpack_prefab,save_prefab_contents. - Scripts & serialized fields:
create_script,attach_script,get_serialized_fields,set_serialized_field. - Selection & search:
get_selection,set_selection,search. - Capture & screenshots:
screenshot,capture_game_view,capture_scene_view,capture_editor_element,capture_runtime_element. - Build:
build,build_status. - Console & diagnostics:
console,clear_console,get_console_logs,get_performance_stats. - Editor menus & authoring root:
menu,get_authoring_root,set_authoring_root. - Materials & shaders:
get_material_properties,set_material_properties,get_shader_properties,list_shaders. - Animation & Animator:
create_animation_clip,get_animation_clip,set_animation_curve,remove_animation_curve,create_animator_controller,get_animator_controller,add_animator_layer,add_animator_parameter,add_animator_state,add_animator_transition. - Timeline:
create_timeline,get_timeline,add_timeline_track,add_timeline_clip. - Lighting:
bake_lighting,cancel_lighting_bake,lighting_bake_status,clear_baked_lighting,get_lighting_settings,set_lighting_settings. - NavMesh:
bake_navmesh,bake_navmesh_surfaces,cancel_navmesh_bake,navmesh_bake_status,clear_navmesh,get_navmesh_settings,set_navmesh_settings. - Occlusion culling:
bake_occlusion_culling,cancel_occlusion_bake,occlusion_bake_status,clear_occlusion_culling.
- Assets & files:
- Update Wrench
- Warn user if Unity Editor is started in non-automated mode.
[0.2.0-exp.2] - 2026-06-24
- Fix security audit flaws
- First official published version