ADR 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.