# akborana3/axbrowser architecture

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

- Interactive diagram: https://gitdiagram.com/akborana3/axbrowser
- Repository: https://github.com/akborana3/axbrowser

## Overview

AxBrowser is an Android browser whose main workflow is navigating pages in a tabbed WebView, with privacy controls and media detection feeding into downloads and playback. Around that flow it provides browsing records, file management, an AI-assisted page agent, and pentest utilities. The graph includes data and integration layers where paths or excerpts support them; several feature-to-app connections are omitted because their wiring was not sampled.

Main entry points: [`feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/BrowserScreen.kt`](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/BrowserScreen.kt) (Browser UI), [`feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/viewmodel/DownloadViewModel.kt`](https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/viewmodel/DownloadViewModel.kt) (Download control), [`feature/feature-browser/src/main/kotlin/com/akay/feature/browser/webview/AxWebViewClient.kt`](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/webview/AxWebViewClient.kt) (WebView clients), [`feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/AgentEngine.kt`](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/AgentEngine.kt) (Page agent)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and browsing"]
  node_app_entry["Android app<br/>[MainActivity.kt]"]
  node_browser_ui["Browser UI<br/>[BrowserScreen.kt]"]
  node_browser_vm["Browser state"]
  node_webview["WebView clients<br/>[AxWebViewClient.kt]"]
  node_tabs["Tab switching"]
  node_bookmarks["Bookmarks<br/>[BookmarkScreen.kt]"]
  node_history["History<br/>[HistoryScreen.kt]"]
end

subgraph group_downloads["Media and files"]
  node_download_ui["Download manager"]
  node_download_vm["Download control"]
  node_ytdlp["Video downloads<br/>[YtDlpEngine.kt]"]
  node_direct_download["Direct downloads"]
  node_player["Video player"]
  node_file_manager["File manager"]
end

subgraph group_data["Domain and storage"]
  node_domain["Domain contracts"]
  node_repositories["Data repositories"]
  node_database[("Room database<br/>[AxDatabase.kt]")]
end

subgraph group_security["Privacy and settings"]
  node_adblock["Ad blocking<br/>[AdBlockEngine.kt]"]
  node_proxy["Proxy manager<br/>[ProxyManager.kt]"]
  node_settings["Browser settings<br/>[SettingsScreen.kt]"]
end

subgraph group_tools["Agent and pentest"]
  node_agent["Page agent<br/>[AgentEngine.kt]"]
  node_scrape["Scrape and export<br/>[ScrapePipeline.kt]"]
  node_ai_client["AI provider client"]
  node_pentest_ui["Pentest tools<br/>[PentestTabs.kt]"]
  node_intruder["Intruder engine<br/>[IntruderEngine.kt]"]
  node_http_sender["HTTP sender<br/>[HttpSender.kt]"]
end

node_user(("Browser user"))
node_web(("Web content"))
node_openrouter(("OpenRouter API"))

node_user -->|"opens app"| node_app_entry
node_app_entry -->|"hosts browsing"| node_browser_ui
node_user -->|"navigates"| node_browser_ui
node_browser_ui -->|"dispatches actions"| node_browser_vm
node_browser_ui -->|"renders pages"| node_webview
node_webview -->|"requests content"| node_web
node_browser_ui -->|"switches tabs"| node_tabs
node_webview -->|"checks requests"| node_adblock
node_settings -->|"configures proxy"| node_proxy
node_proxy -.->|"routes via proxy"| node_web
node_user -->|"manages downloads"| node_download_ui
node_download_ui -->|"dispatches actions"| node_download_vm
node_download_vm -->|"downloads media"| node_ytdlp
node_download_vm -->|"downloads files"| node_direct_download
node_download_vm -->|"uses contract"| node_domain
node_domain -->|"implemented by"| node_repositories
node_repositories -->|"reads and writes"| node_database
node_user -->|"plays media"| node_player
node_user -->|"manages files"| node_file_manager
node_user -->|"saves sites"| node_bookmarks
node_user -->|"reviews visits"| node_history
node_user -->|"asks page task"| node_agent
node_agent -->|"requests AI response"| node_ai_client
node_ai_client -.->|"sends prompts"| node_openrouter
node_agent -->|"formats scrape data"| node_scrape
node_user -->|"runs security tools"| node_pentest_ui
node_pentest_ui -->|"starts fuzzing"| node_intruder
node_intruder -->|"sends requests"| node_http_sender

