Skip to content

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.

#DecisionStatus
0001Strict Electron process isolation, one preload bridgeAccepted
0002Local storage in a SQLite file through node:sqliteAccepted
0003Database location in a pointer file, never moved automaticallyAccepted
0004PDF pages rasterized in the main process with pdf.js + @napi-rs/canvasAccepted
0005Book metadata looked up on demand in public APIs, from the main processAccepted
0006Bédéthèque album pages read from a pasted linkAccepted
0007Cover thumbnails in a disk cache, outside the databaseAccepted
0008Interface translations with i18next, locales split by areaAccepted
0009IPC arguments validated in the main processAccepted
0010Schema migrations versioned with PRAGMA user_versionAccepted
0011A mandatory handle() wrapper for IPC, and opaque tokens instead of pathsAccepted
0012Comic files decoded in a utility process, not in the main processAccepted
0013One renderer data store, kept current by a data:changed pushAccepted
0014Achievements evaluated in the renderer, only unlocks persistedAccepted
0015Library organization: the app moves files into one subfolder per comicAccepted
0016Library structure: a tree of up to three metadata levelsAccepted
0017Library file names: a template of metadata fieldsAccepted
0018Decoder calls bounded by a timeout, archives tied to their windowAccepted
0019Several users on one library, without passwordsAccepted
0020Library paths relative to the library foldersAccepted

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.