Skip to content
CAI
Software that uses CAICheck a score

MilkFeng/lumina

65.0

Adequate · 21 September 2026

26.2k

lines of production code

Dart

with TypeScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform EPUB e-reader application built with Flutter, featuring a native Rust FFI backend for high-performance, lock-free file parsing and streaming. It manages a local library with support for importing books from device storage, WebDAV sources, and system share sheets, while handling backups and storage maintenance. The app provides a customizable reading experience with persistent settings, multi-variant theming, and native platform integrations for file access and page navigation.

Features

Add WebDAV external source support with folder browsing and import

Users can now connect to WebDAV servers as an external source, browse folders, and import books directly into the library. This change introduces the application-layer state management for folder navigation (ExternalSourceBrowserNotifier) and the download/import pipeline (ExternalSourceImportNotifier), alongside the data layer components including the WebDAV adapter, configuration codec, and source registry registration. The feature integrates with the existing library import service, allowing remote WebDAV content to be downloaded and added to the local collection with progress tracking.

_lib/src/features/external\sources · high confidence

Added Rust FFI bindings for EPUB parsing and Cargokit build infrastructure

This change introduces the Dart-side FFI bindings for the Rust backend, generated by flutter\_rust\_bridge 2.13.0. It adds the \epub.dart\ API, which exposes functions to load, read, and close EPUB files, enabling the application to parse and decompress content from EPUB archives. Additionally, it integrates the Cargokit build tool into the \rust\_builder\ directory, providing the necessary infrastructure to build and bundle the native Rust library for Android, iOS, and other platforms.

_lib/src/rust, rust\_builder/cargokit/build\tool · high confidence

App-wide theme customization with persistent variant support

Users can now customize the app's color theme across the entire application, with settings persisting between sessions. The system introduces a new theme engine that supports multiple color variants (such as standard, eye care, matcha, midnight, sakura, ocean, twilight, and coffee) in both light and dark modes. This change replaces the previous single Notion-style monochrome theme with a flexible, multi-variant theming system that allows users to select their preferred aesthetic, which is now saved and restored automatically.

lib/src/core/theme · high confidence

Automated web asset build tool added

A new Dart script, tool/build\_web\_assets.dart, has been introduced to automate the build process for web assets. This tool uses esbuild to bundle and minify the controller JavaScript and pagination/skeleton CSS files, then generates a Dart source file (lib/src/web/web\_assets.dart) containing these assets as embedded string constants for use by the application.

tool · high confidence

Initial integration of Rust FFI via Cargokit

The \rust\_builder\ module has been added to provide glue code for building Rust libraries within Flutter projects. This change introduces Cargokit, a build tool that seamlessly integrates Cargo with Flutter's native build systems (CMake for Linux/Windows and CocoaPods for iOS/macOS). It includes the necessary build scripts, CMake configurations, and platform-specific setup files to compile Rust code and link the resulting libraries into the Flutter application.

_rust\builder · high confidence

Introduce Rust FFI backend for EPUB reading via flutter\_rust\_bridge

This change adds a new Rust-based backend for the Flutter reader, exposing EPUB file handling through flutter\_rust\_bridge (v2.13.0). The implementation in \src/api/epub.rs\ introduces a global cache for parsed ZIP central directories and uses the \rc-zip\ library to enable lock-free, parallel decompression of EPUB entries, significantly improving concurrency for simultaneous file reads. The entry also includes boilerplate for the bridge (\frb\_generated.rs\), a simple demo API (\simple.rs\), and configuration files for license compliance (\about.hbs\, \about.toml\).

rust · high confidence

Introduces a new TypeScript-based reader controller with WebView bridge and typography handling

This change adds a new \web\_assets/controller.js\ module that serves as the bridge between the Flutter app and the web-based reader view. It introduces a typed \FlutterBridge\ to handle events like viewport resizing, page changes, and user interactions (taps, long presses) via \flutter\_inappwebview\. The module also implements a \LuminaApi\ interface and a \Renderer\ to manage frame loading, page navigation, scroll restoration, and theme updates. Additionally, it includes logic for applying specific typography and layout styles (centering, fullscreen, padding removal) to content within iframes, supporting both Duokan and Rendition formats.

_web\assets/controller.js · high confidence

Introduces core reader types and spatial indexing infrastructure

