Already on TypeScript OpenClaw? The migration is shorter than you think.
Same config, same skills, same plugin contract. Drop your existing plugins into openclaw-rs and they keep running. The runtime is what changes.
What stays the same
- Config —
~/.openclaw/openclaw.jsonJSON5 schema is identical. - Skills — Markdown + YAML frontmatter loader is identical.
- Plugin contract — 8 lifecycle hooks, same names, same payloads.
- Event format — append-only log on disk is wire-compatible.
- Workspace —
~/.openclaw/directory layout is the same.
What changes
- Runtime — Rust binary instead of Node.js process.
- Deploy size — ~15 MB instead of 100 MB+.
- Cold start — sub-second instead of seconds.
- Memory baseline — < 20 MB idle, predictable under load.
- Sandboxing — platform-native (bwrap / sandbox-exec / Job Objects) instead of process-level.
- Credential storage — AES-256-GCM file-backed instead of env vars or OS keyring.
What about my plugins?
openclaw-plugins runs each TypeScript plugin in its own Node
subprocess and dispatches the 8 lifecycle hooks over an nng
IPC channel using JSON-RPC. Your existing code doesn't change.
// existing plugin — keeps working
export default [object Object];
Plugin discovery scans for package.json markers under
~/.openclaw/plugins/, same as TS OpenClaw.
What about my channel adapters?
This is where the compatibility gap is honest:
- Telegram — full Rust adapter ships today.
- Discord, Slack, Signal, Matrix, WhatsApp — roadmap items.
If you depend on a channel that hasn't shipped in Rust yet, run a hybrid: keep the TS gateway for that channel, run the Rust gateway for everything else, point them at the same workspace.
What about my providers?
Today:
- Anthropic — Claude 3.5 Sonnet, Haiku, Opus, with SSE streaming and tool use.
- OpenAI — GPT-4o, GPT-4, GPT-3.5, with function calling and Azure base URL support.
- Google Gemini — roadmap.
- Ollama — roadmap.
If you depend on Gemini or Ollama, either wait or contribute.
The migration in five steps
- Install:
cargo install openclaw-cli. - Validate config:
openclaw config validate ~/.openclaw/openclaw.json. - Start the Rust gateway on a different port:
openclaw gateway run --port 18790. - Smoke-test — point a test session at the Rust gateway, verify your plugins fire, verify event history reads correctly.
- Cut over — switch production traffic. The TS gateway is still installed; you can roll back instantly.
The deep-dive
The migration article walks each step in detail, including the side-by-side hybrid pattern for teams that need to migrate channel-by-channel.
When *not* to migrate yet
- You depend on Google Gemini or Ollama → wait for the providers.
- You depend on Discord/Slack/Signal/Matrix/WhatsApp natively → stay on TS, run a hybrid, or write the adapter (the trait is stable).
- You're in active prototyping and the TS dev velocity is what matters → stay on TS.
When you should
- Memory pressure or GC tails are biting in production.
- Deployment size or cold start is hurting you.
- You want defence-in-depth at the runtime level.
- You want a single-binary deployment story.
The cost
Honest list: zero plugin rewrites, zero config schema migration, zero
skill format migration. A new binary on your hosts, a different supervisor
unit (or use openclaw daemon install), and the time to
smoke-test before cutover.
For most teams, that's a one-day project.