# ADR-0001: Use Bun as the runtime

# What this is about

Choosing the runtime is the kind of decision that quietly shapes everything else — from how fast the test loop feels to which crypto primitives we have to polyfill. We wanted to make this choice deliberately, so this ADR captures the reasoning.

# Context

We needed a TypeScript-native runtime with a minimal dependency footprint, a built-in test runner, and full WebCrypto parity. One of the goals of this reference implementation is that integrators should be able to clone, hack, and run it without learning a new toolchain — and in particular without dragging in Java, Go, or .NET dependencies.

# Decision

Standardise on Bun 1.2+ for development, testing, and the default production container images. Node 22+ remains a supported alternative for tooling that can't run under Bun, but the services themselves are not tested under Node.

# Consequences

The good:

The trade-off worth flagging:

# What else we considered