# fazza-abiyyu/yue-browser architecture

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

- Interactive diagram: https://gitdiagram.com/fazza-abiyyu/yue-browser
- Repository: https://github.com/fazza-abiyyu/yue-browser

## Overview

Yue Browser is an Android browser built around Compose and Android System WebView. Its main workflow is user navigation through the browser UI, managed tab/session state, and page rendering, with privacy and ad blocking applied during browsing. Separate branches cover remotely synchronized ad-block rules, browser data, downloads, scripts, and media. The tree and README establish these product areas, but most UI-to-domain wiring was not sampled; uncertain call edges are omitted.

Main entry points: [`app/src/main/java/com/yue/browser/data/engine/SystemWebViewEngine.kt`](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/SystemWebViewEngine.kt) (System WebView), [`app/src/main/java/com/yue/browser/presentation/BrowserViewModel.kt`](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/BrowserViewModel.kt) (Browser state), [`app/src/main/java/com/yue/browser/data/adblock/AdBlockEngine.kt`](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/AdBlockEngine.kt) (Ad-block engine), [`app/src/main/java/com/yue/browser/data/adblock/sync/FilterSyncEngine.kt`](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/sync/FilterSyncEngine.kt) (Rule synchronization)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Browser interface"]
  node_main_ui["Browser screen"]
  node_viewmodel["Browser state"]
  node_tabs_ui["Tab switcher"]
end

subgraph group_runtime["Browsing runtime"]
  node_webview["System WebView"]
  node_web_client["WebView client"]
  node_browser_session["Browser session"]
  node_browser_engine["Engine contract<br/>[BrowserEngine.kt]"]
end

subgraph group_privacy["Privacy and blocking"]
  node_ad_manager["Ad-block manager<br/>[AdBlockManager.kt]"]
  node_ad_engine["Ad-block engine<br/>[AdBlockEngine.kt]"]
  node_strategy["Strategy pipeline"]
  node_decisions["Decision engine<br/>[DecisionEngine.kt]"]
  node_cosmetic["Cosmetic filters"]
  node_sync["Rule synchronization"]
  node_strategy_api["Strategy API<br/>[StrategyApi.kt]"]
  node_strategy_store["Policy and rules<br/>[StrategyStore.kt]"]
end

subgraph group_data["Browser data"]
  node_tab_repository["Tab repository"]
  node_tab_storage["Tab state files"]
  node_settings["Settings repository"]
end

subgraph group_features["Browser features"]
  node_downloads["Download manager<br/>[DownloadsScreen.kt]"]
  node_download_data["Download repository"]
  node_scripts["User scripts"]
  node_script_data["Script repository"]
  node_media["Media playback"]
  node_youtube["YouTube ad handling<br/>[YouTubeService.kt]"]
  node_bookmarks["Bookmarks screen<br/>[BookmarksScreen.kt]"]
  node_history["History screen<br/>[HistoryScreen.kt]"]
  node_offline["Offline pages"]
end

node_user(("Browser user"))
node_strategy_center(("Strategy Center"))

node_user -->|"uses"| node_main_ui
node_user -->|"switches tabs"| node_tabs_ui
node_main_ui -->|"drives state"| node_viewmodel
node_viewmodel -->|"creates sessions"| node_browser_engine
node_browser_engine -->|"implemented by"| node_webview
node_webview -->|"creates"| node_browser_session
node_webview -->|"handles navigation"| node_web_client
node_web_client -->|"checks requests"| node_ad_manager
node_ad_manager -->|"delegates blocking"| node_ad_engine
node_ad_engine -->|"initializes sync"| node_sync
node_sync -->|"fetches policy and rules"| node_strategy_api
node_sync -->|"loads and saves policy"| node_strategy_store
node_strategy_api -.->|"requests rules"| node_strategy_center
node_strategy -->|"evaluates signals"| node_decisions
node_ad_engine -->|"evaluates requests"| node_strategy
node_ad_engine -->|"provides cosmetic filtering"| node_cosmetic
node_viewmodel -->|"manages tabs"| node_tab_repository
node_tab_repository -->|"persists tab state"| node_tab_storage
node_viewmodel -->|"uses settings"| node_settings
node_user -->|"manages downloads"| node_downloads
node_downloads -->|"uses repository"| node_download_data
node_webview -->|"runs page scripts"| node_scripts
node_scripts -->|"uses scripts"| node_script_data
node_webview -->|"supports playback"| node_media
node_webview -->|"applies site ad handling"| node_youtube
node_user -->|"opens library"| node_bookmarks
node_user -->|"opens library"| node_history
node_user -->|"opens saved pages"| node_offline

