Prompt it. Deploy it. Done.
Self-hosted deployment for vibe-coded apps. Built for non-engineers.
View on GitHub Read the docs →
Your AI Tool
Build me a recipe app. Make it mobile friendly.
Thinking I'll create a Next.js app with recipe management, search, and a responsive layout.
ob.example.com
Set up the server
SSH into a Linux server (Ubuntu 22.04/24.04) and run two commands. The installer handles Docker, gVisor, Caddy, and systemd.
curl -fsSL https://openberth.io/install-server.sh | bash
berth-server install --domain yourdomain.com
Install the CLI
Auto-detects your OS and architecture. Then point it at your server.
curl -fsSL https://openberth.io/install.sh | bash
berth config set server https://yourdomain.com
berth config set key bt_your_api_key
# Deploy anything
berth deploy ./my-project
berth deploy App.jsx
berth deploy notes.md
Connect your AI
Any tool that supports MCP can deploy, update, and manage your apps. Here are a few examples.
Claude Desktop
curl -fsSL https://openberth.io/install-mcp.sh | bash
{
"mcpServers": {
"berth": {
"command": "/usr/local/bin/berth-mcp",
"env": {
"BERTH_SERVER": "https://yourdomain.com",
"BERTH_KEY": "bt_your_api_key"
}
}
}
}
Cursor
Claude.ai / Claude Mobile
No binary needed — connects directly to your server via OAuth.
- Open Settings → Integrations → Add
- Enter your server’s MCP URL
- Complete the OAuth login
https://yourdomain.com/mcp
Claude Code
Uses a custom skill — no MCP binary needed. See the docs for setup.
Everything included.
- Real URLs with HTTPS: Each app gets its own subdomain with automatic TLS certificates.
- gVisor sandboxed: Every container runs inside a user-space kernel. No container escapes.
- Persistent storage: Built-in /data directory and REST API that survive rebuilds.
- Live dev mode: Hot reload sandbox with instant file sync. One command to promote.
- AI-native via MCP: Claude, Cursor, and any MCP client can deploy directly.
- Multi-user: One server, many users. Each with their own deployments and keys.
Your API keys don’t belong in chat messages.
Store secrets once, encrypted on your server. Reference by name at deploy time. No plaintext keys in AI conversations. No .env files floating around.
Without secrets
You: Deploy with this key: sk_live_abc123
- Key visible in chat history
- Key stored in AI context
- Rotate? Update every deployment
With secrets
~$ berth secret set STRIPE_KEY sk_live_...
✓ Encrypted and stored
You: Deploy with the STRIPE_KEY secret
✓ Injected at runtime, never exposed
~$ berth secret set STRIPE_KEY sk_live_new
✓ All deployments restarted automatically