This change adds the foundational TypeScript types and data structures required for the reader's rendering and interaction logic. It introduces a QuadTree implementation for efficient spatial queries of interactive elements (such as taps or highlights) within the reading view, alongside a new \Color\ type system that supports typed color objects, hex/RGB parsing, and conversion. These additions support the reader's theme pipeline and interaction handling by providing a robust, type-safe basis for managing layout boundaries, color themes, and spatial data.

_web\assets/controller.js/common · high confidence

Introduction of the Settings screen with integrated font and external source management

The application now includes a dedicated Settings screen that consolidates app information, appearance preferences, and library management. Users can manage custom fonts directly within this view via the FontsSection, configure external sources through the ExternalSourcesSection, and handle backup operations. The screen also provides access to storage locations, cache cleaning, and project details, with a conditional 'Check for Updates' tile visible only in non-store builds.

lib/src/features/settings/presentation · high confidence

Native volume key page turning and streaming EPUB support

The reader now supports turning pages using the device's volume keys on Android, enabled via a new \VolumeControlService\ that intercepts hardware events. Additionally, EPUB files are now streamed directly from the archive without full extraction, managed by a new \EpubStreamService\ that leverages a Rust FFI backend for efficient, lock-free decompression and file access.

lib/src/features/reader/data/services · high confidence

New Android native plugins for volume navigation and file access

The Android app now includes native Kotlin plugins that enhance user interaction and file management. VolumeControlPlugin allows users to turn pages using the device's volume keys, providing a more convenient reading experience on Android. Additionally, NativePickerPlugin implements a native file picker using the Storage Access Framework, enabling users to select EPUB files and folders directly from their device storage. LuminaDocumentsProvider exposes the app's library and covers through the Android DocumentsProvider, allowing other apps to access and share Lumina's content files.

_android/app/src/main/kotlin/com/lumina/epub\ereader · high confidence

New EPUB import and sharing infrastructure

The library now includes dedicated services for importing and sharing EPUB files. The \EpubImportService\ handles the full import pipeline: it copies the EPUB to app storage, extracts and compresses the cover image, parses metadata in an isolate to avoid blocking the UI, and saves the book and its manifest to the database transactionally. A separate \EpubShareService\ creates temporary copies of EPUBs for the platform share sheet and cleans them up afterward. Supporting this, the \ImportFilePipeline\ manages file picking and caching (including iOS security-scoped access), while \ImportWorkers\ provides the background tasks for hashing and parsing. Riverpod providers are added to wire these services into the app.

lib/src/features/library/data/services · high confidence

New book detail screen with inline editing and EPUB sharing

The book detail presentation layer has been refactored to introduce a new \BookDetailScreen\ that supports inline editing of book metadata (title, authors, and description) with validation, save/rollback logic, and animated UI transitions between view and edit modes. Additionally, a new \shareEpub\ helper has been added to the detail presentation, enabling users to share a book's EPUB file via the platform share sheet, with error handling surfaced through toast notifications.

lib/src/features/detail/presentation · high confidence

New core UI widgets and enhanced book cover display

This update introduces a suite of new reusable widgets for the settings and UI layers, including ExpandableText for truncating long descriptions, IntegerStepper for numeric inputs, LabeledSwitchTile for boolean preferences, SegmentedOptionChip and ThemeVariantChip for theme selection, and several Settings-specific components (SettingsAppHeader, SettingsInfoSection, SettingsSectionTitle, etc.). It also adds MiddleEllipsisTwoLinesText for symmetric text truncation, SimpleMarkdown for localized log rendering, and a comprehensive ProgressDialog for batch operations. Additionally, the BookCover widget now supports configurable corner radius, optional borders, image-type validation, and theme-aware styling, while ToastBubble has been refactored to use the app's ColorScheme for consistent theming across light and dark modes.

lib/src/core/widgets · high confidence

New inline editing and read-only detail views for books

The book detail screen now features two distinct presentation widgets: a read-only view that displays the book cover, title, authors, description, reading progress, and metadata chips, along with a button to start or continue reading; and an inline editing form that allows users to modify the title, authors, and description with validation feedback. This change introduces the specific UI components for viewing and editing book metadata within the detail feature.

lib/src/features/detail/presentation/widgets · high confidence

New reader style settings and UI components

