Unity Pipeline package 0.6.0-exp.1 is available now!

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 .cs watcher 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.
  • batch Run 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. Supports dry_run, on_error, a time budget, and detached jobs.
  • run_script Compile a single .cs file in memory and call a static method you name — no asset import, no domain reload. ephemeral or hotpatch mode, JSON arguments, and file:line on runtime errors.
  • Runtime settings over the API New get_runtime_pipeline_settings / set_runtime_pipeline_settings, gated by confirm/dry_run and refused in Play Mode. runtime_status now also reports the settings actually governing the running server, not just what Project Settings shows.
  • Leaner responses /api/exec is compact by default — a minimal success is just {"success":true,"result":...}. Pass verbose or omitNulls to change the shape, get_serialized_fields takes format="value" for raw values, and a new warnings array carries non-fatal advice.
  • Eval usage logging and report_evals eval calls are logged locally — editor-only, and your source isn’t stored unless you enable Store Eval Source. report_evals ranks 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_settings now rejects aport,requestTimeoutMs or maxWorkItemsPerFrame outside the same bounds the settings page enforces. A maxWorkItemsPerFrame of 0 used to permanently starve the dispatcher’s work queue.
  • Just reading Runtime settings used to write the settings file. Opening the settings page, callingget_runtime_pipeline_settings, or a refused/dry-run write no longer touches it.
  • reload_file reported 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. RunFinished arriving 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 timeout of zero or lessoneval,eval_file or run_scriptnow returns a clear400 Bad Request instead of an opaque dispatcher timeout.
  • A literal JSON null posted to /api/exec now returns a structured 400 instead of an internal error.
  • The “Editor is not in automated mode” console warning is gone— that’s now info on 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_file now 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”.
  • OnTransactionProcessed is now OnCommandDone If you subclass BasePipelineServer, the replacement takes in CommandExecutionInfo and 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 internal test fixtures, command handlers and their DTOs, EditorPipelineManager, PipelineServerStartup, EditorPipelineServer, SecurityTokenManager, RuntimePipelineSettingsProvider and 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 timeout of zero or less on eval, eval_file or run_script now returns a clear 400 Bad Request instead of an opaque dispatcher timeout.

Full details for batch, run_script, hot reload and analytics are in the package’s Documentation.

1 Like

Unity CLI 1.0.0-beta.8 is rolling out - #4 by bugfinders :slight_smile: there seems to be a bug :smiley: it is a pipeline package issue not the CLI specifically, but..

Yeap!
I see that @sebastienp_unity is already on the issue!
We had to introduce a new API in the Editor so it requires a brand new version of the editor to properly work!
Once you have it you should be good to go! The other error is certainly caused by the fact that your current version of the pipeline is not compiling with the editor :sweat_smile: sorry for that!

1 Like

image

please don’t add a log entering playmode every domain reload in our editor

-edit- https://gitlab.com/tertle/com.unity.pipeline if you want latest pipeline without play mode entering logs

My mistake, a merge gone wrong. Will be fixed in the next release !

Where can we turn this on? i cant find it

1 Like

In the Editor, open the Window > Pipeline > Settings window, then in the Watcher section, click on Start. Note that you need to put the [HotReload] attribute on methods you intend to edit ahead of time and that it does not support all possible code changes - adding fields to a class is not supported etc. I’m working on a proper doc to detail the limitations. It will get better with time !

Note that you need to put the [HotReload] attribute on methods you intend to edit ahead of time and that it does not support any edit.

?

i need to add this attribute on methods i want to edit, but it doesnt support edit? What is the point of this then?

it does seem a bit daft doesnt it

Mistyped :sweat_smile: it does not support all possible code changes - adding fields to a class is not supported etc. I’m working on a proper doc to detail the limitations. Editing the content of a method is the main use case right now.