Succinix v0.4.0
Succinix v0.4.0 — Platform release: Terminal SDK · Multi-instance · Multi-user
Browser-native Linux, MIT licensed. This release turns Succinix into an embeddable multi-tenant Linux runtime: the terminal interaction core is now a UI-free SDK, state/snapshots/process views partition per instance, and multi-user semantics are documented as organizational isolation (not a security boundary).
Terminal SDK (E1–E4)
SuccinixTerminalSession— UI-free terminal interaction core (command history, Tab completion, real Ctrl+C interrupt, command queue, cwd-following prompt) over the narrowTerminalRpc/TerminalOutputcontracts.createTerminalBoot— parameterized boot flow (steps / retry / testMode) withBootUIprogress markers.- The standalone app is now a thin assembly layer over the SDK — no behavior change.
- New package export:
@succinix/engine/terminal(self-contained, zeronode:references).
Multi-instance (M1–M5)
@succinix/engine/instanceexportscreateSuccinixInstance({ wc, instanceId, ... })— aggregates executor + terminal session + per-instance snapshot persistence, services and port views.- Additive
instanceIdprotocol field: state files under/workspace/.succinix-<id>, per-instance IndexedDB snapshot keys, per-instancepsfiltering, per-instanceinterruptandkillauthorization (cross-instance kills rejected). ?instance=<id>starts the standalone app as a named instance — dual-tab demo, e2e verified (27/27 checks).- Same-page multi-instance (future host use): shared RPC channel + single watchdog + per-instance service/port registries (documented boundary — Lifo interaction cwd is page-level).
Multi-user semantics (U1)
userIdandinstanceIdare the same field;?user=<id>seeds a per-user home (/workspace/users/<id>), prompt and node/python spawns start there, state/snapshots/process views are per-user.- Host-side kill authorization rejects cross-instance/system kills for non-default instances.
- Documented as organizational isolation, not a security boundary (AGENTS.md / SDK.md / PROTOCOL.md).
Quality
- Self-test
?test=1: 76 passed, 0 failed, 5 skipped (was 71). - Vitest: 336 tests across 26 files (was 118).
- Bench (measured): boot → prompt ~6.1 s (dominated by WebContainer.boot, environment-dependent); Lifo/Node command p50 ≈ 79 ms — no regression vs 0.3.0; snapshot N=200 → 13 ms.
- host.js grew 5 KB → 15 KB (per-instance routing lives in the host daemon); lifo-core.js unchanged (lazy-loaded).
Full changelog:
https://github.com/CJackHwang/Succinix/blob/main/CHANGELOG.md