Skip to content

Capabilities & limits

The README capability table is the source of truth. Black-box probes drive a real session over POST /new and WebSocket; an HTTP 200 alone isn’t a pass. Run the suite against any live deployment:

Terminal window
BASE=https://nimbus-os.dev bun test:behavioral
  • ShellReal shell, 60+ Unix commands, persistent 10 GB filesystemworks
  • Runtimesnode, bun via Cloudflare workerd nodejs_compat (V8 + Node-API shim, not the upstream binaries)works
  • Runtimespython / python3 — Pyodide-based CPython 3.13 (script + -c + -m + stdlib)works
  • Runtimesruby / ruby3 — ruby.wasm-based Ruby 3.3 (script + -e + -r + stdlib)works
  • Runtimesclang — LLVM 8 → wasm32-wasi-nimbus, modern wasi-libc sysroot default, multi-TU + user headers + fopenworks
  • RuntimesInteractive REPLs — python, ruby, node, bunworks
  • Packagesnpm install against the live registry, with cross-session L2 cacheworks
  • Packagesnpm alias dependencies such as alias: "npm:<pkg>@<version>"works
  • Gitgit clone over HTTPS — chunked checkout engine; facebook/react (7,300 files) in ~28 s; 84,000-file worktrees materialize via bounded continuationworks
  • NetworkIn-session loopback networking — curl http://127.0.0.1:<port> reaches servers in other isolates; node server.js auto-promotes to a routeable resident processworks
  • NetworkStreaming HTTP through the fabric — SSE / chunked bodies flow live (per-chunk) across the isolate boundary, loopback and external preview alikeworks
  • ShellUnix permissions groundwork — durable st_mode, real chmod (octal + symbolic), exec-bit enforcement: ./binary runs only if executable (Permission denied, exit 126 otherwise), generic #! shebang dispatchworks
  • ProcessesMulti-isolate processes — client/server apps span facets (opencode runs as a serve + attach pair, each in its own isolate)alpha
  • Dev serversVite SPA dev server — full HMR to the preview iframeworks
  • Dev serverswrangler dev for single-file Workers; Workers + Static Assetsworks
  • SDKProgrammatic sandbox SDK — exec/files/runtimes/processes/ports/Proteus-style toolsworks
  • ProcessesJS agent CLI primitives — env/home, npm/npx, child_process.spawn/exec/execFile, piped stdio, streams, logsworks
  • ProcessesForeground attached npm-bin TTY tabs — stdin, resize, ANSI output, clean exit; Pi official installer and npm path probedalpha
  • PackagesPython package workflows — pip, PyPI pure wheels, requirements/constraints, curated pure source artifacts, declared Pyodide startup-module packages, Flask, python -m flask run, python -m http.server previewalpha
  • PackagesRuby package workflows — gem, bundle, pure gems, Rack/WEBrick previewalpha
  • AgentSession Agent — editor-workspace chat with Cloudflare OAuth / Workers AI and sandbox toolsworks
  • Packagesnpx <pkg> — first-class shebang + auto-install fallbackworks
  • Packagesnode_modules/.bin/* resolves and executesworks
  • ShellBinary file round-trip via fs.writeFileSync / readFileSyncworks
  • ShellSession recovery — WebSocket drop → reconnect preserves cwd, env, filesworks
  • RuntimesWASI preview1 — 45 of 46 spec functions; outbound TCP via path_open('/dev/tcp/<host>/<port>') (JSPI); full poll_oneoff (fd / clock / socket subscriptions)works
  • Runtimeswasi-threads (thread_spawn) — refused at link timenot supported

Mirrors the README capability table— the live-probed source of truth, covered by the behavioral suite intests/behavioral/.

Nimbus is built on Workers, Durable Objects, and WASM, not as a Linux VM. A workload that needs one of these missing parts belongs on a microVM or container sandbox (where Nimbus fits).

Not supported
Docker, apt, custom Linux images no container substrate exists
Native Linux ELF execution there is no ELF loader
Native platform CLI shards, manylinux wheels, native gems fail before import with an exact ABI diagnostic
Raw public TCP listeners inbound is HTTP(S) through session routes
Next.js dev server, wrangler pages dev explicit limits today
GPUs
wasi-threads / -pthread refused at link time (design note)
Constraint State
One active terminal owner per session sequential reconnect/share preserves state
node/bun REPL declarations don’t persist workerd CSP; scripts unaffected; Python/Ruby REPLs fully stateful
75,000+-object clones index-pack CPU headroom in progress
git transport HTTPS only, no SSH
opencode TUI serve half boots and streams SSE; attach half renders frames on a thin memory margin, still hardening
Hosted demo evaluation only — no SLA, may be reset, not for secrets

Verified live: Vite + React, the Cloudflare Vite Plugin, single-file Workers, Workers with Static Assets, npm and git workflows, Python and Ruby scripts, and clang. Astro, SvelteKit, and Remix use the Vite path. Nuxt has Nitro caveats.

A capability joins this list only after a behavioral probe proves it live. Until then it stays on the research page.