FIRMWARE · OFFLINE-FIRST725f370 ↗
Wi-Fi failure no longer takes the reader down with it.
Networking has been demoted from a boot-critical dependency to an optional degraded subsystem. If the ESP-IDF Wi-Fi stack or network policy fails, ENKU keeps the Library and Reader alive and exposes connectivity as an Error state instead.
- platform boot continues when Wi-Fi initialization fails;
- runtime no longer returns a fatal NetworkPolicyFailed during startup;
- network state remains visible for Wi-Fi settings and diagnostics;
- offline reading stays available independently of connectivity.
This aligns the firmware with the product promise: ENKU is an offline-first reader with networking as an enhancement, not a prerequisite.
FIRMWARE · SYSTEM ASSETSf7cd3c8 ↗
The reader font becomes part of the firmware.
Noto Sans Regular is now embedded directly in the ESP-IDF application image and loaded by FreeType from flash when no valid SD override exists. The normal reader boot path no longer depends on provisioning a font file on removable storage.
- official Noto Sans Regular source blob is preserved byte-for-byte in the repository;
- SIL OFL 1.1 license and source provenance are stored next to the asset;
- FreeType uses
FT_New_Memory_Face for the embedded baseline; - a valid SD font remains an optional override, while a broken override falls back automatically;
- final application image is about 2.33 MiB in a 4 MiB app partition, leaving 44% free.
System UI typography is now independent from removable storage. SD can return to its intended role: books, caches and user-managed content rather than critical boot assets.
FIRMWARE · BOOT RECOVERYa059e5e ↗
Font provisioning failures stop looking like dead hardware.
The device now renders a built-in recovery screen when the required Noto Sans asset is missing, and a separate error screen when the font exists but FreeType/face/size initialization fails.
- missing font shows explicit add-font guidance;
- font initialization failure gets a separate recovery state;
- recovery rendering does not depend on FreeType or the missing font asset itself;
- serial diagnostics remain available for the detailed failure cause.
This closes another early-boot dead-screen case. The next architectural improvement is to stop treating the reader font as an SD-only critical dependency.
FIRMWARE · STORAGE RECOVERY37f1954 ↗
Storage failure becomes visible and recoverable.
The ESP-IDF platform no longer aborts before the display starts when microSD bring-up fails. ENKU now keeps the user-visible/control path alive, renders a storage recovery screen and retries the card until the storage layer becomes usable.
- display, power, network and controls initialize before removable storage;
- failed directory setup rolls the FAT mount back completely instead of leaving a false mounted state;
- mount/init failure and directory-setup failure get distinct recovery guidance;
- recovery retries every two seconds and cleanly restarts after a successful remount.
The reference board has no dedicated card-detect signal, so firmware deliberately avoids claiming that a failed mount proves the card is physically absent.
FIRMWARE · POWER-LOSS RESILIENCE0a4561a ↗
Long reading sessions now checkpoint themselves.
ENKU no longer relies only on Back, Sleep or Power Off to persist recent reading progress. A lightweight checkpoint is written every eight successful page turns without rewriting Library summary or application context on every page.
- full lifecycle flush remains centralized for Back / Sleep / Power Off;
- periodic flush writes only dirty semantic reading progress;
- successful checkpoint clears the dirty flag and restarts the cadence;
- a failed periodic write keeps progress dirty so the next safe point can retry.
This reduces the amount of reading progress lost after an abrupt power interruption while avoiding write amplification from checkpointing every single page turn.
FIRMWARE · MEMORY DISCIPLINE142fbe9 ↗
Parser memory ceilings become an explicit contract.
EPUB ZIP handling and FB2 ranged parsing now consume one shared ParserMemoryBudget instead of carrying independent magic numbers through implementation files.
- 32 KiB ranged/inflate working chunks;
- 512 KiB FB2 metadata prefix ceiling;
- 4 MiB maximum materialized text resource / FB2 leaf section;
- 2 MiB ZIP central-directory ceiling, 4096 entries and a 65,557-byte EOCD window.
The regression suite now checks the budget itself as an architectural invariant, so future parser work cannot casually inflate the embedded memory envelope.
FIRMWARE · PLATFORM / DISPLAY6b9ae57 ↗
The firmware now knows what board it is running on.
A board capability/profile layer now separates product behavior from board-specific wiring. The Waveshare board is an explicit reference-hardware profile, while ENKU R0.1 Base / Pro / Pro Wireless are design-target profiles until they are physically validated.
- shared BoardCapabilities contract in the framework-neutral core;
- storage bus, display family, orientation, controls, PSRAM, USB, IMU, Hall, Dock, frontlight and Qi capabilities described explicitly;
- active profile logged at boot for bring-up diagnostics;
- R0.1 capabilities remain marked as design targets rather than verified hardware claims.
In the same hardening pass, the e-paper refresh service gained anti-ghosting accounting: after five fast/partial updates it forces a clean full refresh before incremental updates continue.
FIRMWARE · READER ROBUSTNESS647eb0e ↗
Reader state becomes lifecycle-safe.
The reader stack moved from isolated parser and checkpoint pieces toward a more fault-tolerant device lifecycle. Semantic resume is now regression-tested across section boundaries and relayouts, stale checkpoints recover to a safe book start, and Back, Sleep and Power Off share one controlled persistence path.
- stable semantic resume across chapter boundaries and layout changes;
- safe fallback for missing sections and impossible saved offsets;
- centralized dirty-state flush for Back, Sleep and Power Off;
- clean flushes avoid unnecessary checkpoint writes;
- TXT, EPUB and FB2 all run through the concrete Book Loader path.
The goal is no longer just “open a book.” ENKU is being hardened around interruptions, changed files, sleep, shutdown and the failure modes expected on a constrained physical reader.
FIRMWARE · EPUB / FB296dc56b ↗
Book parsing moves toward bounded random access.
The book pipeline no longer assumes that an entire archive must be treated as one in-memory blob. ZIP-backed EPUB work gained ranged reads, POSIX file-store support and regression coverage, while metadata-only EPUB and FB2 paths are exercised independently.
- bounded random-access ZIP source;
- ranged reads through the file-store boundary;
- metadata-only EPUB and FB2 regression coverage;
- better fit for ESP32-S3 memory limits and large books.
This is a product-level change: the reader is being shaped around constrained hardware rather than depending on desktop-class memory assumptions.
HARDWARE · CUSTOM MAINBOARD72fa874 ↗
The custom ENKU mainboard becomes a real engineering track.
The project now has a portrait-first R0.1 architecture instead of only a reference-development-board plan. The SSD1677 raw-panel integration path, external high-voltage architecture and Base/Pro display family are documented as a schematic baseline with explicit fabrication blockers.
- Base target: GDEY0397T81P;
- Pro target: GDEY0426T82-FL01C with warm/cool frontlight;
- shared 24-pin SSD1677 interface direction;
- EPD high-voltage booster kept reference-driven rather than guessed.
HARDWARE · PIN MAPf0e6d65 ↗
R0.1 gets a pin budget that accounts for the actual N16R8 module.
The custom-board GPIO map now protects ESP32-S3 strapping, native USB and N16R8 memory-related pins while fitting shared EPD/microSD SPI, four physical controls, BMI270, Hall wake, battery sensing, Dock detection and Pro-only lighting controls.
The old assumption that GPIO35–37 were free has been removed for the N16R8 target.
POWER · PRODUCT VARIANTS9d6e32d ↗
One power architecture now spans Base, Dock, Pro and Wireless.
R0.1 converged on BQ25185 PowerPath, TPS2121 as the quality-baseline USB/Dock source selector and TPS63031 as the first 3.3 V buck-boost candidate. Hard power-off is designed to kill the system rail while leaving charging available.
- USB-C remains the universal charge/data path;
- 4-pin pogo Dock gets explicit DOCK_DETECT;
- Pro Wireless routes Qi into the common charging architecture;
- Pro frontlight has an independent warm/cool prototype strategy.
PRODUCT · OPEN HARDWARE19700f6 ↗
Open source and future kit sales are treated as the same product strategy.
ENKU now explicitly separates open design rights from the ENKU trademark and models commercial kits using full COGS rather than raw component cost. Electronics, Base, Cover, Pro, Pro Wireless and Dock have individual BOM ceilings so open-source availability does not force unsustainable pricing.
Prototype fabrication and assembly are being planned around PCBWay as the preferred sponsored/order path. Sponsorship is treated as prototype support only; future Kickstarter or website margins must still work against unsponsored production COGS.
PROJECT · WEBSITEf89f317 ↗
Dark mode receives a real cross-page consistency pass.
The first dark-theme implementation exposed page-specific hard-coded backgrounds and two different secondary-button class conventions. Shared theme overrides now normalize tables, grid surfaces, notes, buttons, flow arrows, support cards and muted typography across the site.