click node_app_entry "https://github.com/akborana3/axbrowser/blob/main/app/src/main/kotlin/com/akay/axbrowser/MainActivity.kt"
click node_browser_ui "https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/BrowserScreen.kt"
click node_browser_vm "https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/viewmodel/BrowserViewModel.kt"
click node_webview "https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/webview/AxWebViewClient.kt"
click node_tabs "https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/TabSwitcherScreen.kt"
click node_bookmarks "https://github.com/akborana3/axbrowser/blob/main/feature/feature-bookmarks/src/main/kotlin/com/akay/feature/bookmarks/ui/BookmarkScreen.kt"
click node_history "https://github.com/akborana3/axbrowser/blob/main/feature/feature-history/src/main/kotlin/com/akay/feature/history/ui/HistoryScreen.kt"
click node_adblock "https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/adblock/AdBlockEngine.kt"
click node_proxy "https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/proxy/ProxyManager.kt"
click node_settings "https://github.com/akborana3/axbrowser/blob/main/feature/feature-settings/src/main/kotlin/com/akay/feature/settings/ui/SettingsScreen.kt"
click node_download_ui "https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/ui/DownloadManagerScreen.kt"
click node_download_vm "https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/viewmodel/DownloadViewModel.kt"
click node_ytdlp "https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/engine/YtDlpEngine.kt"
click node_direct_download "https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/engine/DirectDownloadEngine.kt"
click node_player "https://github.com/akborana3/axbrowser/blob/main/feature/feature-videoplayer/src/main/kotlin/com/akay/feature/videoplayer/ui/VideoPlayerScreen.kt"
click node_file_manager "https://github.com/akborana3/axbrowser/blob/main/feature/feature-filemanager/src/main/kotlin/com/akay/feature/filemanager/ui/FileManagerScreen.kt"
click node_domain "https://github.com/akborana3/axbrowser/blob/main/core/core-domain/src/main/kotlin/com/akay/core/domain/repository/DownloadRepository.kt"
click node_repositories "https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/repository/DownloadRepositoryImpl.kt"
click node_database "https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/db/AxDatabase.kt"
click node_agent "https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/AgentEngine.kt"
click node_scrape "https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/ScrapePipeline.kt"
click node_ai_client "https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/ai/OpenRouterClient.kt"
click node_pentest_ui "https://github.com/akborana3/axbrowser/blob/main/feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/ui/PentestTabs.kt"
click node_intruder "https://github.com/akborana3/axbrowser/blob/main/feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/intruder/IntruderEngine.kt"
click node_http_sender "https://github.com/akborana3/axbrowser/blob/main/feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/sender/HttpSender.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_app_entry,node_browser_ui,node_browser_vm,node_webview,node_tabs,node_bookmarks,node_history,node_user toneBlue
class node_download_ui,node_download_vm,node_ytdlp,node_direct_download,node_player,node_file_manager toneAmber
class node_domain,node_repositories,node_database,node_openrouter toneMint
class node_adblock,node_proxy,node_settings toneRose
class node_agent,node_scrape,node_ai_client,node_pentest_ui,node_intruder,node_http_sender,node_web toneIndigo
```

## Components

### App and browsing

- [Android app](https://github.com/akborana3/axbrowser/blob/main/app/src/main/kotlin/com/akay/axbrowser/MainActivity.kt): `app/src/main/kotlin/com/akay/axbrowser/MainActivity.kt`
- [Browser UI](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/BrowserScreen.kt): `feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/BrowserScreen.kt`
- [Browser state](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/viewmodel/BrowserViewModel.kt): `feature/feature-browser/src/main/kotlin/com/akay/feature/browser/viewmodel/BrowserViewModel.kt`
- [WebView clients](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/webview/AxWebViewClient.kt): `feature/feature-browser/src/main/kotlin/com/akay/feature/browser/webview/AxWebViewClient.kt`
- [Tab switching](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/TabSwitcherScreen.kt): `feature/feature-browser/src/main/kotlin/com/akay/feature/browser/ui/TabSwitcherScreen.kt`
- [Bookmarks](https://github.com/akborana3/axbrowser/blob/main/feature/feature-bookmarks/src/main/kotlin/com/akay/feature/bookmarks/ui/BookmarkScreen.kt): `feature/feature-bookmarks/src/main/kotlin/com/akay/feature/bookmarks/ui/BookmarkScreen.kt`
- [History](https://github.com/akborana3/axbrowser/blob/main/feature/feature-history/src/main/kotlin/com/akay/feature/history/ui/HistoryScreen.kt): `feature/feature-history/src/main/kotlin/com/akay/feature/history/ui/HistoryScreen.kt`

### Media and files

- [Download manager](https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/ui/DownloadManagerScreen.kt): `feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/ui/DownloadManagerScreen.kt`
- [Download control](https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/viewmodel/DownloadViewModel.kt): `feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/viewmodel/DownloadViewModel.kt`
- [Video downloads](https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/engine/YtDlpEngine.kt): `feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/engine/YtDlpEngine.kt`
- [Direct downloads](https://github.com/akborana3/axbrowser/blob/main/feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/engine/DirectDownloadEngine.kt): `feature/feature-downloads/src/main/kotlin/com/akay/feature/downloads/engine/DirectDownloadEngine.kt`
- [Video player](https://github.com/akborana3/axbrowser/blob/main/feature/feature-videoplayer/src/main/kotlin/com/akay/feature/videoplayer/ui/VideoPlayerScreen.kt): `feature/feature-videoplayer/src/main/kotlin/com/akay/feature/videoplayer/ui/VideoPlayerScreen.kt`
- [File manager](https://github.com/akborana3/axbrowser/blob/main/feature/feature-filemanager/src/main/kotlin/com/akay/feature/filemanager/ui/FileManagerScreen.kt): `feature/feature-filemanager/src/main/kotlin/com/akay/feature/filemanager/ui/FileManagerScreen.kt`

### Domain and storage

- [Domain contracts](https://github.com/akborana3/axbrowser/blob/main/core/core-domain/src/main/kotlin/com/akay/core/domain/repository/DownloadRepository.kt): `core/core-domain/src/main/kotlin/com/akay/core/domain/repository/DownloadRepository.kt`
- [Data repositories](https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/repository/DownloadRepositoryImpl.kt): `core/core-data/src/main/kotlin/com/akay/core/data/repository/DownloadRepositoryImpl.kt`
- [Room database](https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/db/AxDatabase.kt): `core/core-data/src/main/kotlin/com/akay/core/data/db/AxDatabase.kt`

### Privacy and settings

- [Ad blocking](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/adblock/AdBlockEngine.kt): `feature/feature-browser/src/main/kotlin/com/akay/feature/browser/adblock/AdBlockEngine.kt`
- [Proxy manager](https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/proxy/ProxyManager.kt): `core/core-data/src/main/kotlin/com/akay/core/data/proxy/ProxyManager.kt`
- [Browser settings](https://github.com/akborana3/axbrowser/blob/main/feature/feature-settings/src/main/kotlin/com/akay/feature/settings/ui/SettingsScreen.kt): `feature/feature-settings/src/main/kotlin/com/akay/feature/settings/ui/SettingsScreen.kt`

### Agent and pentest

- [Page agent](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/AgentEngine.kt): `feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/AgentEngine.kt`
- [Scrape and export](https://github.com/akborana3/axbrowser/blob/main/feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/ScrapePipeline.kt): `feature/feature-browser/src/main/kotlin/com/akay/feature/browser/agent/ScrapePipeline.kt`
- [AI provider client](https://github.com/akborana3/axbrowser/blob/main/core/core-data/src/main/kotlin/com/akay/core/data/ai/OpenRouterClient.kt): `core/core-data/src/main/kotlin/com/akay/core/data/ai/OpenRouterClient.kt`
- [Pentest tools](https://github.com/akborana3/axbrowser/blob/main/feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/ui/PentestTabs.kt): `feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/ui/PentestTabs.kt`
- [Intruder engine](https://github.com/akborana3/axbrowser/blob/main/feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/intruder/IntruderEngine.kt): `feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/intruder/IntruderEngine.kt`
- [HTTP sender](https://github.com/akborana3/axbrowser/blob/main/feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/sender/HttpSender.kt): `feature/feature-pentest/src/main/kotlin/com/akay/feature/pentest/sender/HttpSender.kt`

### Other components

- **Browser user**
- **Web content**
- **OpenRouter API**

## Connections

- Browser user → Android app: opens app
- Android app → Browser UI: hosts browsing
- Browser user → Browser UI: navigates
- Browser UI → Browser state: dispatches actions
- Browser UI → WebView clients: renders pages
- WebView clients → Web content: requests content
- Browser UI → Tab switching: switches tabs
- WebView clients → Ad blocking: checks requests
- Browser settings → Proxy manager: configures proxy
- Proxy manager → Web content: routes via proxy
- Browser user → Download manager: manages downloads
- Download manager → Download control: dispatches actions
- Download control → Video downloads: downloads media
- Download control → Direct downloads: downloads files
- Download control → Domain contracts: uses contract
- Domain contracts → Data repositories: implemented by
- Data repositories → Room database: reads and writes
- Browser user → Video player: plays media
- Browser user → File manager: manages files
- Browser user → Bookmarks: saves sites
- Browser user → History: reviews visits
- Browser user → Page agent: asks page task
- Page agent → AI provider client: requests AI response
- AI provider client → OpenRouter API: sends prompts
- Page agent → Scrape and export: formats scrape data
- Browser user → Pentest tools: runs security tools
- Pentest tools → Intruder engine: starts fuzzing
- Intruder engine → HTTP sender: sends requests
