RFDs/0010
Additional ebook formats
Goal
Add plain text and Markdown, DjVu, FB2, unencrypted MOBI/AZW3, and comic archives (CBZ and CBR) through a small format-extensibility seam. CBZ was read by the Iced application; it is not part of the first release (decided 2026-10-14, RFD 12) and returns here as a format package beside CBR. Each format remains independently shippable and must pass dependency, license, bounded-parsing, fixture, reader, library, and packaging gates.
Proposal
Centralize stable format identity, extensions, capabilities, detection, import, and open dispatch without forcing unlike raster, reflowable, and archive-image formats behind one rendering abstraction. Add only the seam required to remove existing duplicated dispatch; do not define a plugin ABI.
The registry and format operations are Dart engines behind the Flutter reader shell defined by RFD 12 (Dart-only since 2026-10-21). Flutter reuses the same fixed-page, reflowable, and image-sequence interaction surfaces across formats; format parsing, admission limits, stable locations, and metadata stay in each format’s engine package, never in widgets. A format whose only sound decoder is native enters as a leaf plugin with its own license and packaging gate, not as a second application core.
Every format requires legally redistributable fixtures, explicit corrupt and unsupported errors, resource bounds, background parsing or decoding where needed, and supported-platform package validation. DRM circumvention, remote resources, active content, and restrictive decoder licensing are out of scope.
Implementation
The format-specific gates and work packages are tracked in RFD 10 implementation checklist.
The frontend and application core boundary is defined by RFD 12: Cross-platform Flutter frontend.