CLI

Deploy from your terminal.

The Canner CLI tars your project, ships it to Quebec, and streams the build log back to your shell. Works anywhere Node 20 runs — macOS, Linux, Windows, and Cursor’s integrated terminal. No git required.

$npm install -g @canner-ca/cli

Quick start

Three commands. canner login stores an API token from canner.ca/dashboard/account. canner init creates a project and writes canner.json in the current directory. canner deploy --follow ships it and streams the build log.

canner login
cd my-site
canner init
canner deploy --follow

Commands

canner loginPrompt for an API token and store it at ~/.canner/credentials (mode 0600).canner logoutDelete ~/.canner/credentials from this machine. The token stays valid until revoked.canner whoamiShow the email and plan this CLI is signed in as.canner projectsList your projects.canner initCreate a new Canner project and write canner.json in the current directory.canner statusShow one project's state — URL, status, source, last request.canner openOpen the tenant URL (or, with --dashboard, the dashboard project page) in your browser.canner deployTar the directory and upload it. --follow streams the build log and exits with the build's success code, so it works as the last step of a CI pipeline.canner redeployTrigger a rebuild from the GitHub repo's HEAD without uploading. GitHub-connected projects only.canner deploymentsList recent deployments, or with an id, show one deployment's build log (add --follow to tail if still in progress).canner cancelAbort the in-flight build (or a specific one by id).canner logsStream the running tenant's runtime logs. --lines N for history, --follow to keep streaming.canner tokenList, create, or revoke the cnr_ API tokens that authenticate the CLI and API.canner envList, set, or remove a project's environment variables (env set KEY=VALUE, --sensitive to hide).canner domainsList, add, verify, or remove a project's custom domains.

JSON output

Add --json to any command for machine-readable output — tables and progress are suppressed and a single JSON value is printed, so it pipes straight into jq or an AI agent. Every command wraps an endpoint in the documented REST API.

canner projects --json | jq -r '.[].slug'

Read the API reference →

What gets uploaded

The CLI tars the current directory, excludes the “build noise” defaults, and streams the archive to the same upload endpoint the dashboard’s drag-drop uses. The server-side build pipeline detects the framework and runs install / build / deploy just like a git push.

Always excluded: node_modules, .git, .next, .nuxt, .turbo, .vercel, .svelte-kit, .DS_Store, Thumbs.db. Add a .cannerignore file for additional excludes.

CI / GitHub Actions

--follow exits with the build's success code, so a failed build fails the workflow.

- uses: actions/setup-node@v4
  with: { node-version: 22 }
- run: npx @canner-ca/cli@latest deploy --follow
  env:
    CANNER_TOKEN: ${{ secrets.CANNER_TOKEN }}

Cursor / AI agents

Works in Cursor's integrated terminal with no extension or MCP server. Agents can invoke it as a shell tool:

canner deploy --follow

Plan size caps

Same per-tier compressed-archive cap as the dashboard upload: Starter 100 MB, Live 500 MB, Studio 1 GB. The typical thing that pushes a project over is a public/ folder full of media — drop it into .cannerignore and serve it from external storage if so.

What it stores and sends

The CLI writes two files and nothing else: ~/.canner/credentials (your API token, mode 0600, written by canner login) and canner.json in your project directory (your project slug, written by canner init). It changes no system settings, shell profiles, or PATH entries. Network requests go only to api.canner.ca. There is no telemetry, analytics, or crash reporting of any kind — the CLI makes no request you didn't ask for by running a command.

Removing it

canner logout deletes the stored credential from this machine; npm uninstall -g @canner-ca/cli removes the package. Logging out is local only — the token itself stays valid, because the same token may be running in CI or on another machine. To revoke it everywhere, run canner token revoke, or use the API tokens page in your dashboard.

canner logout
npm uninstall -g @canner-ca/cli

Use of the CLI and the Canner service is governed by our Terms of Service and Privacy Policy.

Full docs and source: see the README at tools/cli/ in the canner repo on GitHub.