omg/docs

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:

Usersyour team
Edgeroutes traffic
Orchestratorruns on your box
App sandboxisolated per app
Object storagesnapshots + files
Databaselive app state
Authsign-in + tokens
AIcoding agent

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:

LayerComponentWhat it does
EdgeCloudflare Worker + TunnelRoutes each app to its own preview URL; box needs no open inbound ports
Orchestratorvibes-sandbox (Go)Starts, snapshots, and proxies sandboxes; zero-downtime restarts
App sandboxFirecracker microVMHardware-isolated per app, boots in seconds, cheap to keep warm
Object storageTigris (or any S3)Snapshots, build artifacts, litestream WAL
Databasesqld (libsql)Authoritative state for sandboxes, deploys, snapshots
Authbetter-authEmail magic-link + passkey, mints the service tokens
AIMeridian proxyPoints 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.sh stands 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.

1Provision the box

One script installs the sandbox runtime, builds the orchestrator, and prepares the base image.

2Boot the orchestrator

It comes up as a system service with zero-downtime restarts.

3Open a tunnel

A secure tunnel exposes the box at your internal hostname — no inbound firewall ports.

4Mint a service token

A service token lets your dashboard talk to the orchestrator securely.

5Point the dashboard at it

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.sh

The 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/health

2 · 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 cloudflared

3 · 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 31536000

4 · 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.

Self-host omg for your team?

Talk through enterprise self-hosting — provisioning, scaling across boxes, and keeping code, data, and AI usage inside your network.

Book a call

Hosted vs self-hosted

Hosted — omg.devSelf-hosted — your box
OpsZero — nothing to provisionOne box, one script (provision.sh)
TenancyShared multi-tenant fleetSingle-tenant — only your internal users
DataRuns on omg's infrastructureCode + data never leave your network
AIMetered through omgBring your own Claude subscription
Snapshotsomg's storageYour own S3-compatible storage

Where to start

For LLM agents: llms.txt indexes every page; llms-full.txt is the full docs as plain text.