ajo

Production

Build, seal and run

From Kit’s staging tree to the Ajo Engine production runtime.

Use a matching pair

The compiler prepares bytecode; the engine executes it. Use both from one verified release and check the engine pin. A different bytecode contract requires resealing.

The current native release is verified on Linux x64 with Alpine/musl and the Freedesktop glibc runtime. Check the package platform matrix before choosing a build host. The engine is a focused Kit runtime, not a general-purpose Node replacement.

Install the native pair

On a verified Linux x64 build host, install the same exact version of the runtime and compiler. These npm packages contain the executables directly; installation does not build or download another runtime. Use engine-strict=true with pnpm to enforce the platform restriction. Install in a separate toolchain directory so its npm lockfile stays separate from the App’s pnpm lockfile; UI development does not need these native tools.

Terminal · Linux x64 toolchain
mkdir -p /path/to/ajo-toolchain
cd /path/to/ajo-toolchain
npm install --save-dev --save-exact ajo-engine@0.1.0 ajo-engine-compiler@0.1.0

Stage the application

Kit writes the closed server graph, migrations, client assets and compiler.json into .ajo/. The build rejects Node builtins and imports outside the engine production graph.

Terminal
cd /path/to/your-app
pnpm exec kit build

Seal with the compiler

Pass the compiler to build to produce dist/ajo. Its manifest records the engine pin, chunk hashes, client assets and capabilities. Source text is stripped by default.

Terminal
pnpm exec kit build --compiler /path/to/ajo-toolchain/node_modules/.bin/ajo-engine-compiler

Run the artifact

Set APP_URL to the public origin and provide the App’s required environment. On-disk SQLite also needs a writable, declared data root. This website has no database.

Terminal · an App without a database
NODE_ENV=production HOST=127.0.0.1 PORT=8080 APP_URL=http://localhost:8080 \
  /path/to/ajo-toolchain/node_modules/.bin/ajo-engine dist/ajo

Make authority explicit

The descriptor carries module grants, filesystem roots and optional FIFO declarations. A module grant does not bypass a filesystem check. The engine refuses missing or mismatched artifacts and unavailable required capabilities.

Hashes establish consistency. Publisher authenticity and safe handling of untrusted artifacts remain separate operational responsibilities.