The reader now includes a comprehensive style configuration bottom sheet allowing users to adjust font scale, line height, margins, and theme overrides. This update introduces new UI widgets for selecting custom fonts, handling external links, choosing page-turning animations, and adjusting typography settings, enhancing the reader's customization capabilities.

lib/src/features/reader/presentation/widgets · high confidence

New settings tiles for update checks, cache cleaning, and appearance customization

The Settings screen now includes three new interactive tiles. The 'Check for Updates' tile allows users to manually verify if a newer version is available by querying a remote server, displaying release notes and download links if an update is found. The 'Clean Cache' tile provides a one-tap solution to remove cached files, orphaned books, and unused fonts, helping to free up device storage. Additionally, the 'Appearance' section has been introduced, enabling users to switch between Light, Dark, and System theme modes and select from various color theme variants via segmented chips.

lib/src/features/settings/presentation/widgets · high confidence

Reader settings are now persisted and validated via Riverpod

The reader application layer now introduces a \ReaderSettingsNotifier\ (powered by Riverpod) that manages and persists user preferences such as zoom, line height, margins, theme mode, custom fonts, link handling, and volume key page turning. These settings are saved to \SharedPreferences\ and restored on app launch, with added validation to ensure custom font files still exist in the imported list before being applied.

lib/src/features/reader/application · high confidence

Support for importing EPUBs from external sources

Users can now open EPUB files directly from other apps or the system share sheet. The app intercepts these incoming files via a new \SharedEpubHandler\ widget and processes them through the standard import pipeline, displaying a progress dialog and automatically refreshing the library view upon completion.

lib/src/features/library/presentation · high confidence

Removals

About screen removed from the application

The dedicated About screen (lib/src/features/about/presentation/about\_screen.dart) has been deleted. This change removes the user-facing interface that previously displayed app version information, project credits, and usage tips.

lib/src/features/about · high confidence

Removal of WebDAV Sync capability

The WebDAV sync feature has been removed from the application. The data-layer files responsible for WebDAV configuration storage (\sync\_config\_repository.dart\, \sync\_config\_storage.dart\) and the WebDAV communication logic (\webdav\_service.dart\, \webdav\_sync\_service.dart\) have been deleted. Users will no longer be able to sync their library or reading progress via WebDAV servers.

lib/src/features/sync/data · high confidence

Removal of WebDAV Sync feature

The WebDAV synchronization capability has been removed from the application. This change deletes the sync configuration domain models, the Riverpod notifier managing sync state and operations, the WebDAV service implementations, and the user-facing sync settings screen. Users will no longer be able to configure or use WebDAV for syncing their library.

lib/src/features/sync/application · high confidence

Removed font subset generation script

The \scripts/generate\_subsets.py\ script, which previously downloaded Source Han Serif fonts and generated custom font subsets based on application text and character sets, has been removed. This eliminates the build-time dependency on external font downloads and character list processing for font customization.

scripts · high confidence

Architecture

Centralized library action logic via new mixin

A new \LibraryActionsMixin\ has been introduced to consolidate core library management behaviors for the LibraryScreen. This component now handles the end-to-end flow for importing EPUB files (including folder scanning and individual file selection) with a dedicated progress dialog, manages the deletion of selected books with confirmation prompts, and facilitates moving books into groups via a selection dialog. By extracting these interactions into a reusable mixin, the presentation layer for the library view is decoupled from the specific implementation of these actions.

lib/src/features/library/presentation/mixins · high confidence

Introduce centralized storage path management and directory constants

The application now uses a dedicated \AppStorage\ service to resolve and cache the absolute paths for the documents, temporary, and support directories at initialization, ensuring consistent path formatting. Additionally, a new \AppStorageConstants\ class defines the standard sub-directory structure (books, covers, manifests, fonts) and metadata file names, centralizing the storage layout configuration for all import, export, and backup operations.

lib/src/core/storage · high confidence

Reader UI logic extracted into focused mixins

The presentation logic for the reader screen has been refactored into a set of dedicated mixins (footnote, image viewer, link handling, page navigation, progress, spine navigation, and theme). This change improves code maintainability and separation of concerns by isolating specific user interactions—such as footnote popups, external link handling, and page turning—from the main reader state, without altering the user-facing behavior.

lib/src/features/reader/presentation/mixins · high confidence

Refactored Isar database initialization to support dependency injection

