Framework compatibility matrix

Which framework, Node, and build-runner combinations the platform supports — and how each row is proven. This matrix is the source of truth: the build runner, CLI templates, and grid plug use its values. Any drift is a bug.

How to read this

Each row is a framework × Node × build-runner combination the platform claims to support. The Tested column says how:

LabelMeaning
AutomatedAn automated test exercises this row through a real grid plug lifecycle nightly, and it is green.
Production-provenA real production entity runs this combination today.
ClaimedClaimed-supported but no proof yet — risk of breakage. Tell us if you exercise this row.
Not supportedKnown-broken or not in the build matrix — do not ship. The escape-hatch column says what to override; if blank, no workaround.

What you can expect: every Automated and Production-proven row is a row the platform commits to keep working. If your project matches, grid plug should succeed without yaml ceremony, or with only the listed escape hatches.

The matrix

FrameworkNode minimumNode testedBuild runneryaml escape hatchesTested
Next.js 1518.1822.xnode (server)noneProduction-proven
Next.js 1622.022.xnode (server)noneProduction-proven
Astro 518.2022.xstatic-buildnoneProduction-proven
Astro 622.022.xstatic-buildnode_version: '22'Claimed
Remix 218.022.xnode (server)noneClaimed
Static HTMLn/an/astatic-buildnoneProduction-proven
Vue 3 / Vite20.1922.xstatic-buildnoneClaimed
Express custom18.022.xnode (server)port: if non-8080; build.env: if non-defaultProduction-proven
SvelteKit 218.1322.xnode (server)noneClaimed
Hono (Bun)n/a (Bun)n/anot supportedn/aNot supported — Bun runtime is not in the build matrix; use Node for now
Bun appsn/an/anot supportedn/aNot supported — Bun runtime support is a future cycle
Python (Flask)n/a (Python)n/anot supportedn/aNot supported — future cycle
Python (FastAPI)n/an/anot supportedn/aNot supported — future cycle
Gon/a (Go)n/anot supportedn/aNot supported — future cycle
Java / Kotlinn/an/anot supportedn/aNot supported — future cycle

What "supported" means

A row is claimed-supported if all three hold:

  1. grid plug succeeds end-to-end (build → push → deploy → serving) using just cloudgrid.yaml plus the listed escape hatches — no manual Kubernetes edits.
  2. The deploy-error translator maps the framework's common failure modes (e.g. EBADENGINE) to a plain-language message with suggested fixes.
  3. The row is exercised — by a production entity, an automated nightly test, or a recent manual rehearsal. Claimed rows decay to Not supported after 90 days without exercise.

A row is not supported if any of the above is false. If you attempt an unsupported row, you get a plain error plus a pointer to this matrix.

Escape-hatch reference

Set these in cloudgrid.yaml per service:

FieldTypePurposeDefault
services.<name>.node_version'18' | '20' | '22' | '24'Override the build runner's Node version (static type only; quote the value)'22' (current LTS)
services.<name>.portnumber (1024–65535)Container port if non-80808080
services.<name>.build.envstring-to-string mapBuild-time env vars (Astro public keys, Next.js inline configs){}

See the deploy contract for what the platform decides on every row, and for smart defaults the platform reads from your package.json.

Keeping it current

The matrix is reviewed every release cycle: rows that haven't been exercised are downgraded, and Not-supported rows close when runtime support arrives. Automated rows are re-verified nightly; a row that regresses is demoted.