I’m setting up ZeroClaw from scratch on a VPS and pairing it with the MiniMax M2.5 model to see how it works. ZeroClaw is a Rust alternative to OpenClaw that has received a lot of attention for its speed, multi-channel integrations, and flexible memory. I’ll walk through the full setup, including Discord integration, encrypted secrets, memory with SQLite and vector search, and service management.
ZeroClaw supports CLI, Telegram, Discord, Slack, iMessage, WhatsApp, and others. It supports many providers and models, and switching between models is hot swappable. It has an allow list, sandbox, and encrypted secrets, plus a small binary that does not use many resources.
If you need a direct OpenClaw comparison, check a short overview here: quick compare.
# Why ZeroClaw
ZeroClaw is written in Rust and actively developed with many contributors. The repository has strong momentum and the project is lightweight at runtime. If you want to customize it, you should be comfortable with Rust.
Highlights include:
- Multi-channel integrations, including CLI and Discord.
- Memory backed by SQLite with vector search.
- Hot swappable models and a provider-agnostic approach.
If you want a quick summary of the OpenClaw alternative angle, see this note: more here.
# VPS prep
I’m running everything on a clean VPS over SSH. You should install Rust under your regular user, not root. The first time I tried, I installed Rust under root by accident, so avoid sudo for rustup.
Update packages.
sudo apt update
sudo apt install -y build-essential pkg-config curl git
Install Rust and Cargo under your user.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Follow the prompt, then load Cargo into your shell:
source $HOME/.cargo/env
# For fish, follow rustup’s printed fish command.
Verify Cargo.
cargo --version
# Clone and build
Clone the repository and build the project. The first build pulls a lot of dependencies and may take several minutes.
git clone <zeroclaw-repo-url>
cd zeroclaw
cargo build --release
Install the binary from the local path.
cargo install --path . --force
Confirm ZeroClaw is available.
zeroclaw --version
zeroclaw --help
# Interactive onboard
ZeroClaw provides an interactive onboarding that creates the configuration and sets up providers, channels, and security.
Start onboard.
zeroclaw onboard --interactive
Choose the default config location when prompted. Pick your provider and paste the API key. I chose MiniMax and used the M2.5 model.
Enable encrypted secret storage to store keys securely. Choose how ZeroClaw should interact with the physical world and pick software only on a Linux VPS. Enable the default SQLite memory with vector search and turn on auto conversations to memory.
Set the agent name, time zone, and communication style. I named it Zeroclaw, picked Berlin for time zone, and used a friendly style.
# Discord channel
During onboarding I selected Discord as a channel. ZeroClaw prints the exact steps it needs, and I followed them.
Create a new Discord application in the Discord Developer Portal. Add a Bot to the app and enable the Message Content Intent under Bot settings. Reset the bot token and copy it.
Invite the bot to your server with the required permissions. I used Administrator to simplify initial testing.
Start the Discord channel.
zeroclaw channel start discord
If you plan to lock it to a single user or a small list, set allowed users in the config. If you want to allow anyone in your private server, use a wildcard.
Example config snippet:
discord:
allowed_users:
- "*"
# Ports and conflicts
If the default port 3000 is already in use, change it in the config. I changed mine to 2011 to avoid a clash with another container.
Example config snippet:
server:
port: 2011
Restart the service or relaunch the process after changing the port. Confirm the new port is free.
# Local chat and agent
You can chat directly with the agent in the terminal.
zeroclaw agent
This opens an interactive session. Memory initializes and you can talk to the agent right away.
# Run as a service
Keeping a foreground session open is not ideal. Install and start the service to run ZeroClaw in the background.
zeroclaw service install
zeroclaw service start
If prompted to tighten file permissions for secrets, do it.
chmod 600 <path-to-your-secrets-file>
Check status to confirm the version, security, and channels are active.
zeroclaw status
# Optional exposure
You can expose ZeroClaw to the internet using Cloudflare Tunnels, Tailscale, ngrok, or a custom method. I kept my instance local only for this setup. Pick one of the tunnel options if you need external access.
# Troubleshooting
Do not install Rust under root. Run rustup as your normal user and source Cargo into your shell.
If the build takes a long time, that is normal on the first run. It compiled hundreds of packages for me and took about 9 minutes.
If 3000 is already in use, switch to another port like 2011 in the config. Restart the service after changing the port.
If Discord does not respond, check allowed_users in the config and verify the Message Content Intent is enabled. Make sure the bot has the right permissions in your server.
For a broader view across similar tools including PicoClaw, this runs through the basics: full compare.
# Features recap
ZeroClaw has a lot of flexibility across providers and channels. Memory defaults to SQLite with vector search, and it supports encrypted secrets. The binary is small and resource usage is light.
- Integrations: CLI, Telegram, Discord, Slack, iMessage, WhatsApp.
- Providers: many, with hot swappable models.
- Security: allow list, sandbox, encrypted secrets.
# Quick commands
System prep:
sudo apt update
sudo apt install -y build-essential pkg-config curl git
Rust install:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
Build and install:
git clone <zeroclaw-repo-url>
cd zeroclaw
cargo build --release
cargo install --path . --force
Interactive setup and run:
zeroclaw onboard --interactive
zeroclaw channel start discord
zeroclaw agent
Service mode:
zeroclaw service install
zeroclaw service start
zeroclaw status
# Final thoughts
ZeroClaw installed cleanly once Rust was under the correct user and the port conflict was resolved. The interactive onboarding made it easy to wire up MiniMax M2.5 and bring Discord online. With encrypted secrets and SQLite memory ready out of the box, it is straightforward to run it locally or as a background service.