The monolithic Isar database service has been replaced with an abstract interface and a concrete implementation that accepts collection schemas as a parameter. This change removes hardcoded dependencies on specific domain entities (like ShelfBook and BookManifest) from the core database layer, allowing the application to dynamically configure the database schema via dependency injection. This architectural shift enables better modularity and testability by decoupling the database initialization logic from specific feature implementations.

lib/src/core/database · high confidence

Behavioural changes

Android build reports warnings for AGP 9 migration and Gradle 9.1.0 upgrade

The Android build configuration now generates warnings in the problem reports due to the migration to Android Gradle Plugin (AGP) 9 and Gradle 9.1.0. Specifically, the reports flag the use of the deprecated \org.jetbrains.kotlin.android\ plugin, noting it is no longer required since AGP 9.0, and warn about the deprecated Groovy DSL space-assignment syntax for properties (e.g., \group value\ instead of \group = value\), which is scheduled for removal in Gradle 10.0.

android/build · high confidence

App initialization now pre-warms WebView and registers Rust licenses

The application startup sequence has been refined to improve perceived performance and compliance. The main entry point now pre-warms the underlying WebView engine before the UI builds, reducing latency for the first reader view. Additionally, the app explicitly initializes the Rust FFI runtime and registers third-party license information from a bundled JSON file, ensuring proper attribution. The initialization order also ensures shared preferences are loaded before the provider container is created, preventing potential delays when the UI first accesses settings.

lib · high confidence

Bookshelf view mode persistence and import pipeline refactoring

The bookshelf now remembers your preferred grid density (compact or relaxed) across app restarts, saving the selection to shared preferences. Additionally, the library import process has been refactored to use a streaming pipeline that processes files one by one, providing real-time progress updates and preventing out-of-memory issues during large imports.

lib/src/features/library/application · high confidence

Enhanced EPUB parsing with encryption rejection, RTL support, and EPUB 3 NAV

The EPUB parser now rejects encrypted books early to prevent crashes, supports right-to-left (RTL) reading direction by parsing the spine's page-progression-direction attribute, and adds native support for EPUB 3 Navigation documents (NAV) as the primary table of contents source, falling back to NCX only if NAV is absent. Additionally, the parser now preserves spine item properties (such as those for footnotes or images) and removes the previous fallback for GBK character encoding, strictly requiring UTF-8.

lib/src/features/library/data/parsers · high confidence

Improved toast notifications and new storage maintenance service

Toast notifications now adapt to the active keyboard height to prevent overlap when typing, and their animation timing and theming are unified with the app's global theme settings. A new Storage Cleanup Service has been added to automatically remove orphaned book files, cover images, and imported fonts that no longer have matching database records, as well as to clear import and export caches. The previous EPUB import and streaming services have been removed as part of this restructuring.

lib/src/core/services · high confidence

Library UI overhaul with dual view modes and multi-select management

The library screen now supports two distinct display layouts: a 'relaxed' mode showing cover, title, author, and reading progress, and a 'compact' mode featuring a cover-only card with a gradient title overlay and a frosted progress badge. A new multi-select mode allows users to long-press items to enter selection state, enabling batch operations like moving books to different groups or deleting them via a dedicated bottom action bar. The interface also includes a custom animated speed-dial button for adding content, a refined style menu for sorting and view switching, and a progress dialog that provides detailed feedback during book imports.

lib/src/features/library/presentation/widgets · high confidence

Library data layer refactors: DI, natural sort, and backup support

The library data layer has been refactored to improve testability and user-facing organization. Dependency injection is now used for the Isar database instance, replacing the previous global singleton pattern. Sorting for book lists in shelves now uses natural (human-friendly) comparison for titles and authors, making the library easier to browse. Additionally, a new method to clear all book manifests has been added to support the library restore flow, which replaces existing data rather than merging. The repository also now exposes file hashes for storage cleanup and includes logic to prevent duplicate shelf groups.

lib/src/features/library/data · high confidence

Library domain model refactored for reading direction and structured spine data

