VibeHost
Guides

Quickstart

Install the CLI, sign in, deploy a static site to a live URL, share it, and redeploy.

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, Gemini Spark), go to MCP. Doing this once locally is still worth it, because every other path works the same way underneath.

1. Install the CLI

Download the installer first so you can inspect it before running. It is user-level only (no sudo) and verifies the CLI binary's SHA256 before installing:

curl -fsSL -o vibehost-install.sh https://vibehost.com/install.sh
less vibehost-install.sh
sh vibehost-install.sh && rm vibehost-install.sh
Invoke-WebRequest -UseBasicParsing https://vibehost.com/install.ps1 -OutFile vibehost-install.ps1
Get-Content .\vibehost-install.ps1
& .\vibehost-install.ps1
Remove-Item .\vibehost-install.ps1
vibehost --version

You should see a version like 4.x.x. If you get "command not found", the installer added the CLI to your PATH only for shells started after it ran. Run the PATH line it printed, or open a new terminal. ~/.vibehost/cli/vibehost always works regardless of PATH.

The installer drops a single static binary, so you don't need a Node runtime. Config lives at ~/.config/vibehost/config.json with mode 600. Don't share or commit it.

2. Sign in

vibehost login

The CLI opens vibehost.com/login/device and prompts you to approve. Google sign-in needs no setup. A new email account has to verify its inbox before it can deploy.

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 a secret manager.

vibehost whoami

Shows 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 unique within a workspace, lowercase, and 2 to 40 characters long ([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 --json

inspect is the agent-facing command you'll use most. It returns runtime, visibility, password status, channels, recent deployments, custom domains, grants, and active share links in one call.

4. Deploy

You need something to deploy. This makes a one-page site:

mkdir -p hello && echo '<h1>Hello, VibeHost</h1>' > hello/index.html

Now deploy:

vibehost deploy ./hello --app my-first-site

You'll see something like:

{
  "ok": true,
  "data": {
    "id": "depl_abc123...",
    "url": "https://my-first-site-your-workspace.vibehost.space",
    "immutableUrl": null,
    "deployKind": "static",
    "status": "healthy"
  }
}

The response has two URL fields.

  • url is the alias. It moves to whatever deployment is current on this channel, so share this one with people.
  • immutableUrl is null. It's meant to be a URL pinned to this exact deployment, but vibehost.com doesn't create one yet. To refer to this exact version, for example in a bug report, keep the deployment id.

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

5. Share it

New apps are private by default, so only you can view them. There are three ways to share one.

vibehost app visibility my-first-site public

Anyone with the URL can view it without signing in.

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 indexed, attach a custom domain. The noindex header 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-site

They sign in with Google or email and can view the app. Roles: viewer (read-only), deployer (push + promote + rollback), admin (all of that, plus grants and custom domains). You can invite someone before they sign up. 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 deploy

The alias URL points at the new deployment within about 5 seconds of it turning healthy. A redeploy never deletes the previous deployment. Only the channel alias moves.

Roll back if v2 is broken:

vibehost rollback --app my-first-site

The alias moves back to v1. Nothing is uploaded again.

What just happened

Common first-deploy failures

SymptomLikely causeFix
EMAIL_NOT_VERIFIEDPassword signup, email not confirmedvibehost auth resend-verification, click link
app already existsName collision in your workspacePick another name (workspace-scoped uniqueness)
TARBALL_INVALID: no index.htmlBuild dir doesn't have index.html at rootPoint deploy at the build output, not the source
RATE_LIMITEDMore than ~30 deploys/min/workspaceWait 60s, or batch your changes into one deploy
cert=NOT_FOUND on custom domainDNS not propagated yetRun vibehost domain verify again in 5 to 10 minutes

For anything else, run vibehost doctor. It checks auth, API reachability, version skew, and common config mistakes.

Next

On this page