use case · Teams running TypeScript OpenClaw in production

Migrate off TypeScript OpenClaw

openclaw-rs keeps the same openclaw.json config, Markdown skills, and plugin contract — so migrating from TypeScript OpenClaw is a runtime swap, not a rewrite.

  • TypeScript plugin bridge (nng IPC)
  • Single static binary
  • JSON5 config compatibility
The problem
  • The TypeScript OpenClaw runtime ships hundreds of MB of node_modules into every deployment.
  • GC pauses show up as tail-latency spikes under sustained agent load.
  • Soft type guarantees turn hostile input into runtime crashes.
How openclaw-rs solves it
Same config, same skills
openclaw-rs reads the same ~/.openclaw/openclaw.json (JSON5) and the same Markdown skill format. Point the binary at your existing config directory.
Plugins keep working
openclaw-plugins runs each TypeScript plugin in its own process and dispatches the same 8 lifecycle hooks (BeforeMessage, AfterMessage, BeforeToolCall, AfterToolCall, SessionStart, SessionEnd, AgentResponse, Error) over an nng IPC bridge.
One binary out the door
cargo install openclaw-cli produces a single static binary — gateway, runtime, sandbox, dashboard, CLI — with no Node runtime to ship.

If you already run TypeScript OpenClaw, the framework isn’t the problem — the Node.js runtime is. openclaw-rs is a Rust implementation of the same architecture: the same configuration, the same Markdown skills, and the same plugin contract, rebuilt around an append-only sled event store and platform-specific sandboxing.

Because the plugin contract is preserved, migration is a runtime swap rather than a rewrite. openclaw-plugins runs each existing TypeScript plugin in its own process and communicates over nng using JSON-RPC, dispatching the same eight lifecycle hooks your plugins already implement. Your skill Markdown and your openclaw.json carry over untouched.

The payoff is operational: one static binary instead of a Node process plus node_modules, memory safety without a GC, and defence-in-depth security — input validation at every boundary, an OS-level sandbox, and an AES-256-GCM credential store — without touching your plugin code.

Read the deeper argument on the why-rust page, see the migration write-up, or compare the two runtimes head-to-head on openclaw-rs vs TypeScript OpenClaw.

How it works, step by step

  1. 1
    Install the Rust CLI

    Run cargo install openclaw-cli to get the openclaw binary.

  2. 2
    Point it at your config

    openclaw-rs reads the same ~/.openclaw/openclaw.json and Markdown skills your TypeScript deployment already uses.

  3. 3
    Bridge your plugins

    Register existing TypeScript plugins; openclaw-plugins runs them over nng and dispatches the same 8 lifecycle hooks.

  4. 4
    Run the gateway

    Start openclaw gateway run and cut traffic over to the single binary.

FAQ

Do I have to rewrite my plugins in Rust?
No. Existing TypeScript OpenClaw plugins run unchanged over the nng IPC bridge in openclaw-plugins, which exposes the same 8 lifecycle hooks.
Is the config format really identical?
Yes — openclaw-rs reads the same ~/.openclaw/openclaw.json (JSON5) and the same Markdown skill format as TypeScript OpenClaw.
next

Ship it on one binary.

openclaw-rs is MIT-licensed and one cargo install away. Install it, or read the architecture first.