click node_main_ui "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/MainBrowserScreen.kt"
click node_viewmodel "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/BrowserViewModel.kt"
click node_tabs_ui "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/tabswitcher/TabSwitcherScreen.kt"
click node_webview "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/SystemWebViewEngine.kt"
click node_web_client "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/SystemWebViewClient.kt"
click node_browser_session "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/SystemWebViewSession.kt"
click node_browser_engine "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/domain/engine/BrowserEngine.kt"
click node_ad_manager "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/AdBlockManager.kt"
click node_ad_engine "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/AdBlockEngine.kt"
click node_strategy "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/pipeline/StrategyPipeline.kt"
click node_decisions "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/pipeline/DecisionEngine.kt"
click node_cosmetic "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/engine/CosmeticFilterEngine.kt"
click node_sync "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/sync/FilterSyncEngine.kt"
click node_strategy_api "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/remote/StrategyApi.kt"
click node_strategy_store "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/config/StrategyStore.kt"
click node_tab_repository "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/TabRepositoryImpl.kt"
click node_tab_storage "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/TabStorageHelper.kt"
click node_settings "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/SettingsRepositoryImpl.kt"
click node_downloads "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/downloads/DownloadsScreen.kt"
click node_download_data "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/DownloadRepositoryImpl.kt"
click node_scripts "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/UserScriptEngine.kt"
click node_script_data "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/UserScriptRepositoryImpl.kt"
click node_media "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/MediaSessionManager.kt"
click node_youtube "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/service/YouTubeService.kt"
click node_bookmarks "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/BookmarksScreen.kt"
click node_history "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/HistoryScreen.kt"
click node_offline "https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/OfflinePagesScreen.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_main_ui,node_viewmodel,node_tabs_ui,node_user toneBlue
class node_webview,node_web_client,node_browser_session,node_browser_engine toneAmber
class node_ad_manager,node_ad_engine,node_strategy,node_decisions,node_cosmetic,node_sync,node_strategy_api,node_strategy_store toneMint
class node_tab_repository,node_tab_storage,node_settings toneRose
class node_downloads,node_download_data,node_scripts,node_script_data,node_media,node_youtube,node_bookmarks,node_history,node_offline,node_strategy_center toneIndigo
```

## Components

### Browser interface

- [Browser screen](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/MainBrowserScreen.kt): `app/src/main/java/com/yue/browser/presentation/ui/MainBrowserScreen.kt`
- [Browser state](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/BrowserViewModel.kt): `app/src/main/java/com/yue/browser/presentation/BrowserViewModel.kt`
- [Tab switcher](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/tabswitcher/TabSwitcherScreen.kt): `app/src/main/java/com/yue/browser/presentation/ui/tabswitcher/TabSwitcherScreen.kt`

### Browsing runtime

- [System WebView](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/SystemWebViewEngine.kt): `app/src/main/java/com/yue/browser/data/engine/SystemWebViewEngine.kt`
- [WebView client](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/SystemWebViewClient.kt): `app/src/main/java/com/yue/browser/data/engine/SystemWebViewClient.kt`
- [Browser session](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/SystemWebViewSession.kt): `app/src/main/java/com/yue/browser/data/engine/SystemWebViewSession.kt`
- [Engine contract](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/domain/engine/BrowserEngine.kt): `app/src/main/java/com/yue/browser/domain/engine/BrowserEngine.kt`

### Privacy and blocking

- [Ad-block manager](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/AdBlockManager.kt): `app/src/main/java/com/yue/browser/data/engine/AdBlockManager.kt`
- [Ad-block engine](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/AdBlockEngine.kt): `app/src/main/java/com/yue/browser/data/adblock/AdBlockEngine.kt`
- [Strategy pipeline](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/pipeline/StrategyPipeline.kt): `app/src/main/java/com/yue/browser/data/adblock/pipeline/StrategyPipeline.kt`
- [Decision engine](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/pipeline/DecisionEngine.kt): `app/src/main/java/com/yue/browser/data/adblock/pipeline/DecisionEngine.kt`
- [Cosmetic filters](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/engine/CosmeticFilterEngine.kt): `app/src/main/java/com/yue/browser/data/adblock/engine/CosmeticFilterEngine.kt`
- [Rule synchronization](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/sync/FilterSyncEngine.kt): `app/src/main/java/com/yue/browser/data/adblock/sync/FilterSyncEngine.kt`
- [Strategy API](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/remote/StrategyApi.kt): `app/src/main/java/com/yue/browser/data/adblock/remote/StrategyApi.kt`
- [Policy and rules](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/config/StrategyStore.kt): `app/src/main/java/com/yue/browser/data/adblock/config/StrategyStore.kt`

### Browser data

- [Tab repository](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/TabRepositoryImpl.kt): `app/src/main/java/com/yue/browser/data/repository/TabRepositoryImpl.kt`
- [Tab state files](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/TabStorageHelper.kt): `app/src/main/java/com/yue/browser/data/repository/TabStorageHelper.kt`
- [Settings repository](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/SettingsRepositoryImpl.kt): `app/src/main/java/com/yue/browser/data/repository/SettingsRepositoryImpl.kt`

### Browser features

- [Download manager](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/downloads/DownloadsScreen.kt): `app/src/main/java/com/yue/browser/presentation/ui/downloads/DownloadsScreen.kt`
- [Download repository](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/DownloadRepositoryImpl.kt): `app/src/main/java/com/yue/browser/data/repository/DownloadRepositoryImpl.kt`
- [User scripts](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/UserScriptEngine.kt): `app/src/main/java/com/yue/browser/data/engine/UserScriptEngine.kt`
- [Script repository](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/repository/UserScriptRepositoryImpl.kt): `app/src/main/java/com/yue/browser/data/repository/UserScriptRepositoryImpl.kt`
- [Media playback](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/engine/MediaSessionManager.kt): `app/src/main/java/com/yue/browser/data/engine/MediaSessionManager.kt`
- [YouTube ad handling](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/data/adblock/service/YouTubeService.kt): `app/src/main/java/com/yue/browser/data/adblock/service/YouTubeService.kt`
- [Bookmarks screen](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/BookmarksScreen.kt): `app/src/main/java/com/yue/browser/presentation/ui/BookmarksScreen.kt`
- [History screen](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/HistoryScreen.kt): `app/src/main/java/com/yue/browser/presentation/ui/HistoryScreen.kt`
- [Offline pages](https://github.com/fazza-abiyyu/yue-browser/blob/main/app/src/main/java/com/yue/browser/presentation/ui/OfflinePagesScreen.kt): `app/src/main/java/com/yue/browser/presentation/ui/OfflinePagesScreen.kt`

### Other components

- **Browser user**
- **Strategy Center**

## Connections

- Browser user → Browser screen: uses
- Browser user → Tab switcher: switches tabs
- Browser screen → Browser state: drives state
- Browser state → Engine contract: creates sessions
- Engine contract → System WebView: implemented by
- System WebView → Browser session: creates
- System WebView → WebView client: handles navigation
- WebView client → Ad-block manager: checks requests
- Ad-block manager → Ad-block engine: delegates blocking
- Ad-block engine → Rule synchronization: initializes sync
- Rule synchronization → Strategy API: fetches policy and rules
- Rule synchronization → Policy and rules: loads and saves policy
- Strategy API → Strategy Center: requests rules
- Strategy pipeline → Decision engine: evaluates signals
- Ad-block engine → Strategy pipeline: evaluates requests
- Ad-block engine → Cosmetic filters: provides cosmetic filtering
- Browser state → Tab repository: manages tabs
- Tab repository → Tab state files: persists tab state
- Browser state → Settings repository: uses settings
- Browser user → Download manager: manages downloads
- Download manager → Download repository: uses repository
- System WebView → User scripts: runs page scripts
- User scripts → Script repository: uses scripts
- System WebView → Media playback: supports playback
- System WebView → YouTube ad handling: applies site ad handling
- Browser user → Bookmarks screen: opens library
- Browser user → History screen: opens library
- Browser user → Offline pages: opens saved pages
