OAKENMAIL
Generated

Architecture decisions

The significant design decisions behind Oaken Mail, in the order made.

1

Decisions

An architecture decision record (ADR) captures one significant decision, why it was made, and what follows from it. Records are never rewritten; a later record supersedes an earlier one.

# Decision Status Date
0001 Record architecture decisions accepted 2026-10-20
0002 One core daemon with thin clients accepted (the MCP part is superseded by ADR 0004) 2026-10-20
0003 SQLite access: aiosqlite with a write broker and a read pool accepted 2026-10-20
0004 The MCP server is part of core accepted 2026-10-20
0005 The HTTP stack and how the local API defends itself accepted 2026-10-20
0006 Clients live in apps/, each its own package accepted 2026-10-20
0007 Core stays headless; a UI is a separate client accepted 2026-10-20
0008 Folders are a location attribute; labels are tags; a general enrichment kind accepted 2026-10-21
0009 Sieve scripts are written by a scoped, compile-first, owner-only write path accepted 2026-10-21
0010 The stable surface, its versioning and how it is protected accepted 2026-10-22
0011 Service units: a dependency-ordered build/start/stop for the composition root accepted 2026-10-22
0012 Plugin extension hooks: job kinds, pipeline stages and scheduled tasks accepted 2026-10-22
0013 A read-only status page on loopback accepted 2026-10-22
0014 The Oaken product family and the surfaces a UI builds on accepted 2026-10-22
0015 The reader's triage rules: config.toml is trusted, the database is the last known good accepted (ratified 2026-11-03 by the owner, who verified the built implementation for 0.2.0) 2026-11-03
0016 A plugin owns its operations, its small store and its wizard commands accepted (ratified 2026-11-03 by the owner, who verified the built implementation for 0.2.0) 2026-11-03
0017 Triagers and enrichers are separate kinds accepted (ratified 2026-11-03 by the owner, who verified the built implementation for 0.2.0) 2026-11-03
0018 A web UI contract for plugins: settings, pages and wizards from data accepted (ratified 2026-11-03 by the owner, who verified the built implementation for 0.2.0) 2026-11-03
0019 The kinds of analyzer: enrich, triage and action, and the attachment lane accepted (ratified 2026-11-03 by the owner, who verified the built implementation for 0.2.0; decision 5 is superseded by ADR 0020) 2026-11-03
0020 Attachments live in a core quarantine, and only a clean scan releases one accepted (ratified 2026-11-03 by the owner) 2026-11-03