The library domain models have been updated to support vertical and right-to-left (RTL) reading modes and to store richer spine metadata. BookManifest now uses a structured SpineItem list (containing href, idref, linear flag, and properties) instead of simple strings, enabling more precise sequential navigation logic. ShelfBook now includes a direction field to track LTR/RTL layout and removes the single-author, isFinished, isDeleted, and lastSyncedDate fields to simplify the data model. ShelfGroup has also dropped its isDeleted soft-delete flag. Additionally, the underlying database schema has been migrated from Isar to isar\_community, with the schema version bumped to 3.3.2.

lib/src/features/library/domain · high confidence

Localization cleanup and new import/storage strings

The English and Chinese localization files have been streamlined by removing obsolete UI strings (such as Library, Bookshelf, and specific theme/font settings) that are no longer used in the interface. New strings have been added to support recent features: import progress details (success/fail counts), a new 'Storage' section with cache cleaning options, and updated app appearance settings (Theme Mode and Variant). Several existing messages were also refined, including removing trailing ellipses from 'Move to' and 'Importing' labels and updating the Chinese translation for 'Import Book' to '导入书籍'.

lib/l10n · high confidence

Native iOS file picker and improved page-turn animations

The iOS reader now uses a native file picker that supports lazy, security-scoped access for EPUBs, folders, and backups, allowing users to import files without immediate full copies. Page-turn animations have been rewritten to use native slide transitions driven by snapshotting the web view, providing smoother visual feedback. The app is also registered to handle .epub files directly, enabling users to open EPUBs from other apps or the Files app.

ios/Runner · high confidence

New CSS styles for iframe-based reader view

A new skeleton.css file has been added to define the layout for the reader view. It sets the html and body to full viewport dimensions with hidden overflow and establishes a full-screen container for iframes. Iframes are styled to be absolutely positioned, borderless, and non-interactive (pointer-events: none), ensuring they fill the container without allowing user interaction, which supports the underlying reader WebView bridge functionality.

_web\assets · high confidence

New Lumina reader styling and typography support

The web reader now applies a comprehensive new stylesheet suite that enforces Lumina-specific color themes, typography, and layout behaviors. Users will see consistent text and link colors based on Lumina design tokens, improved handling of CJK fonts (including Duokan-specific typefaces like Songti and Fangsong), and refined footnote rendering where footnotes are hidden but references remain visible. The layout engine also enforces safe-area padding, disables scrollbars, and ensures media elements fit within the reading column, providing a more polished and consistent reading experience across devices.

_web\assets/pagination.css · high confidence

New WebView bridge and typed API for reader control

The reader now uses a dedicated Dart API layer (\LuminaApi\) and a token-based communication bridge (\WebViewBridge\) to manage interactions with the embedded web view. This change introduces a typed interface for core reader operations—including loading frames, jumping to specific pages, cycling through page turns, updating themes, and detecting tap or long-press interactions—ensuring that Dart code can reliably coordinate with the underlying JavaScript controller. The bridge handles asynchronous JavaScript evaluation and event resolution, providing a stable foundation for the reader's UI and navigation logic.

lib/src/web · high confidence

New domain models for reader settings and theme configuration

The reader feature now uses dedicated domain models to manage user preferences and visual styling. ReaderSettings defines the configuration surface, including zoom, line height, margin controls, link handling behavior, page animation style, custom font support, and volume key page turning. EpubTheme translates these settings into concrete styling parameters (such as color schemes, padding, and font overrides) that are passed to the rendering layer, enabling users to customize the reading experience and theme independently of the app-wide settings.

lib/src/features/reader/domain · high confidence

New platform file picker and backup v2 restore support

This change introduces a new platform abstraction for file access, including a \FilePickerService\ that uses native channels on Android (SAF) and iOS (UIDocumentPicker) to pick EPUBs, fonts, and folders, along with an \ImportCacheManager\ to safely copy these files into the app's internal storage. It also implements the backup restore workflow for the new v2 backup format: the \BackupFolderResolver\ classifies picked files into the expected \lumina-backup\ structure (books, covers, manifests, shelf.json), and the \ImportBackupService\ performs a destructive full-library restore, rejecting any backup that lacks a version stamp or is newer than v2 to prevent data loss.

lib/src/core/platform, lib/src/features/backup, lib/src/features/fonts · high confidence

Reader UI refactored into modular mixins and dedicated components

