Quickstart
From zero to a live URL in under two minutes — install, sign in, deploy, share, iterate.
This guide walks the full first-time loop: install the CLI, sign in, deploy a static site, share it, and iterate. Every step shows the verification you should see, so you know whether to continue or troubleshoot.
If you'd rather skip the local CLI and use a coding agent (Claude Code, Codex, Cursor, Antigravity, Antigravity CLI, Windsurf, OpenCode, Copilot CLI, Hermes Agent) or a chat client (ChatGPT, Claude Desktop), jump to MCP — but doing this once locally builds the right mental model for everything else.
1. Install the CLI
curl -fsSL https://vibehost.com/install.sh | shiwr -useb https://vibehost.com/install.ps1 | iexvibehost --versionYou should see a version like 4.x.x. If "command not found", reopen your terminal — the installer wrote to ~/.vibehost/bin and may have updated your $PATH.
The installer drops a single static binary; no Node runtime needed. Config lives at ~/.config/vibehost/config.json (mode 600 — never shared, never committed).
2. Sign in
vibehost loginThe CLI opens vibehost.com/login/device and prompts you to approve. Google sign-in works out of the box. New email accounts will be prompted to verify their inbox before deploys are allowed.
vibehost login --email you@example.com --password "$VIBEHOST_PASSWORD"Use this for CI runners that can't open a browser. Never paste a password as a literal — read it from an env var or secret manager.
vibehost whoamiShows your user id, current workspace, current team (if any), and what abilities your session has. If you see (no workspace), run vibehost workspace create my-ws or accept an invite first.
Hit EMAIL_NOT_VERIFIED (exit code 2) on a fresh password signup?
Run vibehost auth resend-verification. OAuth (Google) signups
skip the gate.
3. Create your first app
Apps are the unit of deployment. Names are workspace-scoped, lowercase, 2–40 chars ([a-z][a-z0-9-]*).
vibehost app create my-first-site --display-name "My First Site" --description "Hello-world static site from the quickstart"The name is the immutable slug used in URLs; --display-name and --description are optional display metadata the dashboard shows (it falls back to the name when unset). Change them any time with vibehost app update.
Verify:
vibehost app inspect my-first-site --jsoninspect is the single most useful agent-facing command — it returns runtime, visibility, password status, channels, recent deployments, custom domains, grants, and active share links in one call. You'll use it a lot.
4. Deploy
We need something to deploy. The simplest possible site:
mkdir -p hello && echo '<h1>Hello, VibeHost</h1>' > hello/index.htmlNow deploy:
vibehost deploy ./hello --app my-first-siteYou'll see something like:
{
"ok": true,
"data": {
"id": "depl_abc123...",
"url": "https://my-first-site-your-workspace.vibehost.space",
"immutableUrl": "https://depl_abc123.vibehost.space",
"deployKind": "static",
"status": "healthy"
}
}Two URLs to understand:
url— the alias URL. Moves to whatever's current on this channel. Share this with humans.immutableUrl— the permanent URL for this exact artifact. Use this when you need to reference a specific version that won't change under you (bug reports, code review, archived demos).
Open the alias URL in a browser. You should see "Hello, VibeHost".
Link the directory so you don't need --app every time:
cd hello && vibehost link --app my-first-site
vibehost deploy # uses linked app from .vibehost/project.json5. Share it
By default new apps are private — only you can view. Three ways to share:
vibehost app visibility my-first-site publicAnyone with the URL can view. No sign-in required.
By default we stamp X-Robots-Tag: noindex, nofollow on every *.vibehost.space tenant response — even when visibility is public — so the app won't appear in Google or Bing. robots.txt allows crawling so the noindex header is the one search engines see. If you want a public app to be indexed, attach a custom domain — the noindex doesn't apply there. Per-app opt-in for the platform subdomain is on the roadmap.
vibehost app grants add-email teammate@example.com viewer --app my-first-siteThey sign in with Google / email and can view. Roles: viewer (read-only), deployer (push + promote + rollback), admin (above + grants + custom domains). Invite-before-signup works — the email doesn't need to belong to an existing user.
6. Iterate
Change the HTML and redeploy:
echo '<h1>Hello, world. v2.</h1>' > hello/index.html
vibehost deployThe alias URL refreshes immediately (within ~5s of healthy status). The previous deployment is still accessible at its own immutableUrl — VibeHost never deletes deployments on redeploy, only the channel alias moves.
Roll back if v2 is broken:
vibehost rollback --app my-first-siteAlias snaps back to v1's immutableUrl. No re-upload, instant.
What just happened
Common first-deploy failures
| Symptom | Likely cause | Fix |
|---|---|---|
EMAIL_NOT_VERIFIED | Password signup, email not confirmed | vibehost auth resend-verification, click link |
app already exists | Name collision in your workspace | Pick another name (workspace-scoped uniqueness) |
TARBALL_INVALID: no index.html | Build dir doesn't have index.html at root | Point deploy at the build output, not the source |
RATE_LIMITED | More than ~30 deploys/min/workspace | Wait 60s, or batch your changes into one deploy |
cert=NOT_FOUND on custom domain | DNS not propagated yet | vibehost domain verify again in 5–10 min |
Hit something else? Run vibehost doctor — it probes auth, API reachability, version skew, and config gotchas in one shot.
Next
- CLI reference — every command, every flag
- Channels — preview deploys, promote, rollback
- Custom domains — bring your own hostname
- Grants and visibility — control who sees what
- MCP — drive everything you just did from Claude / Cursor / ChatGPT
- Recipes — end-to-end scenarios (MVP demo, client delivery, CI/CD, ...)
- Personal access tokens — drive it from any HTTP client