# Quickstart



## 1. Install [#1-install]

```bash
curl -fsSL https://assets.cluster.app/serve/cstatic-assets/releases/ccp/install.sh | sh
```

See [Installation](/docs/ccp/installation) for other install methods and shell completions.

## 2. Log In [#2-log-in]

```bash
ccp auth login
```

On a desktop, this opens your browser to approve the login. Over SSH or on a
headless host it automatically prints a device code to approve instead — see
[Authentication](/docs/ccp/authentication) for details and the `--browser` /
`--device` overrides.

## 3. Create a project directory [#3-create-a-project-directory]

```bash
ccp init my-app
cd my-app
```

This scaffolds a TypeScript project directory with a handler template. When prompted, select an organization and create an App to link it (not a platform [Project](/docs/ccp/projects) — that's the organization-level container your App lands in).

## 4. Start Dev Server [#4-start-dev-server]

```bash
ccp dev
# ◼ Dev Server started!
# › http://0.0.0.0:8000
```

Open [http://localhost:8000](http://localhost:8000) — you'll see "Hello from Clusterbase!". Edit `index.ts` and the server hot-reloads automatically.

## 5. Deploy [#5-deploy]

```bash
ccp deploy --prod
```

Your function is live at `https://my-app.clusterbase.dev`.

## What Just Happened? [#what-just-happened]

1. `ccp deploy` bundled your TypeScript
2. Uploaded the bundle to Clusterbase's storage
3. Activated a deployment on the serverless runtime
4. The runtime created a V8 isolate for your function
5. `my-app.clusterbase.dev` was routed to your isolate

## Next Steps [#next-steps]

* [Edit your handler](/docs/ccp/functions) — learn about the Request/Response model
* [Add a custom domain](/docs/ccp/domains) — serve from your own domain
* [Serve static files](/docs/ccp/static-sites) — deploy an SPA with `--public-dir`
* [Explore the runtime](/docs/ccp/runtime) — see all available Web APIs
