Static output (the default)
A default Astro project (output: 'static') builds to dist/ and Canner serves it directly. Push the repo or drop the folder — done.
Server output needs the Node adapter
For SSR (output: 'server' or per-route prerendering), Astro requires a deployment adapter. On Canner that’s @astrojs/node in standalone mode:
// astro.config.mjs
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
export default defineConfig({
output: 'server',
adapter: node({ mode: 'standalone' }),
});Then npx astro add node handles the dependency, or add it manually and redeploy.
Vercel/Netlify adapters are rejected on purpose. If your config has @astrojs/vercel or @astrojs/netlify, the build fails with a clear message instead of deploying something broken — those adapters emit platform-specific output that can’t run as a normal server. Swap to the Node adapter and redeploy.
Good to know
- SSR Astro pairs well with tag-based caching — the
@canner-ca/astro-cachehelper is one line per page. - Environment variables are available at build and runtime; client-side ones follow Astro’s
PUBLIC_prefix rule. - i18n routing, content collections, and view transitions all work — no platform-specific behavior to account for.