Creek deploys web apps to Cloudflare Workers with a single command. Auto-detects framework, determines render mode (SPA/SSR/Worker), provisions infrastructure.
--json for structured output. Auto-enabled in non-TTY / CI.breadcrumbs in JSON responses — they suggest the next command.--yes to skip confirmation prompts (auto-enabled in non-TTY).ok field — true = success, false = error with error and message fields.TaskCommandAuthenticatecreek loginAuthenticate (CI)creek login --token <KEY>Check authcreek whoami --jsonInit projectcreek init --jsonDeploycreek deploy --jsonDeploy directorycreek deploy ./dist --jsonDeploy from GitHubcreek deploy https://github.com/user/repo --jsonDeploy monorepo subdircreek deploy https://github.com/user/repo --path packages/app --jsonDeploy democreek deploy --demo --jsonDeploy templatecreek deploy --template vite-reactSkip buildcreek deploy --skip-build --jsonCheck statuscreek status --jsonCheck sandboxcreek status <SANDBOX_ID> --jsonClaim sandboxcreek claim <SANDBOX_ID> --jsonList projectscreek projects --jsonList deploymentscreek deployments --jsonList deployments (other)creek deployments --project <SLUG> --jsonRollbackcreek rollback --jsonRollback to specificcreek rollback <DEPLOYMENT_ID> --jsonSet env varcreek env set <KEY> <VALUE> --jsonList env varscreek env ls --jsonShow env valuescreek env ls --show --jsonRemove env varcreek env rm <KEY> --jsonAdd domaincreek domains add <HOSTNAME> --jsonList domainscreek domains ls --jsonActivate domaincreek domains activate <HOSTNAME> --jsonRemove domaincreek domains rm <HOSTNAME> --jsonDev servercreek dev
Requires creek login. Deploys persist under the user's account.
bash
creek deploy --json
No auth required. Temporary preview with claimable URL.
bash
creek deploy --json # auto-sandbox when not logged in
creek claim <SANDBOX_ID> # convert to permanent project
bash
CREEK_TOKEN=ck_... creek deploy --yes --json
Every command returns structured JSON with breadcrumbs:
json
{
"ok": true,
"url": "https://my-app-team.bycreek.com",
"project": "my-app",
"breadcrumbs": [
{ "command": "creek status", "description": "Check deployment status" },
{ "command": "creek deployments --project my-app", "description": "View deployment history" }
]
}
On error:
json
{
"ok": false,
"error": "not_authenticated",
"message": "Not authenticated. Run `creek login` first.",
"breadcrumbs": [
{ "command": "creek login", "description": "Authenticate interactively" }
]
}
bash
creek login --json # 1. Authenticate
creek init --json # 2. Create creek.toml (optional)
creek deploy --json # 3. Deploy
bash
creek deploy --json # Deploy new version
creek deployments --json # View history
creek rollback --json # Rollback to previous
creek rollback <ID> --json # Rollback to specific deployment
bash
creek domains add app.example.com --json # Add domain
# User sets DNS: CNAME app.example.com → cname.creek.dev
creek domains activate app.example.com --json # Activate after DNS
creek domains ls --json # Verify status
toml
[project]
name = "my-app" # Required. Lowercase alphanumeric + hyphens.
framework = "nextjs" # Optional. Auto-detected from package.json.
[build]
command = "npm run build" # Build command (default: npm run build)
output = "dist" # Build output directory
worker = "worker/index.ts" # Optional: custom Worker entry point
[resources]
d1 = true # Cloudflare D1 database → env.DB
kv = true # Cloudflare KV namespace → env.KV
r2 = true # Cloudflare R2 storage → env.BUCKET
ai = true # Cloudflare Workers AI → env.AI
SPA: vite-react, vite-vue, vite-svelte, vite-solid, static HTML SSR: nextjs, react-router, sveltekit, nuxt, solidstart, tanstack-start
creek.toml — explicit Creek configwrangler.jsonc / wrangler.json / wrangler.toml — existing CF configpackage.json — framework auto-detectionindex.html — static siteErrorFix"Not authenticated"creek login or set CREEK_TOKEN"Invalid API key"creek login to re-authenticate"No creek.toml found"creek init or cd to project root"No project found"Deploy from a dir with package.json or index.html"No supported project found in repo"Use --path for monoreposSandbox expiredRedeploy — sandboxes last 60 minutesDomain stuck "pending"Set CNAME to cname.creek.dev, then creek domains activateBuild failsCheck [build] command in creek.toml