@khal-os/* packages you’ll import into your pack) is a pnpm monorepo. Each pack-* repo (including pack-template) is a bun workspace. Knowing which tool runs where is the only setup detail that trips up first-time contributors.
TL;DR
pnpm
For the
@khal-os/* SDK workspace. pnpm install, pnpm build, pnpm typecheck, pnpm lint.bun
For every
pack-* repo (the scaffold you clone from pack-template). bun install, bun run build, bun run typecheck.Node version
Install Node 20 or newer. The@khal-os/* packages target modern Node and bun itself installs cleanly on 20.x. If you use nvm, run nvm use inside any repo that ships an .nvmrc.
The SDK workspace — pnpm
The SDK workspace ships the four framework packages your pack will depend on: @khal-os/sdk, @khal-os/ui, @khal-os/types, and @khal-os/dev-cli. It uses pnpm and Turbo under the hood.
Pack repos — bun
Every pack-* repo — including the scaffold you clone from pack-template — uses bun as both its package manager and its runtime. bun install is fast, workspaces are first-class, and the included bundler already matches the toolchain the template expects.
Don’t cross the streams. Running
pnpm install inside a pack-* repo, or bun install inside the SDK workspace, will produce a lockfile the other tool ignores — and the next person on the repo will have to untangle it. When in doubt, check which lockfile is already committed.Verifying your setup
After you’ve cloned the workspace, pick one of each and confirm both install cleanly:
Next steps
Build your first pack
Scaffold a new pack from
pack-template, rename the five files, and get a “Hello FDE” component shipping.Pack anatomy
A directory-level tour of everything inside a pack — manifest, frontend package, backend service, Helm chart, CI.