Skip to content

Extension

Defined in: packages/core/src/kernel/types.ts:949

The atomic unit of composition. Everything — presets, packages, .use() args — is an Extension.

Extensions are pure data: mounts, bins, env vars, seed files, and service declarations. No behavior, no callbacks, no lifecycle. Merge semantics: later wins for mounts/bins/env/files; services are collected in order. A preset is a function that returns an Extension.

const myExt: Extension = {
bins: { hello: async (proc) => { await proc.stdout.write('hi\n'); return exitCode(0) } },
env: { GREETING: 'hello' },
files: { '/etc/motd': 'Welcome to my system.\n' },
}
const image = await Unix().use(stdSystem()).use(myExt).build()

optional bins?: Record<string, BinFunction>

Defined in: packages/core/src/kernel/types.ts:953

Bin functions registered at /bin/<name>. Later wins per name.


optional env?: Record<string, string>

Defined in: packages/core/src/kernel/types.ts:955

Environment variables. Later wins per key.


optional files?: Record<string, string>

Defined in: packages/core/src/kernel/types.ts:957

Seed files written after mounts are established. Later wins per path.


optional man?: Record<string, BinHelp>

Defined in: packages/core/src/kernel/types.ts:961

Man page content for bins. Key is bin name. Later wins per name.


optional mounts?: Record<string, Fileserver>

Defined in: packages/core/src/kernel/types.ts:951

Fileserver mounts. Key is the mount path (e.g., '/data'). Later wins per path.


optional services?: ServiceDef[]

Defined in: packages/core/src/kernel/types.ts:959

Service declarations for the init system. Collected in order across extensions.