knext

Compatibility matrix

Honest, evidence-gated status of what the knext adapter supports.

Honest, evidence-gated status of what the knext adapter supports. Every row is grounded in real, on-disk evidence and a mechanical guard test fails CI if a ✅ ("supported") row cannot be backed up. When in doubt it is marked ⚠️, not ✅.

The official suite runs per runtime × builder cell — not one number. knext builds and runs a Next.js app more than one way (standalone on Node or Bun, or the vinext build on Bun), and each combination is tracked separately rather than folded into a single "the suite is green" headline. The most-verified cell today is the standalone build on the Node runtime: the main-branch nightly most recently observed 778 tests passed, 0 failed, against Next.js v16.2.0. That is current evidence, not a completed credential — see Verified compatibility for what credentialing requires and where every cell currently stands.

Legend

MarkerMeaning
Supported — backed by a red-on-fail check (the per-PR compat-smoke gate) or test-covered source on disk.
⚠️Partial — implemented but not guarded by a hard correctness check, or with a known caveat. Do not rely on it as "verified."
Unsupported / unverified — no working implementation or no evidence; treat as a gap.
Upstream-gated — architecturally out of reach today (global edge, not yet adapter-standardizable upstream).

The compat-smoke job runs per-PR on a Node + Bun matrix. It is a knext smoke gate, not the official suite.

Matrix

FeatureStatusNotes
App Router (RSC server render, GET / → 200 HTML)Hard-asserts 200 + text/html + non-trivial body against the standalone server.js.
RSC flight payload (RSC: 1text/x-component)Hard-asserts the React flight content-type.
Route handlers (app/api/*/route.ts)Hard-asserts GET /api/health → 200 + valid JSON.
Dynamic routes (force-dynamic)Hard-asserts 200 on a force-dynamic route.
Static / prerendered routes (force-static)Hard-asserts 200 on a force-static route.
Middleware (Node runtime, header injection)Hard-asserts a middleware-injected header. Node-runtime middleware only.
Graceful shutdown (SIGTERM drain)End-to-end proven on the shipped compiled-executable image: a real SIGTERM against a running container, asserting the in-flight request completes and the drain markers land in order. The same image also proves that after() work runs before the process exits 0, including work an after() callback schedules after the signal has landed.
ISR / Data Cache (Redis-backed cache handler)Redis cache handler, not GCS — registered by the vinext() plugin's cache.data adapter in vite.config.ts (Next's cacheHandler config option is not read by this build; see ISR & the Redis cache). The gate runs against a real Redis and asserts behaviour: back-to-back requests served from cache, the value changing after the revalidate window, the ISR route's own key present in Redis by name with a TTL longer than the revalidate window, and no cache-registration failure in the server log.
next/image optimization (sharp, avif/webp)Accept: image/webp is honoured with content-type: image/webp, and the optimized output is materially smaller than the source — a hard, always-enforced check.
Server Actions ('use server' mutations)A real round-trip over the no-JS progressive-enhancement path: the rendered form's action id is POSTed and its effect is asserted on a subsequent render.
Streaming / Suspense (incremental flush)Asserts chunk-arrival ordering: the shell marker must land in a strictly earlier chunk than the Suspense payload.
Edge Middleware (edge runtime)Upstream-gated: edge-runtime middleware is not yet adapter-standardizable on Knative; knext middleware runs on the Node runtime only.
PPR / Cache ComponentsUpstream-gated: Partial Prerendering / Cache Components are not yet adapter-standardizable.
Official suite — standalone build, Node runtimeSelectable, not deprecated. 778 passed / 0 failed (16 shards, Next.js v16.2.0, deploy mode), most recently observed on the main-branch nightly (early warning — see below for what counts toward a v1.0 credential). Covers Next's deploy-eligible e2e set minus 4 documented architectural exclusions (the ⛔ rows) and a small evidence-backed flaky-quarantine ledger — see Verified compatibility. A red nightly withdraws this row.
Official suite — standalone build, Bun runtime, compiled executable⚠️This is the artifact the standalone build ships on Bun: a bytecode single executable, not a folder of JavaScript. It passes the per-PR smoke gate and its own build-time bytecode verification, but the official suite has not yet been run against the compiled executable itself — its evidence does not yet exist at the suite level.
Official suite — vinext build, Bun runtime (default)⚠️This is today's default build. Its weekly suite lane runs below the Node cell's pass rate; the remaining gap is tracked on its own bar rather than folded into this row. See Bun & the compiled executable.
Official suite — vinext build, Node runtime⚠️Buildable: kn-next build produces a Node server and an image that ships the V8 compile cache baked in, proven by a per-PR build-and-boot check. The official suite has not yet been run against this cell. See vinext on Node.

v1.0 credentialing

A green suite run is evidence for a cell; it is not the same claim as v1.0-credentialed. Each runtime × builder cell above must independently bank 14 consecutive scheduled nights, run against a frozen release build of knext (not the fast-moving main branch), before it counts toward v1.0. Main nightlies keep running as an early-warning signal and can flip a row back to ❌ on a regression, but they never advance a cell's credential count. No cell is credentialed today. Full detail: Verified compatibility.

Maintenance & honesty

  • Every ✅ is mechanically gated. In the knext source repository, a guard test parses this table's canonical twin and fails CI if a ✅ row's evidence does not resolve to real on-disk files, a hard compat-smoke check, or a recorded green run.
  • The official-suite claims are revocable, not permanent. Each cell's ✅ or ⚠️ is backed by the most recently cited run; a shard with any failed test fails the job, a red scheduled run raises an alarm, and the policy is to flip the affected row back and withdraw the claim.

This page mirrors the CI-guarded compatibility matrix in the knext source repository, which is the canonical source. If the two ever diverge, the source-repo file wins.

On this page