Official adapter
How knext runs on the official Next.js Deployment Adapter API.
knext is built on the official Next.js Deployment Adapter API — not a reverse-engineered
runtime. The adapter is a small object implementing the official NextAdapter shape, shipped as a
package export so any app (and the official compatibility harness) can point at it.
The adapter object
The knext adapter lives in @knext/core and is exported at @knext/core/adapter. Its default
export is a NextAdapter:
const adapter: NextAdapter = {
name: 'knext-adapter',
modifyConfig(config, { phase }) {
// forces output: 'standalone' on phase-production-build
},
async onBuildComplete(ctx) {
// logs output counts + uploads static artifacts to object storage (keyed by buildId)
},
};
export default adapter;modifyConfigforcesoutput: 'standalone'during the production build.onBuildCompleteuploads the build's static artifacts to the configured object store, keyed bybuildId.
Wiring it into an app
You reference the adapter via experimental.adapterPath in next.config.ts, pointing at a thin
local re-export file:
import adapter from '@knext/core/adapter';
import type { NextAdapter as _NextAdapter } from 'next';
// keeps the official-adapter contract visible at the app boundary
export type KnextAdapter = _NextAdapter;
export default adapter;experimental: {
adapterPath: path.resolve(import.meta.dirname, 'next-adapter.ts'),
},This is the same pattern used by the example apps in the knext repo, and by this docs site (the dogfood target).
Compatibility honesty
knext validates the adapter against the official Next.js compatibility suite in CI. A smoke gate
runs a Node + Bun matrix on every change, and a nightly job runs a partial subset of the
official vercel/next.js deploy-test harness.
The full official suite is not passing yet. Until it is, knext makes no claim to "pass the official Next.js compatibility suite." See the compatibility matrix for the row-by-row, evidence-gated status.