# yang991178/fluent-reader architecture

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

- Interactive diagram: https://gitdiagram.com/yang991178/fluent-reader
- Repository: https://github.com/yang991178/fluent-reader

## Overview

Fluent Reader is an Electron desktop RSS reader. Its main workflow is to configure local or remote feeds, fetch and synchronize articles, persist them, then search, organize, and read them through several UI layouts. The README also documents OPML and full-data backup/restore, automatic filtering rules, background fetching, and notifications; these are represented at the closest supported source paths. Source excerpts are limited, so uncertain internal call wiring is omitted.

Main entry points: [`src/components/root.tsx`](https://github.com/yang991178/fluent-reader/blob/master/src/components/root.tsx) (Reader shell), [`src/index.tsx`](https://github.com/yang991178/fluent-reader/blob/master/src/index.tsx) (App bootstrap), [`src/scripts/models/service.ts`](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/service.ts) (Sync orchestration), [`src/scripts/models/item.ts`](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/item.ts) (Article models)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop shell"]
  node_electron["Electron lifecycle<br/>[electron.ts]"]
  node_preload["Preload bridges<br/>[preload.ts]"]
  node_mainwindow["Window management<br/>[window.ts]"]
  node_mainsettings["Desktop settings<br/>[settings.ts]"]
  node_background["Background updates<br/>[update-scripts.ts]"]
end

subgraph group_interface["Reader interface"]
  node_app["App bootstrap<br/>[index.tsx]"]
  node_root["Reader shell<br/>[root.tsx]"]
  node_navigation["Navigation and menus<br/>[nav.tsx]"]
  node_feedviews["Feed and card views<br/>[feed.tsx]"]
  node_articleview["Article reading<br/>[article.tsx]"]
  node_search["Article search<br/>[article-search.tsx]"]
  node_settingsui["Settings UI<br/>[settings.tsx]"]
  node_serviceui["Service setup<br/>[service.tsx]"]
end

subgraph group_domain["Feed and article domain"]
  node_appmodel["App preferences<br/>[app.ts]"]
  node_feeds["Feed and source models<br/>[feed.ts]"]
  node_items["Article models<br/>[item.ts]"]
  node_groups["Subscription groups<br/>[group.ts]"]
  node_rules["Automatic rules<br/>[rule.ts]"]
  node_pages["Reading and filtering<br/>[page.ts]"]
end

subgraph group_persistence["State and persistence"]
  node_store["Redux state<br/>[reducer.ts]"]
  node_db[("Article database<br/>[db.ts]")]
end

subgraph group_integrations["Sync integrations"]
  node_service["Sync orchestration<br/>[service.ts]"]
  node_adapters["Service adapters"]
  node_externalrss(("RSS and sync services"))
end

node_reader(("Reader user"))

node_reader -->|"opens app"| node_app
node_app -->|"renders"| node_root
node_app -->|"initializes"| node_store
node_root -->|"selects state"| node_store
node_root -->|"renders"| node_navigation
node_root -->|"renders"| node_feedviews
node_root -->|"renders"| node_articleview
node_root -->|"renders"| node_search
node_root -->|"renders"| node_settingsui
node_settingsui -->|"opens setup"| node_serviceui
node_serviceui -->|"dispatches actions"| node_service
node_search -->|"dispatches search"| node_pages
node_navigation -->|"dispatches view actions"| node_pages
node_feedviews -->|"dispatches article actions"| node_items
node_articleview -->|"requests article view"| node_pages
node_app -->|"dispatches initialization"| node_appmodel
node_appmodel -->|"updates state"| node_store
node_feeds -->|"reads and writes"| node_db
node_items -->|"reads and writes"| node_db
node_groups -->|"persists subscriptions"| node_db
node_rules -->|"persists rules"| node_db
node_pages -->|"updates reading state"| node_store
node_service -->|"selects adapter"| node_adapters
node_adapters -->|"syncs with"| node_externalrss
node_service -->|"dispatches sync data"| node_feeds
node_service -->|"dispatches sync data"| node_items
node_background -->|"fetches feeds"| node_feeds
node_background -->|"updates articles"| node_items
node_electron -->|"manages window"| node_mainwindow
node_electron -->|"registers settings"| node_mainsettings
node_preload -->|"bridges settings IPC"| node_mainsettings
node_mainsettings -->|"serves settings IPC"| node_preload

click node_electron "https://github.com/yang991178/fluent-reader/blob/master/src/electron.ts"
click node_preload "https://github.com/yang991178/fluent-reader/blob/master/src/preload.ts"
click node_mainwindow "https://github.com/yang991178/fluent-reader/blob/master/src/main/window.ts"
click node_mainsettings "https://github.com/yang991178/fluent-reader/blob/master/src/main/settings.ts"
click node_app "https://github.com/yang991178/fluent-reader/blob/master/src/index.tsx"
click node_root "https://github.com/yang991178/fluent-reader/blob/master/src/components/root.tsx"
click node_navigation "https://github.com/yang991178/fluent-reader/blob/master/src/components/nav.tsx"
click node_feedviews "https://github.com/yang991178/fluent-reader/blob/master/src/components/feeds/feed.tsx"
click node_articleview "https://github.com/yang991178/fluent-reader/blob/master/src/components/article.tsx"
click node_search "https://github.com/yang991178/fluent-reader/blob/master/src/components/utils/article-search.tsx"
click node_settingsui "https://github.com/yang991178/fluent-reader/blob/master/src/components/settings.tsx"
click node_serviceui "https://github.com/yang991178/fluent-reader/blob/master/src/components/settings/service.tsx"
click node_store "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/reducer.ts"
click node_db "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/db.ts"
click node_appmodel "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/app.ts"
click node_feeds "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/feed.ts"
click node_items "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/item.ts"
click node_groups "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/group.ts"
click node_rules "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/rule.ts"
click node_pages "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/page.ts"
click node_service "https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/service.ts"
click node_adapters "https://github.com/yang991178/fluent-reader/tree/master/src/scripts/models/services"
click node_background "https://github.com/yang991178/fluent-reader/blob/master/src/main/update-scripts.ts"

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_electron,node_preload,node_mainwindow,node_mainsettings,node_background,node_reader toneBlue
class node_app,node_root,node_navigation,node_feedviews,node_articleview,node_search,node_settingsui,node_serviceui toneAmber
class node_appmodel,node_feeds,node_items,node_groups,node_rules,node_pages toneMint
class node_store,node_db toneRose
class node_service,node_adapters,node_externalrss toneIndigo
```

## Components

### Desktop shell

- [Electron lifecycle](https://github.com/yang991178/fluent-reader/blob/master/src/electron.ts): `src/electron.ts`
- [Preload bridges](https://github.com/yang991178/fluent-reader/blob/master/src/preload.ts): `src/preload.ts`
- [Window management](https://github.com/yang991178/fluent-reader/blob/master/src/main/window.ts): `src/main/window.ts`
- [Desktop settings](https://github.com/yang991178/fluent-reader/blob/master/src/main/settings.ts): `src/main/settings.ts`
- [Background updates](https://github.com/yang991178/fluent-reader/blob/master/src/main/update-scripts.ts): `src/main/update-scripts.ts`

### Reader interface

- [App bootstrap](https://github.com/yang991178/fluent-reader/blob/master/src/index.tsx): `src/index.tsx`
- [Reader shell](https://github.com/yang991178/fluent-reader/blob/master/src/components/root.tsx): `src/components/root.tsx`
- [Navigation and menus](https://github.com/yang991178/fluent-reader/blob/master/src/components/nav.tsx): `src/components/nav.tsx`
- [Feed and card views](https://github.com/yang991178/fluent-reader/blob/master/src/components/feeds/feed.tsx): `src/components/feeds/feed.tsx`
- [Article reading](https://github.com/yang991178/fluent-reader/blob/master/src/components/article.tsx): `src/components/article.tsx`
- [Article search](https://github.com/yang991178/fluent-reader/blob/master/src/components/utils/article-search.tsx): `src/components/utils/article-search.tsx`
- [Settings UI](https://github.com/yang991178/fluent-reader/blob/master/src/components/settings.tsx): `src/components/settings.tsx`
- [Service setup](https://github.com/yang991178/fluent-reader/blob/master/src/components/settings/service.tsx): `src/components/settings/service.tsx`

### Feed and article domain

- [App preferences](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/app.ts): `src/scripts/models/app.ts`
- [Feed and source models](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/feed.ts): `src/scripts/models/feed.ts`
- [Article models](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/item.ts): `src/scripts/models/item.ts`
- [Subscription groups](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/group.ts): `src/scripts/models/group.ts`
- [Automatic rules](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/rule.ts): `src/scripts/models/rule.ts`
- [Reading and filtering](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/page.ts): `src/scripts/models/page.ts`

### State and persistence

- [Redux state](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/reducer.ts): `src/scripts/reducer.ts`
- [Article database](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/db.ts): `src/scripts/db.ts`

### Sync integrations

- [Sync orchestration](https://github.com/yang991178/fluent-reader/blob/master/src/scripts/models/service.ts): `src/scripts/models/service.ts`
- [Service adapters](https://github.com/yang991178/fluent-reader/tree/master/src/scripts/models/services): `src/scripts/models/services`
- **RSS and sync services**

### Other components

- **Reader user**

## Connections

- Reader user → App bootstrap: opens app
- App bootstrap → Reader shell: renders
- App bootstrap → Redux state: initializes
- Reader shell → Redux state: selects state
- Reader shell → Navigation and menus: renders
- Reader shell → Feed and card views: renders
- Reader shell → Article reading: renders
- Reader shell → Article search: renders
- Reader shell → Settings UI: renders
- Settings UI → Service setup: opens setup
- Service setup → Sync orchestration: dispatches actions
- Article search → Reading and filtering: dispatches search
- Navigation and menus → Reading and filtering: dispatches view actions
- Feed and card views → Article models: dispatches article actions
- Article reading → Reading and filtering: requests article view
- App bootstrap → App preferences: dispatches initialization
- App preferences → Redux state: updates state
- Feed and source models → Article database: reads and writes
- Article models → Article database: reads and writes
- Subscription groups → Article database: persists subscriptions
- Automatic rules → Article database: persists rules
- Reading and filtering → Redux state: updates reading state
- Sync orchestration → Service adapters: selects adapter
- Service adapters → RSS and sync services: syncs with
- Sync orchestration → Feed and source models: dispatches sync data
- Sync orchestration → Article models: dispatches sync data
- Background updates → Feed and source models: fetches feeds
- Background updates → Article models: updates articles
- Electron lifecycle → Window management: manages window
- Electron lifecycle → Desktop settings: registers settings
- Preload bridges → Desktop settings: bridges settings IPC
- Desktop settings → Preload bridges: serves settings IPC
