Skip to content

Succinix v0.4.0

Choose a tag to compare

@CJackHwang CJackHwang released this 11 Aug 09:44
· 46 commits to main since this release

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 narrow TerminalRpc / TerminalOutput contracts.
  • createTerminalBoot — parameterized boot flow (steps / retry / testMode) with BootUI progress markers.
  • The standalone app is now a thin assembly layer over the SDK — no behavior change.
  • New package export: @succinix/engine/terminal (self-contained, zero node: references).

Multi-instance (M1–M5)

  • @succinix/engine/instance exports createSuccinixInstance({ wc, instanceId, ... }) — aggregates executor + terminal session + per-instance snapshot persistence, services and port views.
  • Additive instanceId protocol field: state files under /workspace/.succinix-<id>, per-instance IndexedDB snapshot keys, per-instance ps filtering, per-instance interrupt and kill authorization (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)

  • userId and instanceId are 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

v0.3.0...v0.4.0