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.

  1. Open Settings → Integrations → Add
  2. Enter your server’s MCP URL
  3. 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