# mrfeng007/legado architecture

> Architecture diagram of the GitHub repository mrfeng007/legado, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mrfeng007/legado
- Repository: https://github.com/mrfeng007/legado

## Overview

Legado is an Android novel-reading app: users discover or import sources and books, retrieve chapters, read or listen, and manage their library. The README also documents RSS subscriptions, local TXT/EPUB reading, content replacement, and Web/Content Provider APIs, so these appear as separate capabilities. Source excerpts confirm selected API, cache, cookie, export, and TTS behavior; other links are limited to capabilities and paths established by the tree and README.

Main entry points: [`app/src/main/java/io/legado/app/ui`](https://github.com/mrfeng007/legado/tree/master/app/src/main/java/io/legado/app/ui) (Library and reader UI), [`app/src/main/java/io/legado/app/data/AppDatabase.kt`](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/data/AppDatabase.kt) (App database), [`app/src/main/java/io/legado/app/api/controller/BookController.kt`](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/api/controller/BookController.kt) (Book API controller), [`app/src/main/java/io/legado/app/model/webBook/WebBook.kt`](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/webBook/WebBook.kt) (Online book workflow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_library["Library and import"]
  node_book_ui["Library and reader UI"]
  node_association["Import and association"]
  node_book_data["Book models<br/>[Book.kt]"]
end

subgraph group_content["Sources and content"]
  node_local_parse["Local book parsing"]
  node_webbook["Online book workflow<br/>[WebBook.kt]"]
  node_rule_engine["Rule analysis<br/>[RuleAnalyzer.kt]"]
  node_http["HTTP and cookies<br/>[HttpHelper.kt]"]
  node_rss["RSS subscriptions<br/>[Rss.kt]"]
  node_replace["Content replacement<br/>[ReplaceAnalyzer.kt]"]
  node_content_processor["Content processing"]
end

subgraph group_reading["Reading and playback"]
  node_reading_model["Reading state<br/>[ReadBook.kt]"]
  node_read_aloud["Read-aloud service"]
  node_audio["Audio playback"]
  node_export["Book export"]
  node_tts_config["TTS engine config"]
end

subgraph group_platform["Persistence and APIs"]
  node_database[("App database<br/>[AppDatabase.kt]")]
  node_cache["Cache manager<br/>[CacheManager.kt]"]
  node_api["Web and provider APIs<br/>[ReaderProvider.kt]"]
  node_book_controller["Book API controller<br/>[BookController.kt]"]
end

node_reader(("Reader user"))
node_network(("Book websites"))
node_web_client(("Web client"))
node_android_tts(("Android TTS"))

node_reader -->|"browses and reads"| node_book_ui
node_reader -->|"imports sources"| node_association
node_association -->|"stores imports"| node_database
node_book_ui -->|"searches and opens"| node_webbook
node_webbook -->|"applies source rules"| node_rule_engine
node_webbook -->|"requests pages"| node_http
node_http -->|"fetches content"| node_network
node_webbook -->|"stores book data"| node_database
node_book_ui -->|"opens local books"| node_local_parse
node_local_parse -->|"produces book content"| node_book_data
node_book_ui -->|"browses subscriptions"| node_rss
node_rss -->|"parses by rules"| node_rule_engine
node_book_ui -->|"prepares chapter"| node_content_processor
node_content_processor -->|"applies replacements"| node_replace
node_book_ui -->|"tracks reading"| node_reading_model
node_reading_model -->|"persists progress"| node_database
node_book_ui -->|"starts narration"| node_read_aloud
node_read_aloud -->|"advances chapters"| node_reading_model
node_tts_config -->|"reads and saves engines"| node_database
node_tts_config -.->|"lists system engines"| node_android_tts
node_book_ui -->|"controls playback"| node_audio
node_audio -->|"loads remote audio"| node_http
node_book_ui -->|"exports books"| node_export
node_export -->|"reads book chapters"| node_database
node_api -->|"dispatches book calls"| node_book_controller
node_web_client -.->|"calls API"| node_api
node_book_controller -->|"reads and writes books"| node_database
node_book_controller -->|"retrieves missing content"| node_webbook
node_book_controller -->|"processes chapter text"| node_content_processor
node_book_controller -->|"stores web config"| node_cache
node_cache -->|"persists cache entries"| node_database
node_http -->|"persists cookies"| node_database

click node_book_ui "https://github.com/mrfeng007/legado/tree/master/app/src/main/java/io/legado/app/ui"
click node_association "https://github.com/mrfeng007/legado/tree/master/app/src/main/java/io/legado/app/ui/association"
click node_book_data "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/data/entities/Book.kt"
click node_local_parse "https://github.com/mrfeng007/legado/tree/master/app/src/main/java/io/legado/app/model/localBook"
click node_webbook "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/webBook/WebBook.kt"
click node_rule_engine "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/analyzeRule/RuleAnalyzer.kt"
click node_http "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/http/HttpHelper.kt"
click node_rss "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/rss/Rss.kt"
click node_replace "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/ReplaceAnalyzer.kt"
click node_content_processor "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt"
click node_reading_model "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/ReadBook.kt"
click node_read_aloud "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt"
click node_audio "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/service/AudioPlayService.kt"
click node_export "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/service/ExportBookService.kt"
click node_database "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/data/AppDatabase.kt"
click node_cache "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/CacheManager.kt"
click node_api "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/api/ReaderProvider.kt"
click node_book_controller "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/api/controller/BookController.kt"
click node_tts_config "https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineViewModel.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_book_ui,node_association,node_book_data,node_reader,node_web_client toneBlue
class node_local_parse,node_webbook,node_rule_engine,node_http,node_rss,node_replace,node_content_processor toneAmber
class node_reading_model,node_read_aloud,node_audio,node_export,node_tts_config toneMint
class node_database,node_cache,node_api,node_book_controller toneRose
class node_network,node_android_tts toneIndigo
```

## Components

### Library and import

- [Library and reader UI](https://github.com/mrfeng007/legado/tree/master/app/src/main/java/io/legado/app/ui): `app/src/main/java/io/legado/app/ui`
- [Import and association](https://github.com/mrfeng007/legado/tree/master/app/src/main/java/io/legado/app/ui/association): `app/src/main/java/io/legado/app/ui/association`
- [Book models](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/data/entities/Book.kt): `app/src/main/java/io/legado/app/data/entities/Book.kt`

### Sources and content

- [Local book parsing](https://github.com/mrfeng007/legado/tree/master/app/src/main/java/io/legado/app/model/localBook): `app/src/main/java/io/legado/app/model/localBook`
- [Online book workflow](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/webBook/WebBook.kt): `app/src/main/java/io/legado/app/model/webBook/WebBook.kt`
- [Rule analysis](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/analyzeRule/RuleAnalyzer.kt): `app/src/main/java/io/legado/app/model/analyzeRule/RuleAnalyzer.kt`
- [HTTP and cookies](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/http/HttpHelper.kt): `app/src/main/java/io/legado/app/help/http/HttpHelper.kt`
- [RSS subscriptions](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/rss/Rss.kt): `app/src/main/java/io/legado/app/model/rss/Rss.kt`
- [Content replacement](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/ReplaceAnalyzer.kt): `app/src/main/java/io/legado/app/help/ReplaceAnalyzer.kt`
- [Content processing](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt): `app/src/main/java/io/legado/app/help/book/ContentProcessor.kt`

### Reading and playback

- [Reading state](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/model/ReadBook.kt): `app/src/main/java/io/legado/app/model/ReadBook.kt`
- [Read-aloud service](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt): `app/src/main/java/io/legado/app/service/BaseReadAloudService.kt`
- [Audio playback](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/service/AudioPlayService.kt): `app/src/main/java/io/legado/app/service/AudioPlayService.kt`
- [Book export](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/service/ExportBookService.kt): `app/src/main/java/io/legado/app/service/ExportBookService.kt`
- [TTS engine config](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineViewModel.kt): `app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineViewModel.kt`

### Persistence and APIs

- [App database](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/data/AppDatabase.kt): `app/src/main/java/io/legado/app/data/AppDatabase.kt`
- [Cache manager](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/help/CacheManager.kt): `app/src/main/java/io/legado/app/help/CacheManager.kt`
- [Web and provider APIs](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/api/ReaderProvider.kt): `app/src/main/java/io/legado/app/api/ReaderProvider.kt`
- [Book API controller](https://github.com/mrfeng007/legado/blob/master/app/src/main/java/io/legado/app/api/controller/BookController.kt): `app/src/main/java/io/legado/app/api/controller/BookController.kt`

### Other components

- **Reader user**
- **Book websites**
- **Web client**
- **Android TTS**

## Connections

- Reader user → Library and reader UI: browses and reads
- Reader user → Import and association: imports sources
- Import and association → App database: stores imports
- Library and reader UI → Online book workflow: searches and opens
- Online book workflow → Rule analysis: applies source rules
- Online book workflow → HTTP and cookies: requests pages
- HTTP and cookies → Book websites: fetches content
- Online book workflow → App database: stores book data
- Library and reader UI → Local book parsing: opens local books
- Local book parsing → Book models: produces book content
- Library and reader UI → RSS subscriptions: browses subscriptions
- RSS subscriptions → Rule analysis: parses by rules
- Library and reader UI → Content processing: prepares chapter
- Content processing → Content replacement: applies replacements
- Library and reader UI → Reading state: tracks reading
- Reading state → App database: persists progress
- Library and reader UI → Read-aloud service: starts narration
- Read-aloud service → Reading state: advances chapters
- TTS engine config → App database: reads and saves engines
- TTS engine config → Android TTS: lists system engines
- Library and reader UI → Audio playback: controls playback
- Audio playback → HTTP and cookies: loads remote audio
- Library and reader UI → Book export: exports books
- Book export → App database: reads book chapters
- Web and provider APIs → Book API controller: dispatches book calls
- Web client → Web and provider APIs: calls API
- Book API controller → App database: reads and writes books
- Book API controller → Online book workflow: retrieves missing content
- Book API controller → Content processing: processes chapter text
- Book API controller → Cache manager: stores web config
- Cache manager → App database: persists cache entries
- HTTP and cookies → App database: persists cookies
