kad.dev · docs

The docs. All of them.

The product is small on purpose, so the manual fits on one page. Paste a Git URL, it builds, it's live — you would have figured that out without us. This page covers the part people actually get wrong.

The part you already guessed

GitHub, GitLab, Bitbucket, Codeberg or any Git URL. The framework is detected, the build streams live, and a failed build comes back with a diagnosis instead of a shrug. There is no step two. Included here for completeness.

Every commit keeps its URL. Exactly one is canonical.

Deploy a commit and it gets a URL of its own — your-app-a1b2c3.kad.dev — which keeps working for as long as the deploy exists. Deploy ten commits, keep ten URLs.

One commit at a time is canonical: it also answers on the bare host, your-app.kad.dev. Promote makes a commit canonical; demote takes that back. There is no separate rollback feature, because promoting an older commit is the rollback.

Static assets are cached at the CDN edge for a few hours. Promoting or changing a commit's visibility clears that cache automatically — and if your framework fingerprints asset filenames (Vite, Next.js and friends do by default), you were never going to notice anyway.

a commit's own URL, the canonical PROD host, and where Promote lives

New deploys are private. Yes, even the link you just sent.

A private URL answers 302 → /unauthorized to everyone who is not you. You are signed in, so to you it looks fine. Your client is not, so to them it looks broken. This is our most reported non-bug.

Every fresh deploy starts private. Before you share a link, expose that commit — select it in the graph, then Actions → Make public — or turn on the project's default-public setting and never think about it again.

select a private commit → Actions → Make public

Postgres and a bucket

One click each, from the project page. Postgres injects DATABASE_URL; storage injects S3_ENDPOINT, S3_BUCKET and credentials. Read them from the environment at runtime — nothing to copy anywhere. Both run in the EU, next to your app.

Settings → Storage — Provision Postgres, then Object Storage — env var names go live

Custom domains

Settings → Domains. Add www.your-client.com, create the CNAME the UI shows you, and TLS issues itself. The .kad.dev host keeps working alongside. That is the entire feature.

Settings → Domains — a custom domain verified, TLS issued

Or let an agent read this instead

kad.dev speaks MCP. Point Claude — or any MCP client — at kad.dev/mcp and it can create projects, deploy, expose, promote and read build logs, on your account, within your limits. It gets the same rules you just read, as tool descriptions.

Connect an assistant

  1. In your MCP client, add a remote server (Claude: Settings → Connectors → Add custom connector) with the URL https://kad.dev/mcp.
  2. Sign in with your kad.dev account when the client asks. The consent screen lists the two scopes: mcp:read (status, logs, files) and mcp:deploy (create, deploy, promote, settings).
  3. Ask for something concrete: "deploy this folder to kad.dev", "what is the status of my app", "show me the last build log". Read tools run without a prompt; tools that change production ask you first.

To disconnect, remove the connector in your client, or revoke its grant from the key icon in the dashboard header, under Chat connectors. Nothing in a conversation is stored on kad.dev: a tool call carries only its arguments, and the answer carries only the project data it names.

BUILT SLOWLY · SOLO · EU-HOSTED | BUILD 73f29cc