Skip to content
VibeDeploy
Start building

Deploy AI‑generated apps in seconds.

Built for Claude Code, Cursor, and developer teams.

Your agent writes the app and makes one tool call. VibeDeploy builds it, puts it online with HTTPS, and when something breaks it hands back the crash reason and the logs, so the agent can fix it without you.

claude in ~/code/notes
> Deploy this with vibedeploy● deploy_app(path: ".", volume: true)  ==> stack: node (npm start), port: 8080  ==> building notes:notes-mx2k1q  ✗ new version did not start (CrashLoopBackOff, exit 1)    hint: the server must listen on 0.0.0.0:$PORT (=8080)● server.js listens on localhost:3000. Switching to  process.env.PORT on 0.0.0.0.● Edit server.js  +1 −1● deploy_app(path: ".", volume: true)  ==> building notes:notes-mx2l8w  ==> live at https://notes.tja.nrw● Live at https://notes.tja.nrw. Notes are stored on the 2 GB  volume at /data, so they survive the next deploy.

What happens after the code is written.

One command, or one tool call

vibe deploy uploads the folder, detects Node, Python, Go or a static site (or uses your Dockerfile), builds it in the cluster and waits until the app answers. Agents get the same through the MCP server: deploy_app returns the URL, or the error with a hint and the logs, so the agent fixes and retries on its own.

$ vibe deploy # connect your agent once$ claude mcp add vibedeploy --scope user -- vibe-mcp

Data that survives the next deploy

Containers start fresh on every deploy. Apps that keep a SQLite database or uploads ask for a volume and write to /data. It stays mounted across deploys and restarts, with a hard 2 GB cap so one app cannot fill the disk.

// vibe.json{ "name": "notes", "volume": true } ==> volume: 2 GB at /data ($DATA_DIR)

Your own domain, HTTPS included

Every app is live at name.tja.nrw with a certificate from the first deploy. Add your own domain in the dashboard, point a CNAME at the app and press Verify & Activate: the certificate is issued and renewed automatically, and HTTP always redirects to HTTPS.

CNAME  app.example.com  ->  notes.tja.nrw app.example.com     Activecertificate valid until 28 Jan 2027

Isolated, capped, and easy to watch

Each app runs in its own namespace with network isolation and fixed limits: 3 apps per team, 512 MB and half a CPU each. You see what is happening without kubectl: live logs that follow restarts and deploys, CPU and memory against the limit, and the real reason a container crashed.

$ vibe status notes✗ notes  CrashLoopBackOff (OOMKilled)  → used more than its 512Mi memory limit  RAM ███████████████████░  97%  497 MB / 512 MB

Set up once, in three steps.

  1. Install the CLI

    Node 20 or newer. You get vibe and the MCP server vibe-mcp.

    npm install -g https://dashboard.tja.nrw/vibedeploy-cli.tgz
  2. Log in

    Create a deploy token in the dashboard, for yourself or your team.

    vibe login --token vibe_live_…
  3. Ask your agent

    In any project folder, in Claude Code, Cursor or the terminal.

    Deploy this with vibedeploy.

Ship the next thing your agent builds.