Dev Mode
Test the full Open Claw dashboard locally without Fly.io or Stripe
What is Dev Mode?
Dev mode lets you run and test the entire Open Claw dashboard UI without needing a Fly.io account or Stripe account. It's designed for local development only.
When enabled, dev mode:
- Skips Fly.io — Deploy, start, stop, restart, and delete actions update the database but don't create real machines. A fake machine ID is assigned instead.
- Skips Stripe checkout — The landing page flow redirects straight to the dashboard instead of going through Stripe payment.
- Shows mock subscription — The subscription page displays a fake "Pro / Active" subscription so you can test the full dashboard without paying.
- Keeps everything else real — Auth, database operations, API key encryption, model selection, and Telegram bot token management all work normally against your Supabase instance.
How to Enable
Add this line to your .env.local file:
NEXT_PUBLIC_DEV_MODE=true
Then restart the dev server:
npm run dev
Never enable dev mode in production. It bypasses billing enforcement and machine provisioning.
Minimum .env.local for Dev Mode
With dev mode on, you only need a subset of environment variables. The Fly.io and Stripe values can be placeholders:
# Required — Supabase (real values needed for auth + DB)
NEXT_PUBLIC_SUPABASE_URL=https://openclaw.jiobase.com
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
# Required — Encryption (any 32-char hex string)
ENCRYPTION_KEY=59507c5fd561661beda5836c23654104
# Dev mode flag
NEXT_PUBLIC_DEV_MODE=true
# Placeholders — not used in dev mode
FLY_API_TOKEN=placeholder
FLY_APP_NAME=placeholder
BILLING_PROVIDER=stripe
STRIPE_SECRET_KEY=sk_test_placeholder
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_placeholder
STRIPE_WEBHOOK_SECRET=whsec_placeholder
NEXT_PUBLIC_SITE_URL=http://localhost:3000
What Works vs What Doesn't
| Feature | Dev Mode | Notes |
|---|---|---|
| Google OAuth sign-in | Works | Requires real Supabase project |
| Deploy instance | Works | Creates DB record with fake machine ID |
| Start / Stop / Restart | Works | Updates DB status, skips Fly.io calls |
| Delete instance | Works | Removes DB record, skips machine removal |
| API key management | Works | Encrypted storage works, skips machine update |
| Telegram bot token | Works | Token saved, skips machine update |
| AI model selection | Works | Preference saved in DB |
| Subscription page | Mock | Shows fake "Pro / Active" subscription |
| Stripe checkout | Skipped | Landing flow redirects to dashboard |
| Visit instance URL | No | No real machine, URL won't resolve |
| Refresh status from Fly.io | Mock | Returns current DB status, no Fly.io query |
Switching to Production
When you're ready to go live, remove or set the flag to false:
NEXT_PUBLIC_DEV_MODE=false
Then fill in real values for all environment variables (Fly.io token, Stripe keys, etc.) and redeploy. See the full .env.local.example for reference.