This new version comes with lots of additions and fixes for you! Sorry for the long post!
TL;DR:
- Hot reload is more powerful and can be used with IL2CPP and on connected players
- The Runtime Server has been moved from a MonoBehavior to Settings (Breaking change)
- New feature to batch commands together
- Analytics to improve your workflow
- And much more!
## New
- Hot reload Turn on the
.cswatcher in the Pipeline settings and saving a file updates the running code — no domain reload, no restart. Works in Editor Play Mode and in a connected player. A new IL interpreter means it now works in IL2CPP players too (reload_file_player_interpreter), a shipped Roslyn analyzer marks the supported C# subset inside[HotReload]bodies, and a new[OnHotReload]attribute lets you react when a reload lands. batchRun up to 200 commands in one request, with later operations referencing earlier results. Transactional by default: the whole thing is one Undo step, and a failure rolls back everything already applied. Supportsdry_run,on_error, a time budget, and detached jobs.run_scriptCompile a single.csfile in memory and call a static method you name — no asset import, no domain reload.ephemeralorhotpatchmode, JSON arguments, andfile:lineon runtime errors.- Runtime settings over the API New
get_runtime_pipeline_settings/set_runtime_pipeline_settings, gated byconfirm/dry_runand refused in Play Mode.runtime_statusnow also reports the settings actually governing the running server, not just what Project Settings shows. - Leaner responses
/api/execis compact by default — a minimal success is just{"success":true,"result":...}. PassverboseoromitNullsto change the shape,get_serialized_fieldstakesformat="value"for raw values, and a newwarningsarray carries non-fatal advice. - Eval usage logging and
report_evalsevalcalls are logged locally — editor-only, and your source isn’t stored unless you enableStore Eval Source.report_evalsranks those calls against the command catalog to show what people keep hand-writing that should be a real command. - Editor analytics Session and per-command events. Command names and tags only — no parameters, source, paths or results — and Unity’s own analytics opt-out disables all of it.
- [Unity 6.7] The Editor tells you when a dialog is blocking it A new endpoint lists open modal dialogs, main-thread commands are rejected as busy while one is up, and status polling names the dialog as the reason — so an automation run no longer hangs on a popup nobody can see. Unity 6.7 only for now.
## Fixes
- A build with the Pipeline server disabled could still ship it. Transient config assets left behind by an interrupted build are now purged at the start of every build.
- The server used to permanently turn on Player Settings > Run In Background.The runtime driver now saves your project’s original value and restores it around start and stop.
- Invalid runtime settings could be saved silently.
set_runtime_pipeline_settingsnow rejects aport,requestTimeoutMsormaxWorkItemsPerFrameoutside the same bounds the settings page enforces. AmaxWorkItemsPerFrameof 0 used to permanently starve the dispatcher’s work queue. - Just reading Runtime settings used to write the settings file. Opening the settings page, calling
get_runtime_pipeline_settings, or a refused/dry-run write no longer touches it. reload_filereported success when it applied nothing. It now fails with the reason per method, and a file that’s already up to date says so explicitly instead of “hot reload successful with 0 methods”.- A timed-out or errored test run could crash on late results.
RunFinishedarriving after the run was already completed is now a no-op, and the original error is preserved. - Exiting Play Mode without a domain reload left command lookup on the slow reflection path. It now switches back to TypeCache.
- A
timeoutof zero or lessoneval,eval_fileorrun_scriptnow returns a clear400 Bad Requestinstead of an opaque dispatcher timeout. - A literal JSON
nullposted to/api/execnow returns a structured 400 instead of an internal error. - The “Editor is not in automated mode” console warning is gone— that’s now
infoon the instance descriptor. - Cleaned up usage-analysis findings in
AutoStaticsCleanup.
## Changes
- The Runtime settings page has been reorganised into “Server” and “Runtime Behavior” groups with the status notice at the top. Fields are read-only in Play Mode, since edits wouldn’t apply until the next Play session or build — except Max Work Items Per Frame, which stays live. Everything is greyed out while Enable In Builds is off.
reload_filenow reports honestly A reload that compiles but applies no methods used to report success; it now fails with the reason per method. A file that’s already up to date says so explicitly instead of “hot reload successful with 0 methods”.OnTransactionProcessedis nowOnCommandDoneIf you subclassBasePipelineServer, the replacement takesin CommandExecutionInfoand also tells you which command ran, whether it succeeded, and how long it took. Detached jobs now report when they actually complete rather than when their handle was returned.- Heads up — many types are now
internaltest fixtures, command handlers and their DTOs,EditorPipelineManager,PipelineServerStartup,EditorPipelineServer,SecurityTokenManager,RuntimePipelineSettingsProviderand others. None were part of the public API and discovery is reflection-based either way, so nothing should break — but if you were reaching into one, tell us what for. That’s a sign we’re missing a proper API. - A
timeoutof zero or less oneval,eval_fileorrun_scriptnow returns a clear400 Bad Requestinstead of an opaque dispatcher timeout.
Full details for batch, run_script, hot reload and analytics are in the package’s Documentation.