Repository navigation
rutis v0.8.0
rutis 0.8.0
0.8.0 adds native Windows support and per-instance plugin management, and brings the core and the dylib toolchain into the release train: from this release on, every rutis package shares one version number.
Packages
All of these are at 0.8.0:
| Registry | Packages |
|---|---|
| crates.io | rutis (the core), rutis-bridge, rutis-loader, rutis-host; the dylib toolchain rutis-sdk, rutis-dylib, rutis-dylib-meta, rutis-dylib-launcher (first release on crates.io) |
| npm | @arcships/rutis, @arcships/rutis-runtime, @arcships/rutis-host, and the five platform host packages |
| PyPI | rutis, rutis-host |
| GitHub | rutis-host binaries for Linux / macOS (x64 / arm64) and Windows (x64), with SHA-256 checksums |
The core has no code changes; it moves from 0.6.1 straight to 0.8.0 to line up with the train. rutis-cli keeps its own version.
What's new
- Native Windows (x64, MSVC): embedded in Rust, Node / Python language runtimes, remote runtimes and cross-language shared services run on Windows. A local runtime gets its channel over a loopback address with a one-time token. Runtime processes join a Job Object that closes with the host, so none outlives the host however it exits. Exit reasons are reported as
RuntimeState::Downas usual. TheProcess::launch/Process::mountcompatibility API and the Cordis mount bindings generated with it start their runtimes the same way. Therutis-hostcommand runs on Windows too: a release binary,npx @arcships/rutis-host(@arcships/rutis-host-win32-x64) anduvx rutis-host(a Windows wheel); it finds a project's virtual environment at.venv\Scripts\python.exeand usespythonotherwise. - Instanced groups: the loader manages plugins inside instances the application creates at runtime, for example one set per session. Set
instanced: trueon a group and manage instances withcreate_instance/remove_instance/restart_instance. Configuration edits,reloadandrestartreach every copy; if any copy fails, the change is rolled back. - Service names inside instances: a service name can belong to a kind of instance and resolve to each instance's own key. Configuration and plugin code (Rust, TypeScript, Python) write only the name. Language runtimes and node links are isolated per instance.
- Fixes:
- A local process that exits right after starting reports its exit status on send too, not just
Broken pipe. - Another local process that connects to the loopback listener and sends nothing no longer delays the runtime's start.
- The Python runtime now applies a row's
isolate.
- A local process that exits right after starting reports its exit status on send too, not just
- Release: the two PyPI projects are published from separate environments.
Compatibility
A few public Rust APIs changed incompatibly: Resolved is now built with Resolved::new; EntryStatus gains Stopped and Handover gains Loopback; EntryStatus, EntryInfo, InstanceInfo, Handover and Resolved are #[non_exhaustive], so later fields and variants are no longer breaking changes. Dylib plugins must be rebuilt with the 0.8.0 SDK. See the migration guide.
Protocol versions are unchanged: local sessions use protocol 2, sessions with endpoint identity protocol 3. Use the same train version for the host and the language runtimes; instance services need 0.8 runtimes. Node 24+ and Python 3.12+ are required.
Getting started
npx @arcships/rutis-host@0.8.0 new greeter --lang node
uvx --from rutis-host==0.8.0 rutis-host new greeter-py --lang pythonThen read TypeScript plugins, Python plugins, embedding in Rust or connecting nodes.