The reader presentation layer has been restructured to improve maintainability and feature isolation. The monolithic ReaderScreen has been decomposed into a set of focused mixins (SpineNavigation, PageNavigation, Progress, Theme, LinkHandling, ImageViewer, and Footnote) that handle specific concerns, while the UI logic has been extracted into dedicated widgets like ControlPanel and ImageViewer. This change introduces a new image viewer with long-press support and zoom capabilities, a redesigned table of contents drawer with auto-expansion and caching, and a unified control panel that manages page/chapter navigation and style settings. The refactoring also standardizes the reader renderer controller and web view bridge, providing a cleaner interface for page turning, theme updates, and event handling.

lib/src/features/reader/presentation · high confidence

Reader rendering engine refactored into modular managers with CSS polyfills and line-height support

The reader's rendering logic has been restructured into distinct managers (Frame, Pagination, Interaction, Theme, CSS Polyfill, and Resource) to improve maintainability and behavior. This change introduces a CSS polyfill system that ensures consistent styling across iframes by handling background color overrides, font-size and line-height scaling via CSS variables, and column break compatibility. It also adds support for configurable line-height adjustments, allowing users to fine-tune text spacing. The refactoring unifies external URL handling and improves the stability of frame cycling, pagination calculations, and footnote/interaction detection within the reader view.

_web\assets/controller.js/renderer · high confidence

Reader session management and font support enhancements

The reader now maintains a dedicated BookSession object to manage reading state, including pre-calculated Table of Contents lookup maps for faster synchronization and debounced progress saving. Additionally, the WebView handler has been updated to serve user-imported fonts from the app's documents directory, enabling custom typography in EPUBs. The underlying skeleton HTML generation has also been refactored to use a centralized CSS constant and inject configuration via JSON, improving consistency and maintainability.

lib/src/features/reader/data · high confidence

Removal of Android MainActivity entry point

The Android \MainActivity.kt\ file, which previously served as the entry point extending \FlutterActivity\, has been deleted from the application source. This change removes the standard Android activity class that launches the Flutter engine, indicating a significant shift in how the Android application is initialized or structured.

_android/app/src/main/kotlin/com/lumina/epub\reader · high confidence

Repository providers now enforce database initialization

The \bookManifestRepositoryProvider\ and \shelfBookRepositoryProvider\ in the library data layer have been updated to explicitly wait for the Isar database to initialize before creating their respective repositories. If the database is still loading or fails to initialize, these providers will now throw a \StateError\ rather than proceeding with an uninitialized database, ensuring that book manifest and shelf book CRUD operations are only available once the underlying storage is ready.

lib/src/features/library/data/repositories · high confidence

Standardized provider architecture and centralized storage access

The core providers have been refactored to use the modern Riverpod code-generation API, replacing manual provider classes with generated equivalents for improved type safety and consistency. Additionally, the cover file provider now resolves file paths through a centralized \AppStorage\ service instead of calling \path\_provider\ directly, and a new keep-alive provider for \SharedPreferences\ has been introduced to manage persistent storage access.

lib/src/core/providers · high confidence

Upgrade Gradle wrapper to version 9.1.0

The Android build system now uses Gradle 9.1.0 (previously 8.14) via the wrapper configuration. This update ensures the project builds with the latest Gradle release, which may include performance improvements and new features, while the ProGuard rules have been simplified by removing specific Flutter class preservation directives.

android/app, android/gradle · high confidence

iOS minimum deployment target lowered to 12.0

The iOS minimum deployment target has been reduced from 13.0 to 12.0 by removing the explicit MinimumOSVersion setting from the AppFrameworkInfo.plist file. This change allows the Flutter application to be installed and run on devices running iOS 12 or later, expanding compatibility to older hardware that was previously excluded by the stricter 13.0 requirement.

ios/Flutter · high confidence

Test coverage

Expanded test coverage for external sources, import progress, and EPUB parsing

Added comprehensive tests for the new WebDAV external source browsing feature, including end-to-end navigation of nested folders and unit tests for the WebDAV client's URL resolution and XML parsing. Introduced widget and unit tests for the import progress dialog to verify byte-size formatting and percentage display during file transfers. Updated existing import tests to align with repository interface changes, replacing soft-delete and existence checks with direct deletion and existence methods. Added tests for EPUB 3 NAV document parsing, ensuring hierarchical table-of-contents structures are correctly extracted and that NAV takes precedence over legacy NCX formats.

test · high confidence

Dependencies

Introduces Rust FFI backend and upgrades core dependencies

