Dev Mode
Test the full YourOpenClaw dashboard locally without Fly.io or Stripe
Dev mode lets you run and test the entire YourOpenClaw 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.
Add this line to your .env.local file:
NEXT_PUBLIC_DEV_MODE=true
Then restart the dev server:
npm run dev
Warning: Never enable dev mode in production. It bypasses billing enforcement and machine provisioning.
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://your-project.supabase.co
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
| 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 |
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.