---
title: The hollware CLI
description: Every command of the hollware CLI, which works on the project in the current directory through its wrangler.
section: reference
order: 1
---

# The hollware CLI

The CLI comes with every project as a dev dependency. Run it with `npx hollware` or `pnpm exec hollware`, from inside the project: it reads the project's `wrangler.jsonc` and runs its own wrangler. Every command answers `--help`.

Commands that touch the database take `--local` (the default) or `--remote`, and `--database` for another D1 database than the binding `DB`. Commands about a site take `--site` when the database has several.

## init

```sh
hollware init --site my-site [--owner-name "Ada"]
```

Creates the site, its owner and a first personal token, and prints a link to set up the owner's passkey. On a database that has an owner already, it adds the site to that owner.

## migrate

```sh
hollware migrate [--check]
```

Applies the migrations the database lacks. With `--remote` it first exports a backup to `.wrangler/hollware-backups`, unless the database is new. `--check` only lists what is pending.

## deploy

```sh
hollware deploy [--url https://cms.example.com]
```

Deploys with wrangler, which creates the missing resources the first time, sets the public URL, and migrates the remote database.

## doctor

```sh
hollware doctor [--remote]
```

Checks the flags, the public URL, the bindings, the built admin, the migrations and the owner of the local database, or the remote one with `--remote`, and says what to fix. A healthy project ends with "Everything Hollware needs is in place.

## token

```sh
hollware token create --label ci [--scopes content:read,content:write] [--expires-in-days 30]
hollware token create --label my-site --read
hollware token list
hollware token revoke tok_...
```

## invite

```sh
hollware invite --role editor
hollware invite --owner
```

## import

```sh
hollware import ./content --url https://cms.example.com --token-file ./token.txt [--publish] [--dry-run]
```

Imports a directory laid out as `<collection>/<locale>/<slug>.md`, over MCP. It validates every file first and writes nothing if one would be refused; running it again changes nothing.