This update adds a new Rust-based native backend for the application, integrating the \flutter\_rust\_bridge\ library and the \lumina\_rust\ plugin to handle native operations. It also upgrades several core dependencies, including \flutter\_riverpod\ to version 3.0.3, \go\_router\ to 18.0.1, and \isar\_community\ to 3.3.2, while adding new packages for image compression (\flutter\_image\_compress\), file sharing (\share\_plus\), and storage access (\saf\_stream\, \saf\_util\).

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 49 → 65 (+16.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 72 → 73 (+0.7)
  • Architecture 98 → 92 (-6.0)
  • Maturity 59 → 72 (+12.6)
  • Readiness 37 → 58 (+21.2)
  • Security 64 → 70 (+5.6)
  • Domain Modelling 53 → 70 (+16.7)

Resolved (36)

  • Change coupling: image_viewer.dart ↔ reader_webview.dart (lib/src/features/reader/presentation/image_viewer.dart)
  • Change coupling: reader_scripts.dart ↔ image_viewer.dart (lib/src/features/reader/data/reader_scripts.dart)
  • Change coupling: reader_scripts.dart ↔ toc_drawer.dart (lib/src/features/reader/data/reader_scripts.dart)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 16 more

New (113)

  • BackupFolderResolver.resolve (cognitive 19) (lib/src/features/backup/data/services/backup_folder_resolver.dart)
  • CargoBuildOptions.parse (cognitive 17) (rust_builder/cargokit/build_tool/lib/src/options.dart)
  • CargokitCrateOptions.parse (cognitive 21) (rust_builder/cargokit/build_tool/lib/src/options.dart)
  • Change coupling: reader_scripts.dart ↔ reader_renderer.dart (lib/src/features/reader/data/reader_scripts.dart)
  • ClassTooLong: EpubZipParser (lib/src/features/library/data/parsers/epub_zip_parser.dart)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: written for insiders (rust_builder/README.md)
  • Duplicated block (10 lines × 2) (lib/src/core/widgets/settings_section_title.dart)
  • Duplicated block (10 lines × 2) (lib/src/features/library/presentation/shared_epub_handler.dart)
  • Duplicated block (10 lines × 3) (lib/src/features/backup/presentation/widgets/restore_progress_dialog.dart)
  • Duplicated block (10–11 lines × 2) (lib/src/features/reader/domain/epub_theme.dart)
  • Duplicated block (11 lines × 2) (lib/src/core/widgets/book_cover.dart)
  • Duplicated block (11 lines × 2) (lib/src/features/reader/presentation/widgets/reader_style_bottom_sheet.dart)
  • Duplicated block (11–12 lines × 2) (lib/src/features/reader/data/epub_webview_handler.dart)
  • Duplicated block (12 lines × 2) (lib/src/features/external_sources/presentation/widgets/external_sources_section.dart)
  • Duplicated block (13 lines × 2) (lib/src/features/reader/presentation/widgets/reader_line_height_slider.dart)
  • Duplicated block (14 lines × 3) (lib/src/features/library/presentation/mixins/library_actions_mixin.dart)
  • Duplicated block (18 lines × 2) (lib/src/features/library/presentation/shared_epub_handler.dart)
  • Duplicated block (19 lines × 3) (lib/src/features/reader/presentation/reader_renderer.dart)
  • Duplicated block (20 lines × 2) (lib/src/features/reader/presentation/widgets/reader_line_height_slider.dart)
  • …and 93 more

Changes since last survey

  • 9 commits — 7 feature/other, 2 fixes

By area

  • lib/src — 7 commits
  • (root) — 2 commits

Notable commits

  • fix: fix: Fix bug about line height
  • fix: fix: Fix compile error and line height problems
  • change: feat(reader): 添加阅读器行间距调整功能 (#74)
  • change: feat: add WebDAV external sources with folder browsing and import (#78)
  • change: refine: Update backup format to v2 and refuse incompatible backups on restore (#77)
  • change: refine: add docs and update deps (#76)
  • change: refine: migrate to AGP 9 and Gradle 9.1.0
  • change: refine: polish library sort menu, add button, TOC taps and source tiles (#79)
  • change: update: Bump version to 0.2.4

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

MilkFeng/lumina was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit d3d9078473bff9030778a0806a5e97da0f8077ce — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.