Welcome
What omg is, how it fits together, and how to run it yourself.
omg turns a prompt into a real, running app — built, deployed, and live at its own URL in seconds. Every app runs fully isolated in its own sandbox, with a database, sign-in, storage, and an AI coding agent already wired in.
You can use the hosted omg.dev, or run the whole platform on your own infrastructure so your internal teams ship apps without anything leaving your network. This site shows how it works, and how to stand it up yourself.
How it fits together
The platform is the same handful of layers whether it's hosted or self-run. Here's the path a request takes — flip to omg hosted for the components we run in production, or all-in-one to collapse everything onto a single box behind a cloud load balancer:
Each layer maps to a small, proven component. This is what hosted omg.dev runs,
and what provision.sh sets up on a self-hosted box:
| Layer | Component | What it does |
|---|---|---|
| Edge | Cloudflare Worker + Tunnel | Routes each app to its own preview URL; box needs no open inbound ports |
| Orchestrator | vibes-sandbox (Go) | Starts, snapshots, and proxies sandboxes; zero-downtime restarts |
| App sandbox | Firecracker microVM | Hardware-isolated per app, boots in seconds, cheap to keep warm |
| Object storage | Tigris (or any S3) | Snapshots, build artifacts, litestream WAL |
| Database | sqld (libsql) | Authoritative state for sandboxes, deploys, snapshots |
| Auth | better-auth | Email magic-link + passkey, mints the service tokens |
| AI | Meridian proxy | Points the coding agent at your own Claude subscription |
Why run it yourself
Building this in-house means solving microVM isolation, snapshot/restore, zero-downtime deploys, and an AI coding loop — months of platform work before your first app ships. omg gives you all of it as one service:
- Hard parts, already solved. Firecracker isolation, full-rootfs snapshots, atomic versioned deploys with rollback, and litestream-replicated per-app SQLite are in the box.
- Nothing leaves your network. Code, data, and AI usage stay on your hardware. Point the coding agent at your own Claude subscription.
- One box, one script. No platform team.
provision.shstands up the whole stack; add a box when you need more capacity.
Self-host omg, end to end
Hosted omg is just one of these boxes. Run the same setup script on your own server and your internal teams build on your hardware, inside your network.
One script installs the sandbox runtime, builds the orchestrator, and prepares the base image.
It comes up as a system service with zero-downtime restarts.
A secure tunnel exposes the box at your internal hostname — no inbound firewall ports.
A service token lets your dashboard talk to the orchestrator securely.
Set the sandbox URL and your internal users build on your box.
1 · Provision
Start with a fresh Ubuntu 22.04 server (virtualization enabled, a spare disk for sandbox storage). One script sets up storage, the sandbox runtime, the orchestrator, the base image, the system service, networking, and optional HTTPS:
git clone https://github.com/BennyKok/vibes /opt/vibes
cd /opt/vibes
# HTTPS via Caddy; omit DOMAIN for plain HTTP on :7070
DOMAIN=infra.your-co.internal bash apps/infra/deploy/provision.shThe script writes its config to /etc/vibes/env and starts the orchestrator as
a system service. Health-check it:
curl https://infra.your-co.internal/health2 · Open a tunnel
Routing goes through a Cloudflare Tunnel, so the box never exposes an inbound
port. provision.sh already wrote the tunnel config — finish the one-time auth:
cloudflared tunnel login
cloudflared tunnel create box-1 # paste the UUID into /etc/cloudflared/config.yml
systemctl enable --now cloudflared3 · Mint a service token
Your dashboard authenticates to the orchestrator with a short service token. Mint it on your auth host — never over HTTP:
# on the auth host
cd /opt/vibes && bun run apps/auth/scripts/mint.ts svc:convex 315360004 · Point the dashboard at your box
Set three values in the dashboard backend. This sends apps to your box instead of the hosted fleet — no code changes:
VIBES_SANDBOX_PROVIDER=firecracker
VIBES_SANDBOX_URL=https://infra.your-co.internal
VIBES_INFRA_SERVICE_TOKEN=<jwt minted above>To keep AI usage on your own Claude subscription, point the on-box LLM proxy at
it in /etc/vibes/env. Need more capacity? Run provision.sh on another box
with NODE_ID=box-2 — traffic routes to it automatically.
Talk through enterprise self-hosting — provisioning, scaling across boxes, and keeping code, data, and AI usage inside your network.
Hosted vs self-hosted
| Hosted — omg.dev | Self-hosted — your box | |
|---|---|---|
| Ops | Zero — nothing to provision | One box, one script (provision.sh) |
| Tenancy | Shared multi-tenant fleet | Single-tenant — only your internal users |
| Data | Runs on omg's infrastructure | Code + data never leave your network |
| AI | Metered through omg | Bring your own Claude subscription |
| Snapshots | omg's storage | Your own S3-compatible storage |
Where to start
- Architecture — the request path, edge to sandbox.
- Deploy flow — snapshot, build, go live.
- Auth — sign-in and service tokens.
- SDK overview — what your team builds on it.
For LLM agents: llms.txt indexes every page;
llms-full.txt is the full docs as plain
text.