> ## Documentation Index
> Fetch the complete documentation index at: https://docs.webstorio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploying

> Authenticate and sync your local project to Webstorio with webstorio push.

Deploying is log in once, check what will change, then push to sync.

<Tip>
  **Zero deployment configuration** — no Dockerfile, hosting provider config, or
  CI build settings for the site itself. `webstorio.config.ts` plus
  `webstorio push` is enough; Webstorio compiles and hosts. See [How the CLI
  works](/developer/how-cli-works#zero-deployment-configuration).
</Tip>

## 1. Log in

```bash theme={"dark"}
npx webstorio login
```

This opens your browser to authorize the CLI. After you approve, a token is
stored locally (OS keychain when available, otherwise a `0600` file in
`~/.webstorio/`).

## 2. Check status

See what differs from the remote project **before** you push:

```bash theme={"dark"}
npx webstorio status
```

`status` is read-only. It shows:

* **Environment** and **auth** (logged in or not)
* Local **project** name, subdomain, page/component counts
* A **diff vs remote** when you’re logged in: pages, components, and assets as
  `new` (`+`), `modified` (`~`), or `unchanged` (`·`)
* **Schema** changes when `schemasDir` is set (`new` / `modified` /
  `unchanged` / `remote_only`)

Run it again after a push to confirm you’re up to date.

## 3. Push

```bash theme={"dark"}
npx webstorio push            # sync as drafts
npx webstorio push --publish  # sync and make the site live
```

On push, the CLI:

1. Resolves your project by its `subdomain` (creating it if needed).
2. Applies configuration & features from `webstorio.config.ts`.
3. Merges `branding` (when present) into the website config, resolving favicon /
   default OG image paths from uploaded assets.
4. Composes each page/component into a single self-contained module.
5. Uploads the `code` (and syncs `pages[].seo` when authored); the **server
   validates and compiles** authoritatively into the stored HTML, writing a new
   version per page.
6. With `--publish`, publishes the synced pages and the site.

After the first successful push, the project is marked **CLI-managed** in the
dashboard. Editors can still change pages, branding, and features in the UI, but `webstorio push` will overwrite these changes.

Each page is reported as `created`, `updated`, or `error`:

```text theme={"dark"}
✓ / — updated
✓ about — created
✓ _header — updated
✗ services — import from 'date-fns'
```

## What gets created

* A **project** + **website** bound to your `subdomain`.
* A **home page** (`/`), one page per `pages[]` entry, and `_header`/`_footer`
  component pages for your `components[]`.
* A new **page version** for each pushed page on every run (push is idempotent —
  re-running updates existing pages in place).

<Warning>
  The `subdomain` is the project's identity. Changing it in your config will
  resolve to (or create) a different project on the next push.
</Warning>

Command options: [`webstorio login`](/cli/commands#webstorio-login),
[`webstorio status`](/cli/commands#webstorio-status), and
[`webstorio push`](/cli/commands#webstorio-push).
