# ADR 001: Stack and tooling

> TypeScript end to end, ESM only, latest stable everything, no backward-compatibility layers: Node 26 (built-in node:sqlite), TypeScript 7 (native compiler), pnpm 12 workspaces, Vite 8, Vitest 5,…

Source: https://nooklet.danielalder.cz/decisions/001-stack-and-tooling

Date: 2026-09-10. Status: accepted.

## Decision

- TypeScript end to end, ESM only, latest stable everything, no backward-compatibility layers:
  Node 26 (built-in `node:sqlite`), TypeScript 7 (native compiler), pnpm 12 workspaces,
  Vite 8, Vitest 5, Biome 2 for lint + format.
- Monorepo layout: `packages/core` (pure model + parsing + sync primitives, runs in Node and the
  browser), `packages/server` (Node: SQLite, sync, HTTP API, MCP, embeddings, plugin host),
  `packages/plugin-api` (public plugin types), `apps/web` (the client; PWA first).
- Python is not required. Ollama serves embedding models over HTTP, so pure TS suffices.

## Why

The user asked for modern tech with no legacy baggage, and a single language keeps one build,
one test runner, and one plugin language (a lesson from SilverBullet, which lost users migrating
between three scripting DSLs). `node:sqlite` removes native-module build pain and ships FTS5.

## Consequences

- Package exports point at TypeScript source; consumers (Vite, tsx, Vitest) transpile. A build step
  is added only when publishing.
- If TypeScript 7 or Biome 2 blocks something, pin down one major, do not fork the setup.
