Architecture decision records
An ADR records one structural decision: the context, what was decided, and what it costs. ADRs are immutable once accepted: to change a decision, write a new ADR that supersedes the old one and update the old one's status.
| # | Decision | Status |
|---|---|---|
| 0001 | Strict Electron process isolation, one preload bridge | Accepted |
| 0002 | Local storage in a SQLite file through node:sqlite | Accepted |
| 0003 | Database location in a pointer file, never moved automatically | Accepted |
| 0004 | PDF pages rasterized in the main process with pdf.js + @napi-rs/canvas | Accepted |
| 0005 | Book metadata looked up on demand in public APIs, from the main process | Accepted |
| 0006 | Bédéthèque album pages read from a pasted link | Accepted |
| 0007 | Cover thumbnails in a disk cache, outside the database | Accepted |
| 0008 | Interface translations with i18next, locales split by area | Accepted |
| 0009 | IPC arguments validated in the main process | Accepted |
| 0010 | Schema migrations versioned with PRAGMA user_version | Accepted |
| 0011 | A mandatory handle() wrapper for IPC, and opaque tokens instead of paths | Accepted |
| 0012 | Comic files decoded in a utility process, not in the main process | Accepted |
| 0013 | One renderer data store, kept current by a data:changed push | Accepted |
| 0014 | Achievements evaluated in the renderer, only unlocks persisted | Accepted |
| 0015 | Library organization: the app moves files into one subfolder per comic | Accepted |
| 0016 | Library structure: a tree of up to three metadata levels | Accepted |
| 0017 | Library file names: a template of metadata fields | Accepted |
| 0018 | Decoder calls bounded by a timeout, archives tied to their window | Accepted |
| 0019 | Several users on one library, without passwords | Accepted |
| 0020 | Library paths relative to the library folders | Accepted |
These first four ADRs were written after the fact, from the code and its comments, then checked by the maintainer.
Writing a new ADR
Copy the template to NNNN-short-title.md (next number), fill it in, add it to the table above, and ship it in the same pull request as the change it describes.