# miraianimeio/huganime architecture

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

- Interactive diagram: https://gitdiagram.com/miraianimeio/huganime
- Repository: https://github.com/miraianimeio/huganime

## Overview

HugAnime is a browser-based anime discovery and streaming site backed by a small Node server. The user-facing path is browsing/searching the catalog, opening an anime’s watch page, choosing an episode/server, and playing it; watch history and local preferences support return visits. The server serves the site and provides availability, S-2 episode lookup, and AniSkip timing endpoints. The graph includes documented discovery, schedule, list, playback, and support capabilities. Some frontend modules were not excerpted, so their internal calls are omitted rather than inferred.

Main entry points: [`Public/Js/watch.js`](https://github.com/miraianimeio/huganime/blob/main/Public/Js/watch.js) (Watch page), [`server.js`](https://github.com/miraianimeio/huganime/blob/main/server.js) (HugAnime site), [`Public/Js/core/api-client.js`](https://github.com/miraianimeio/huganime/blob/main/Public/Js/core/api-client.js) (Catalog client), [`Public/Js/server-check.js`](https://github.com/miraianimeio/huganime/blob/main/Public/Js/server-check.js) (Episode availability)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Discovery"]
  node_home["Home discovery<br/>[rows.js]"]
  node_search["Anime search<br/>[search.js]"]
  node_filter["Catalog filters<br/>[filter.js]"]
  node_schedule["Airing schedule<br/>[schedule.js]"]
  node_library["My list<br/>[library.js]"]
end

subgraph group_watch["Watching"]
  node_watchpage["Watch page<br/>[watch.js]"]
  node_servers["Streaming servers<br/>[servers.js]"]
  node_availability["Episode availability<br/>[server-check.js]"]
  node_autoskip["Auto Skip<br/>[autoskip.js]"]
  node_comments["Comments<br/>[comments.js]"]
end

subgraph group_backend["Server Services"]
  node_site["HugAnime site<br/>[server.js]"]
  node_s2lookup["S-2 episode lookup<br/>[anikoto.js]"]
  node_skipservice["Skip-time lookup<br/>[aniskip.js]"]
  node_localcatalog[("Anikoto catalog cache")]
end

subgraph group_shared["Shared Data"]
  node_animeapi["Catalog client<br/>[api-client.js]"]
  node_anilist["AniList data client<br/>[anilist-client.js]"]
  node_history["Watch history<br/>[history.js]"]
  node_storage[("Browser storage<br/>[storage.js]")]
end

node_viewer(("Viewer"))
node_externalcatalog(("AniList service"))
node_megaplay(("MegaPlay"))
node_anikoto(("Anikoto catalog"))
node_aniskipservice(("AniSkip service"))

node_viewer -->|"opens"| node_site
node_site -->|"serves site"| node_home
node_site -->|"serves site"| node_watchpage
node_animeapi -->|"uses"| node_anilist
node_anilist -->|"queries"| node_externalcatalog
node_watchpage -->|"loads anime"| node_animeapi
node_watchpage -->|"checks episodes"| node_availability
node_watchpage -->|"selects server"| node_servers
node_watchpage -->|"records progress"| node_history
node_watchpage -->|"reads player time"| node_autoskip
node_availability -->|"builds embed URL"| node_servers
node_watchpage -->|"reads and writes"| node_storage
node_history -->|"reads and writes"| node_storage
node_site -->|"dispatches checks"| node_availability
node_site -->|"dispatches lookup"| node_s2lookup
node_site -->|"dispatches timing"| node_skipservice
node_s2lookup -->|"persists catalog"| node_localcatalog
node_s2lookup -->|"fetches catalog"| node_anikoto
node_skipservice -->|"fetches timings"| node_aniskipservice
node_watchpage -.->|"plays episode"| node_megaplay
node_home -.->|"loads catalog"| node_animeapi
node_search -.->|"searches catalog"| node_animeapi
node_filter -.->|"browses catalog"| node_animeapi
node_schedule -.->|"loads airing"| node_animeapi
node_library -.->|"persists list"| node_storage
node_comments -.->|"persists comments"| node_storage
node_autoskip -.->|"requests timings"| node_skipservice
node_availability -.->|"checks backend"| node_site

click node_site "https://github.com/miraianimeio/huganime/blob/main/server.js"
click node_home "https://github.com/miraianimeio/huganime/blob/main/Public/Js/rows.js"
click node_search "https://github.com/miraianimeio/huganime/blob/main/Public/Js/search.js"
click node_filter "https://github.com/miraianimeio/huganime/blob/main/Public/Js/filter.js"
click node_schedule "https://github.com/miraianimeio/huganime/blob/main/Public/Js/schedule.js"
click node_animeapi "https://github.com/miraianimeio/huganime/blob/main/Public/Js/core/api-client.js"
click node_anilist "https://github.com/miraianimeio/huganime/blob/main/Public/Js/core/anilist-client.js"
click node_watchpage "https://github.com/miraianimeio/huganime/blob/main/Public/Js/watch.js"
click node_servers "https://github.com/miraianimeio/huganime/blob/main/Public/Js/servers.js"
click node_availability "https://github.com/miraianimeio/huganime/blob/main/Public/Js/server-check.js"
click node_autoskip "https://github.com/miraianimeio/huganime/blob/main/Public/Js/autoskip.js"
click node_s2lookup "https://github.com/miraianimeio/huganime/blob/main/anikoto.js"
click node_skipservice "https://github.com/miraianimeio/huganime/blob/main/aniskip.js"
click node_history "https://github.com/miraianimeio/huganime/blob/main/Public/Js/features/history.js"
click node_storage "https://github.com/miraianimeio/huganime/blob/main/Public/Js/core/storage.js"
click node_library "https://github.com/miraianimeio/huganime/blob/main/Public/Js/library.js"
click node_comments "https://github.com/miraianimeio/huganime/blob/main/Public/Js/comments.js"
click node_localcatalog "https://github.com/miraianimeio/huganime/blob/main/data/.anikoto-catalog.json"

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_home,node_search,node_filter,node_schedule,node_library,node_viewer toneBlue
class node_watchpage,node_servers,node_availability,node_autoskip,node_comments toneAmber
class node_site,node_s2lookup,node_skipservice,node_localcatalog toneMint
class node_animeapi,node_anilist,node_history,node_storage toneRose
class node_externalcatalog,node_megaplay,node_anikoto,node_aniskipservice toneIndigo
```

## Components

### Discovery

- [Home discovery](https://github.com/miraianimeio/huganime/blob/main/Public/Js/rows.js): `Public/Js/rows.js`
- [Anime search](https://github.com/miraianimeio/huganime/blob/main/Public/Js/search.js): `Public/Js/search.js`
- [Catalog filters](https://github.com/miraianimeio/huganime/blob/main/Public/Js/filter.js): `Public/Js/filter.js`
- [Airing schedule](https://github.com/miraianimeio/huganime/blob/main/Public/Js/schedule.js): `Public/Js/schedule.js`
- [My list](https://github.com/miraianimeio/huganime/blob/main/Public/Js/library.js): `Public/Js/library.js`

### Watching

- [Watch page](https://github.com/miraianimeio/huganime/blob/main/Public/Js/watch.js): `Public/Js/watch.js`
- [Streaming servers](https://github.com/miraianimeio/huganime/blob/main/Public/Js/servers.js): `Public/Js/servers.js`
- [Episode availability](https://github.com/miraianimeio/huganime/blob/main/Public/Js/server-check.js): `Public/Js/server-check.js`
- [Auto Skip](https://github.com/miraianimeio/huganime/blob/main/Public/Js/autoskip.js): `Public/Js/autoskip.js`
- [Comments](https://github.com/miraianimeio/huganime/blob/main/Public/Js/comments.js): `Public/Js/comments.js`

### Server Services

- [HugAnime site](https://github.com/miraianimeio/huganime/blob/main/server.js): `server.js`
- [S-2 episode lookup](https://github.com/miraianimeio/huganime/blob/main/anikoto.js): `anikoto.js`
- [Skip-time lookup](https://github.com/miraianimeio/huganime/blob/main/aniskip.js): `aniskip.js`
- [Anikoto catalog cache](https://github.com/miraianimeio/huganime/blob/main/data/.anikoto-catalog.json): `data/.anikoto-catalog.json`

### Shared Data

- [Catalog client](https://github.com/miraianimeio/huganime/blob/main/Public/Js/core/api-client.js): `Public/Js/core/api-client.js`
- [AniList data client](https://github.com/miraianimeio/huganime/blob/main/Public/Js/core/anilist-client.js): `Public/Js/core/anilist-client.js`
- [Watch history](https://github.com/miraianimeio/huganime/blob/main/Public/Js/features/history.js): `Public/Js/features/history.js`
- [Browser storage](https://github.com/miraianimeio/huganime/blob/main/Public/Js/core/storage.js): `Public/Js/core/storage.js`

### Other components

- **Viewer**
- **AniList service**
- **MegaPlay**
- **Anikoto catalog**
- **AniSkip service**

## Connections

- Viewer → HugAnime site: opens (evidence: `README.md`)
- HugAnime site → Home discovery: serves site (evidence: `README.md`)
- HugAnime site → Watch page: serves site (evidence: `README.md`)
- Catalog client → AniList data client: uses (evidence: `Public/Js/core/api-client.js`)
- AniList data client → AniList service: queries (evidence: `Public/Js/core/anilist-client.js`)
- Watch page → Catalog client: loads anime (evidence: `Public/Js/watch.js`)
- Watch page → Episode availability: checks episodes (evidence: `Public/Js/watch.js`)
- Watch page → Streaming servers: selects server (evidence: `Public/Js/watch.js`)
- Watch page → Watch history: records progress (evidence: `Public/Js/watch.js`)
- Watch page → Auto Skip: reads player time (evidence: `Public/Js/watch.js`)
- Episode availability → Streaming servers: builds embed URL (evidence: `Public/Js/server-check.js`)
- Watch page → Browser storage: reads and writes (evidence: `Public/Js/watch.js`)
- Watch history → Browser storage: reads and writes (evidence: `Public/Js/features/history.js`)
- HugAnime site → Episode availability: dispatches checks (evidence: `server.js`)
- HugAnime site → S-2 episode lookup: dispatches lookup (evidence: `server.js`)
- HugAnime site → Skip-time lookup: dispatches timing (evidence: `server.js`)
- S-2 episode lookup → Anikoto catalog cache: persists catalog (evidence: `anikoto.js`)
- S-2 episode lookup → Anikoto catalog: fetches catalog (evidence: `anikoto.js`)
- Skip-time lookup → AniSkip service: fetches timings (evidence: `aniskip.js`)
- Watch page → MegaPlay: plays episode (evidence: `README.md`)
- Home discovery → Catalog client: loads catalog
- Anime search → Catalog client: searches catalog
- Catalog filters → Catalog client: browses catalog
- Airing schedule → Catalog client: loads airing
- My list → Browser storage: persists list
- Comments → Browser storage: persists comments
- Auto Skip → Skip-time lookup: requests timings (evidence: `README.md`)
- Episode availability → HugAnime site: checks backend (evidence: `README.md`)
