# nikeshjr/anilili architecture

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

- Interactive diagram: https://gitdiagram.com/nikeshjr/anilili
- Repository: https://github.com/nikeshjr/anilili

## Overview

Anilili is a native Android anime discovery and viewing app for phones and TVs. The principal workflow is to discover a title, open its details, resolve an episode from a streaming source, and watch it in the native player; viewers can also download episodes and track progress. The graph preserves documented list sync, backup, airing reminders, recommendations, and diagnostics. Some connections are based on the README rather than inspected implementation; the source index identifies important modules but does not establish their runtime call paths.

Main entry points: [`app/src/main/java/com/anilili/data/MiruroRepository.kt`](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/MiruroRepository.kt) (Anime repository), [`app/src/main/java/com/anilili/ui/home/HomeScreen.kt`](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/home/HomeScreen.kt) (Home and discovery UI), [`app/src/main/java/com/anilili/ui/detail/DetailScreen.kt`](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/detail/DetailScreen.kt) (Title details), [`app/src/main/java/com/anilili/playback/PlaybackService.kt`](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/playback/PlaybackService.kt) (Native playback service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Adaptive app experience"]
  node_app["Android app entry<br/>[MainActivity.kt]"]
  node_routes["Navigation routes<br/>[Routes.kt]"]
  node_home["Home and discovery UI<br/>[HomeScreen.kt]"]
  node_detail["Title details<br/>[DetailScreen.kt]"]
end

subgraph group_catalog["Anime discovery"]
  node_repository["Anime repository"]
  node_providers["Streaming providers"]
  node_metadata["Metadata clients<br/>[AniListClient.kt]"]
end

subgraph group_watching["Playback and downloads"]
  node_player["Native playback service<br/>[PlaybackService.kt]"]
  node_downloads["Episode downloads"]
  node_download_service["Download service"]
end

subgraph group_personal["Library and accounts"]
  node_library[("Saved titles and progress<br/>[LibraryStore.kt]")]
  node_auth["Account authentication<br/>[AuthManager.kt]"]
  node_backup["Backup and restore<br/>[AppBackup.kt]"]
  node_recommendations["Taste recommendations<br/>[TasteEngine.kt]"]
end

subgraph group_services["App services"]
  node_app_graph["Dependency graph<br/>[AppGraph.kt]"]
  node_settings[("Settings<br/>[SettingsStore.kt]")]
  node_reminders["Airing reminders"]
  node_updates["Update manager<br/>[UpdateManager.kt]"]
end

subgraph group_diagnostics["Diagnostics support"]
  node_diagnostics_share["Shareable diagnostics"]
  node_diagnostics_log[("Diagnostic log<br/>[DiagnosticsLog.kt]")]
  node_gateway_ui["Support console<br/>[Console.tsx]"]
  node_gateway_api["Diagnostics gateway<br/>[app.ts]"]
end

node_viewer(("Viewer"))

node_viewer -->|"opens"| node_app
node_app -->|"shows"| node_home
node_home -->|"discovers titles"| node_repository
node_home -->|"opens title"| node_detail
node_detail -->|"loads episodes"| node_repository
node_repository -->|"resolves streams"| node_providers
node_repository -.->|"loads metadata"| node_metadata
node_detail -->|"starts episode"| node_player
node_player -->|"plays offline episodes"| node_downloads
node_downloads -.->|"runs background downloads"| node_download_service
node_viewer -->|"signs in"| node_auth
node_auth -->|"syncs list progress"| node_library
node_player -->|"updates progress"| node_library
node_library -.->|"provides taste signals"| node_recommendations
node_viewer -->|"backs up or restores"| node_backup
node_viewer -->|"receives airing alerts"| node_reminders
node_viewer -.->|"checks for updates"| node_updates
node_viewer -->|"shares support report"| node_diagnostics_share
node_diagnostics_share -.->|"collects report data"| node_diagnostics_log
node_gateway_ui -.->|"requests admin data"| node_gateway_api

click node_app "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/MainActivity.kt"
click node_routes "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/nav/Routes.kt"
click node_home "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/home/HomeScreen.kt"
click node_detail "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/detail/DetailScreen.kt"
click node_repository "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/MiruroRepository.kt"
click node_providers "https://github.com/nikeshjr/anilili/tree/main/app/src/main/java/com/anilili/data/remote"
click node_metadata "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/remote/AniListClient.kt"
click node_player "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/playback/PlaybackService.kt"
click node_downloads "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/playback/EpisodeDownloads.kt"
click node_download_service "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/playback/EpisodeDownloadService.kt"
click node_library "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/library/LibraryStore.kt"
click node_auth "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/auth/AuthManager.kt"
click node_backup "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/backup/AppBackup.kt"
click node_recommendations "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/recs/TasteEngine.kt"
click node_app_graph "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/AppGraph.kt"
click node_settings "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/settings/SettingsStore.kt"
click node_reminders "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/reminder/AutomaticReleaseManager.kt"
click node_updates "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/update/UpdateManager.kt"
click node_diagnostics_share "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/diagnostics/DiagnosticsShareManager.kt"
click node_diagnostics_log "https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/diagnostics/DiagnosticsLog.kt"
click node_gateway_ui "https://github.com/nikeshjr/anilili/blob/main/infrastructure/diagnostics-gateway/src/Console.tsx"
click node_gateway_api "https://github.com/nikeshjr/anilili/blob/main/infrastructure/diagnostics-gateway/server/app.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_app,node_routes,node_home,node_detail,node_viewer toneBlue
class node_repository,node_providers,node_metadata toneAmber
class node_player,node_downloads,node_download_service toneMint
class node_library,node_auth,node_backup,node_recommendations toneRose
class node_app_graph,node_settings,node_reminders,node_updates toneIndigo
class node_diagnostics_share,node_diagnostics_log,node_gateway_ui,node_gateway_api toneTeal
```

## Components

### Adaptive app experience

- [Android app entry](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/MainActivity.kt): `app/src/main/java/com/anilili/MainActivity.kt`
- [Navigation routes](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/nav/Routes.kt): `app/src/main/java/com/anilili/ui/nav/Routes.kt`
- [Home and discovery UI](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/home/HomeScreen.kt): `app/src/main/java/com/anilili/ui/home/HomeScreen.kt`
- [Title details](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/ui/detail/DetailScreen.kt): `app/src/main/java/com/anilili/ui/detail/DetailScreen.kt`

### Anime discovery

- [Anime repository](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/MiruroRepository.kt): `app/src/main/java/com/anilili/data/MiruroRepository.kt`
- [Streaming providers](https://github.com/nikeshjr/anilili/tree/main/app/src/main/java/com/anilili/data/remote): `app/src/main/java/com/anilili/data/remote`
- [Metadata clients](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/remote/AniListClient.kt): `app/src/main/java/com/anilili/data/remote/AniListClient.kt`

### Playback and downloads

- [Native playback service](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/playback/PlaybackService.kt): `app/src/main/java/com/anilili/playback/PlaybackService.kt`
- [Episode downloads](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/playback/EpisodeDownloads.kt): `app/src/main/java/com/anilili/playback/EpisodeDownloads.kt`
- [Download service](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/playback/EpisodeDownloadService.kt): `app/src/main/java/com/anilili/playback/EpisodeDownloadService.kt`

### Library and accounts

- [Saved titles and progress](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/library/LibraryStore.kt): `app/src/main/java/com/anilili/data/library/LibraryStore.kt`
- [Account authentication](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/auth/AuthManager.kt): `app/src/main/java/com/anilili/data/auth/AuthManager.kt`
- [Backup and restore](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/backup/AppBackup.kt): `app/src/main/java/com/anilili/data/backup/AppBackup.kt`
- [Taste recommendations](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/recs/TasteEngine.kt): `app/src/main/java/com/anilili/data/recs/TasteEngine.kt`

### App services

- [Dependency graph](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/AppGraph.kt): `app/src/main/java/com/anilili/data/AppGraph.kt`
- [Settings](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/settings/SettingsStore.kt): `app/src/main/java/com/anilili/data/settings/SettingsStore.kt`
- [Airing reminders](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/reminder/AutomaticReleaseManager.kt): `app/src/main/java/com/anilili/data/reminder/AutomaticReleaseManager.kt`
- [Update manager](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/data/update/UpdateManager.kt): `app/src/main/java/com/anilili/data/update/UpdateManager.kt`

### Diagnostics support

- [Shareable diagnostics](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/diagnostics/DiagnosticsShareManager.kt): `app/src/main/java/com/anilili/diagnostics/DiagnosticsShareManager.kt`
- [Diagnostic log](https://github.com/nikeshjr/anilili/blob/main/app/src/main/java/com/anilili/diagnostics/DiagnosticsLog.kt): `app/src/main/java/com/anilili/diagnostics/DiagnosticsLog.kt`
- [Support console](https://github.com/nikeshjr/anilili/blob/main/infrastructure/diagnostics-gateway/src/Console.tsx): `infrastructure/diagnostics-gateway/src/Console.tsx`
- [Diagnostics gateway](https://github.com/nikeshjr/anilili/blob/main/infrastructure/diagnostics-gateway/server/app.ts): `infrastructure/diagnostics-gateway/server/app.ts`

### Other components

- **Viewer**

## Connections

- Viewer → Android app entry: opens (evidence: `README.md`)
- Android app entry → Home and discovery UI: shows (evidence: `README.md`)
- Home and discovery UI → Anime repository: discovers titles (evidence: `README.md`)
- Home and discovery UI → Title details: opens title (evidence: `README.md`)
- Title details → Anime repository: loads episodes (evidence: `README.md`)
- Anime repository → Streaming providers: resolves streams (evidence: `README.md`)
- Anime repository → Metadata clients: loads metadata
- Title details → Native playback service: starts episode (evidence: `README.md`)
- Native playback service → Episode downloads: plays offline episodes (evidence: `README.md`)
- Episode downloads → Download service: runs background downloads (evidence: `app/src/main/java/com/anilili/playback/EpisodeDownloadService.kt`)
- Viewer → Account authentication: signs in (evidence: `README.md`)
- Account authentication → Saved titles and progress: syncs list progress (evidence: `README.md`)
- Native playback service → Saved titles and progress: updates progress (evidence: `README.md`)
- Saved titles and progress → Taste recommendations: provides taste signals
- Viewer → Backup and restore: backs up or restores (evidence: `README.md`)
- Viewer → Airing reminders: receives airing alerts (evidence: `README.md`)
- Viewer → Update manager: checks for updates
- Viewer → Shareable diagnostics: shares support report (evidence: `README.md`)
- Shareable diagnostics → Diagnostic log: collects report data (evidence: `app/src/main/java/com/anilili/diagnostics/DiagnosticsShareManager.kt`)
- Support console → Diagnostics gateway: requests admin data
