Open-source deployment platform built on Cloudflare Workers.
One command deploys your full-stack app — frontend, SSR, database, cron, queue — to 300+ Cloudflare locations worldwide. Self-host on your own account, or use Creek Cloud.
npx creek deploy- One-command deploys — auto-detects your framework, builds, and deploys
- Built-in resources — D1 database, R2 storage, KV cache, AI, Queues — provisioned per project
- Cron + Queue triggers — declare in
creek.toml, Creek wires everything up - Realtime sync — D1 writes auto-broadcast to connected clients via WebSocket
- Per-tenant analytics — requests, errors, latency, cron execution log
- Agent-first — JSON output, breadcrumb hints, MCP server, no CAPTCHAs
- Open source — Apache 2.0, self-host on your own Cloudflare account
cd my-vite-app
npx creek deploy
# Detected: creek.toml (Vite + React + D1 + KV)
# Building...
# Deploying to edge...
# ⬡ Deployed! https://my-vite-app-myteam.bycreek.comCreek detects your framework, provisions resources, builds, and deploys.
Supported: React · Vue · Svelte · Solid · Astro · VitePress · Hono · TanStack Start · React Router · Next.js · static HTML WIP: Nuxt · SvelteKit
No signup, no config. Click a badge, watch it go live.
| Repo | Stars | What you'll see | |
|---|---|---|---|
| satnaing/astro-paper | ⭐ 4.4k | Minimal, SEO-friendly Astro blog — the most popular Astro theme | |
| withastro/docs | ⭐ 1.6k | Astro's official documentation site | |
| vuejs/docs | ⭐ 3.2k | Vue 3's official documentation — VitePress | |
vitejs/vite /docs |
⭐ 58k | Vite's official documentation — VitePress in a monorepo subpath | |
| sanity-io/sanity-template-astro-clean | ⭐ 173 | Astro + Sanity starter — headless CMS pipeline | |
| danielcgilibert/blog-template | ⭐ 995 | Openblog — elegant, SEO-optimised Astro blog |
First click of any repo runs a full build (~60–90s). Every click after the first hits the build cache and deploys in ⚡ ~7s — the repo only rebuilds when someone pushes a new commit.
Add it to your own repo's README:
[](https://creek.dev/deploy/gh/YOUR-ORG/YOUR-REPO)Supports GitHub tree/{branch}/{path} URLs for monorepos — point at a
subfolder the same way you'd link to it on GitHub.
WebSocket sync, optimistic updates, multi-user rooms. Zero boilerplate.
// Server
import { db } from "creek";
import { room } from "creek/hono";
app.use("/api/*", room());
app.post("/api/todos", async (c) => {
// db.mutate() auto-broadcasts to all connected clients
await db.mutate("INSERT INTO todos (room_id, text) VALUES (?, ?)",
c.var.room, await c.req.json().then(b => b.text));
return c.json({ ok: true });
});// Client
import { LiveRoom, useLiveQuery } from "creek/react";
function App() {
const { data: todos, mutate } = useLiveQuery("/api/todos");
// Auto-refetches when data changes. Optimistic updates with auto-rollback.
}# creek.toml
[project]
name = "my-app"
[resources]
database = true
[triggers]
cron = ["0 */6 * * *"] # Every 6 hours
queue = true # Auto-provisions a CF Queue// worker/index.ts
import { db, queue } from "creek";
export default {
async fetch(request, env) {
await queue.send({ type: "process", id: "123" });
return new Response("queued");
},
async scheduled(event, env, ctx) {
// Runs every 6 hours
await db.prepare("DELETE FROM stale WHERE created < ?").bind(Date.now() - 86400000).run();
},
async queue(batch, env, ctx) {
for (const message of batch.messages) {
// Process message
}
},
};Built-in dashboard shows requests, errors, CPU latency (p50/p99) for the last 24h / 7d / 30d. Cron execution log included.
[resources]
database = true # D1 (SQLite at the edge)
storage = true # R2 (object storage, zero egress)
cache = true # KV (key-value)
ai = true # Workers AICreek provisions per-tenant resources via the Cloudflare API. Each project gets its own isolated D1 database, R2 bucket, KV namespace.
# JSON output auto-enabled in non-TTY / CI
npx creek deploy --json{
"ok": true,
"url": "https://my-app-myteam.bycreek.com",
"deploymentId": "a1b2c3d4-...",
"cron": ["0 */6 * * *"],
"breadcrumbs": [
{ "command": "creek status", "description": "Check deployment status" }
]
}- No CAPTCHAs — Agent Challenge protocol issues verified agent tokens (60/hr vs 10/hr)
- Breadcrumb hints in error responses guide agents to next steps
- MCP server at
mcp.creek.dev(in development) — any AI agent can deploy with a single tool call
Apache 2.0 licensed. The entire platform is open source — CLI, control plane, dashboard, runtime, sandbox, dispatch worker.
Self-host on your own Cloudflare account, or use Creek Cloud (managed).
git clone https://github.com/solcreek/creek.git
cd creek && pnpm install
# Copy wrangler.*.example → wrangler.*, fill in your CF account
pnpm --filter @solcreek/control-plane deployEnterprise governance features (SSO, approval workflows, policy engine) will be available under /ee in a separate license.
creek deploy [dir] Deploy project or directory
creek deploy --template landing Start from a ready-made Vite + React template
creek deploy --dry-run Show the deploy plan without executing
creek deploy --json Output structured JSON (auto in CI)
creek deploy --skip-build Deploy without running build step
creek dev Local dev server with D1/KV/R2 simulation
creek status Project status, triggers, deployment info
creek deployments List deployment history
creek logs Read recent log entries (R2 archive)
creek logs --follow Live tail via WebSocket until Ctrl+C
creek logs --deployment <id> --outcome exception Filter by deploy / outcome / branch / level / search
creek rollback Rollback to a previous deployment
creek env set <key> <val> Set an environment variable
creek env ls List environment variables
creek domains add <host> Add a custom domain
creek login Authenticate with Creek
creek init Create creek.toml configuration
creek claim <sandboxId> Convert sandbox preview to permanent project
CLI / API / MCP
|
+------------+------------+
| |
Sandbox API Control Plane
(no auth, 60min) (auth, permanent)
| |
+------------+------------+
|
Workers for Platforms
(dispatch namespace)
|
+--------+--------+
| | |
Worker Static D1/R2/KV/Queue
Script Assets (per-tenant)
|
Cloudflare Edge
(300+ locations)
Sandbox path: creek deploy / creek deploy --template <name> → Sandbox API → live URL (60 min, no auth)
Production path: creek deploy → Control Plane → permanent URL + custom domain
creek/
apps/
dashboard/ Vite + React + TanStack Router (app.creek.dev)
www/ Next.js marketing site via adapter-creek (creek.dev)
packages/
cli/ CLI — npm: creek
sdk/ TypeScript SDK — npm: @solcreek/sdk
runtime/ creek runtime for deployed apps — npm: @solcreek/runtime
deploy-core/ Shared WfP deployment logic
control-plane/ Hono API + Better Auth + D1 (api.creek.dev)
sandbox-api/ Public sandbox deploy API
sandbox-dispatch/ Sandbox routing + banner injection
dispatch-worker/ Production tenant routing
realtime-worker/ WebSocket via Durable Objects
remote-builder/ CF Containers remote build orchestrator
build-container/ Build environment Docker image
ui/ Shared UI (shadcn v4 + Base UI)
create-creek-app/ Template scaffolder — npm: create-creek-app
mcp-server/ MCP server (mcp.creek.dev)
- Runtime: Cloudflare Workers
- Framework: Hono (API), Vite + React (dashboard), Next.js (www)
- Database: Cloudflare D1 (SQLite) + Drizzle ORM
- Storage: Cloudflare R2
- Queue: Cloudflare Queues
- Auth: Better Auth (GitHub, Google, email/password, API keys)
- Multi-tenancy: Workers for Platforms (dispatch namespaces)
- Monorepo: pnpm workspaces + Turborepo
- Testing: Vitest (790+ tests)
Creek is designed to run entirely on a single Cloudflare account.
Prerequisites
- Cloudflare account with Workers for Platforms enabled
- Node.js >= 18, pnpm >= 9
git clone https://github.com/solcreek/creek.git
cd creek
pnpm install
# Configure: copy each wrangler.*.example to wrangler.* and fill in
# your Cloudflare account ID, dispatch namespace, and resource bindings
# Deploy workers
pnpm --filter @solcreek/control-plane deploy
pnpm --filter @solcreek/sandbox-api deploy
pnpm --filter @solcreek/sandbox-dispatch deploy
pnpm --filter @solcreek/dispatch-worker deploySee Self-Hosting Guide for detailed instructions.
pnpm install
pnpm test # Run all tests (790+)
pnpm typecheck # TypeScript checks across all packages
pnpm dev # Start all dev serversCreek ships its own Next.js adapter — @solcreek/adapter-creek — purpose-built for Cloudflare Workers for Platforms.
npm install @solcreek/adapter-creek
creek deployThe CLI auto-detects Next.js >= 16.2.3 and invokes the adapter. No config needed.
What it does differently from generic adapters:
- Streaming SSR via
TransformStream— compatible with Workers' request lifecycle (nonode:httpserver dependency) - Embedded manifests — all Next.js route/build/prerender manifests are inlined into the worker bundle via a custom
fsshim, so no filesystem reads at runtime - Node.js API shims —
http,https,net,inspector,fs,vm,processEventEmitter stubs — purpose-built for the APIs Next.js actually touches, not generic polyfills - Turbopack runtime patching — replaces dynamic
R.c()chunk loading with a staticrequireChunk()switch for Workers' no-filesystem constraint - Zero config — the adapter hooks into Next.js's
onBuildCompletelifecycle and produces a.creek/adapter-output/bundle the CLI uploads directly
Dogfooding: creek.dev is a Next.js app — its source lives in apps/www in this repo — and it's deployed on Creek's own infrastructure via creek deploy --yes. Same platform, same adapter, same pipeline that every other Creek user gets. If the adapter breaks, our own marketing site breaks first.
- Awesome Creek — Curated list of templates, integrations, guides, and community projects. Submissions welcome.
- Templates Gallery — Live previews of official starter templates.
We welcome contributions. Please see CONTRIBUTING.md for guidelines.
- Issues: github.com/solcreek/creek/issues
- Discussions: github.com/solcreek/creek/discussions
Apache 2.0 — see LICENSE.
creek.dev · Docs · Templates · Discord
Built by SolCreek.