You need an app that runs locally and a free Canner account — no card required. Canner detects your framework and builds it for you; the three paths below differ only in how your code reaches us.
Canner detects the framework automatically — you rarely configure anything.
Option 1 — Drag and drop
No git, no config. Go to New project in the dashboard and drop your project folder (or a .zip / .tar.gz). Canner detects the framework, installs, builds, and deploys. Uploads are capped by plan (see Plans & limits) — and remember to include your lockfile (package-lock.json, pnpm-lock.yaml, …) if it’s a Node project.
Option 2 — Connect GitHub
In New project, choose Deploy from GitHub and install the Canner Deploy app on the repository. Every push to your production branch builds and deploys automatically; every pull request gets its own preview URL at branch--project.app.canner.ca. Build failures are reported back to the PR as a commit status.
Option 3 — The CLI
Best for deploying from a terminal, a CI pipeline, or an AI coding tool’s integrated shell:
npm install -g @canner-ca/cli canner login # paste an API token from Dashboard → Account canner init # creates the project + writes canner.json canner deploy --follow # uploads, builds, streams the log
--follow streams the build log and exits with the build’s status code, so it slots into CI as the last step. Full command reference on the CLI page.
Static sites and standard frameworks (Next.js, Astro, Vite) need no changes — Canner handles it. If your app runs its own server:
const port = process.env.PORT || 3000; app.listen(port);
What happens next
Your build runs in an isolated sandbox with its own memory budget, then the app starts under its own Linux user and gets a TLS certificate automatically. On the free Starter plan an app sleeps after 3 hours without traffic and wakes on the next request; paid plans keep it always on. From here:
- Add environment variables if your app needs API keys or configuration.
- Provision a Postgres database — the connection string is injected as
DATABASE_URL. - Point your own domain at the project.
- Build failed? The log usually says exactly why — and the troubleshooting guide covers the common cases.