{"id":51139543,"url":"https://github.com/nattadasu/miribyou","last_synced_at":"2026-06-25T21:01:33.636Z","repository":{"id":365674237,"uuid":"1269688358","full_name":"nattadasu/miribyou","owner":"nattadasu","description":"A \"Lightweight\" MAL Scraper as API written in TS with structure parity to Jikan.moe","archived":false,"fork":false,"pushed_at":"2026-06-18T10:19:37.000Z","size":321,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-18T12:10:00.929Z","etag":null,"topics":["jikan-api","myanimelist","myanimelist-api","no-database"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nattadasu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"nattadasu","ko_fi":"nattadasu","patreon":"nattadasu","custom":["https://paypal.me/nattadasu","https://trakteer.id/nattadasu","https://saweria.co/nattadasu"]}},"created_at":"2026-06-15T02:16:24.000Z","updated_at":"2026-06-18T10:19:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nattadasu/miribyou","commit_stats":null,"previous_names":["nattadasu/miribyou"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/nattadasu/miribyou","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nattadasu%2Fmiribyou","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nattadasu%2Fmiribyou/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nattadasu%2Fmiribyou/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nattadasu%2Fmiribyou/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nattadasu","download_url":"https://codeload.github.com/nattadasu/miribyou/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nattadasu%2Fmiribyou/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34792207,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jikan-api","myanimelist","myanimelist-api","no-database"],"created_at":"2026-06-25T21:01:32.756Z","updated_at":"2026-06-25T21:01:33.629Z","avatar_url":"https://github.com/nattadasu.png","language":"TypeScript","funding_links":["https://github.com/sponsors/nattadasu","https://ko-fi.com/nattadasu","https://patreon.com/nattadasu","https://paypal.me/nattadasu","https://trakteer.id/nattadasu","https://saweria.co/nattadasu"],"categories":[],"sub_categories":[],"readme":"# miribyou\n\nMiribyou is a lightweight, database-free MyAnimeList (MAL) scraper built to provide structure and data parity with the Jikan v4 API.\n\nDesigned for serverless environments like Cloudflare Workers (or any modern JS runtime), miribyou requires no database setup. It achieves high-fidelity JSON output by parsing MAL's HTML directly, optionally enhanced by the official MAL API.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/package-json/v/nattadasu/miribyou\" alt=\"Version\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/nattadasu/miribyou\" alt=\"License\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/stars/nattadasu/miribyou\" alt=\"Stars\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/issues/nattadasu/miribyou\" alt=\"Issues\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TypeScript-3178C6?logo=typescript\u0026logoColor=white\" alt=\"TypeScript\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Hono-E36002?logo=hono\u0026logoColor=white\" alt=\"Hono\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vitest-6E9F18?logo=vitest\u0026logoColor=white\" alt=\"Vitest\" /\u003e\n  \u003ca href=\"https://nttds.my.id/discord\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Join_our_Discord-5865F2?logo=discord\u0026logoColor=white\" alt=\"Discord\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://deploy.workers.cloudflare.com/?url=https://github.com/nattadasu/miribyou\"\u003e\n    \u003cimg src=\"https://deploy.workers.cloudflare.com/button\" alt=\"Deploy to Cloudflare Workers\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://vercel.com/import/project?template=https://github.com/nattadasu/miribyou\"\u003e\n    \u003cimg src=\"https://vercel.com/button\" alt=\"Deploy with Vercel\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003e [!IMPORTANT]\n\u003e This project aims for parity with Jikan V4 data structures and versioning. All endpoints are prefixed with `/v4`.\n\n\u003e [!WARNING]\n\u003e Because miribyou does not rely on a persistent database, some advanced search or filtering queries may return stub/partial data. Providing a `MAL_CLIENT_ID` helps resolve many of these limitations.\n\n---\n\n## 📖 Table of Contents\n\n- [Deployment](#🚀-deployment)\n  - [Cloudflare Workers](#cloudflare-workers)\n  - [Vercel](#vercel)\n  - [Official MAL API Integration](#official-mal-api-integration-optional)\n- [Client Compatibility \u0026 Detection](#-client-compatibility--detection)\n- [Caching Strategy](#-caching-strategy)\n- [API Endpoints](#⚡-api-endpoints)\n  - [Base](#base)\n  - [Anime](#anime)\n  - [Manga](#manga)\n  - [Seasons](#seasons)\n  - [Users](#users)\n- [Query Parameter Reference](#⚙️-query-parameter-reference)\n  - [Anime Search](#anime-search-v4anime)\n  - [Manga Search](#manga-search-v4manga)\n  - [User Search](#user-search-v4users)\n  - [Seasons](#seasons-v4seasonsnow-v4seasonsupcoming-v4seasonsyearseason)\n- [Development](#🛠️-development)\n\n---\n\n## 🚀 Deployment\n\n### Cloudflare Workers\n\n1. Clone the repository.\n2. Install dependencies:\n   ```bash\n   npm install\n   ```\n3. Authenticate with Wrangler:\n   ```bash\n   npx wrangler login\n   ```\n4. Deploy to Cloudflare:\n   ```bash\n   npm run deploy\n   ```\n\n### Vercel\n\nDeploy instantly by linking your GitHub repository to Vercel, or click the **Deploy with Vercel** button above.\n\n### Official MAL API Integration (Optional)\n\nYou can configure miribyou to use the official MyAnimeList v2 API to speed up search requests and retrieve richer metadata.\n\n- **Global Config:** Set `MAL_CLIENT_ID` as a secret or environment variable on your hosting platform.\n- **Client Override:** Clients can dynamically specify a Client ID by passing the `X-MAL-CLIENT-ID` header.\n\nTo get your Client ID, log in to MyAnimeList, visit the [API Config page](https://myanimelist.net/apiconfig), and create a new **web** client. If a redirect URL is required, you can use `http://localhost:8787`.\n\n---\n\n## 🔌 Client Compatibility \u0026 Detection\n\n`miribyou` is designed as a drop-in replacement for Jikan v4. Clients can detect whether an API deployment is powered by `miribyou` using the response headers:\n\n- **Header:** `X-Powered-By`\n- **Value:** `miribyou (Jikan-like)`\n\n#### Example Detection (JavaScript / TypeScript)\n\n```typescript\nconst response = await fetch(\"https://api.example.com/v4/anime/1\");\n\nconst isMiribyou =\n  response.headers.get(\"X-Powered-By\") === \"miribyou (Jikan-like)\";\nif (isMiribyou) {\n  console.log(\"This deployment is powered by miribyou!\");\n}\n```\n\n---\n\n## 💾 Caching Strategy\n\nTo keep the service lightweight and database-free, `miribyou` returns cache headers instructing browsers and CDNs (such as Cloudflare and Vercel) to cache successful `GET` responses for 1 day:\n\n- **Headers set on successful GET requests (status 200-299):**\n  - `Cache-Control: public, max-age=86400, s-maxage=86400`\n  - `CDN-Cache-Control: public, max-age=86400, s-maxage=86400`\n  - `Vercel-CDN-Cache-Control: public, max-age=86400, s-maxage=86400`\n- **Exclusions:** Caching is completely bypassed on base metadata endpoints (`/` and `/v4/`) and on any non-GET or unsuccessful requests.\n\n---\n\n## ⚡ API Endpoints\n\nAll endpoints are `GET` requests.\n\n### Base\n\n- `GET /v4/` - API metadata and heartbeat check\n\n### Anime\n\n- `GET /v4/anime?q=query` - Search anime\n- `GET /v4/anime/:id` - Basic anime details\n- `GET /v4/anime/:id/full` - Full anime metadata (relations, themes, etc.)\n- `GET /v4/anime/:id/characters` - Characters list\n- `GET /v4/anime/:id/staff` - Production staff list\n- `GET /v4/anime/:id/episodes` - Episode list (supports pagination via `?page=n`)\n- `GET /v4/anime/:id/episodes/:episodeId` - Single episode details\n- `GET /v4/anime/:id/news` - News articles\n- `GET /v4/anime/:id/forum` - Forum discussion topics\n- `GET /v4/anime/:id/videos` - Promotional videos and episode streaming links\n- `GET /v4/anime/:id/pictures` - Image gallery\n- `GET /v4/anime/:id/statistics` - Score distribution and watch status statistics\n- `GET /v4/anime/:id/moreinfo` - Additional information text\n- `GET /v4/anime/:id/recommendations` - User recommendations\n- `GET /v4/anime/:id/userupdates` - Latest user list updates\n- `GET /v4/anime/:id/reviews` - User reviews\n- `GET /v4/anime/:id/relations` - Related anime/manga entries\n- `GET /v4/anime/:id/themes` - Opening and ending themes\n- `GET /v4/anime/:id/external` - External resources links\n- `GET /v4/anime/:id/streaming` - Streaming platforms links\n\n### Manga\n\n- `GET /v4/manga?q=query` - Search manga\n- `GET /v4/manga/:id` - Basic manga details\n- `GET /v4/manga/:id/full` - Full manga metadata\n- `GET /v4/manga/:id/characters` - Character list\n- `GET /v4/manga/:id/news` - News articles\n- `GET /v4/manga/:id/forum` - Forum topics\n- `GET /v4/manga/:id/pictures` - Image gallery\n- `GET /v4/manga/:id/statistics` - Reading stats and scores\n- `GET /v4/manga/:id/moreinfo` - Additional information text\n- `GET /v4/manga/:id/recommendations` - User recommendations\n- `GET /v4/manga/:id/userupdates` - Latest list updates\n- `GET /v4/manga/:id/reviews` - User reviews\n- `GET /v4/manga/:id/relations` - Related entries\n- `GET /v4/manga/:id/external` - External links\n\n### Seasons\n\n- `GET /v4/seasons` - List of all archived years and seasons\n- `GET /v4/seasons/now` - Current season anime list\n- `GET /v4/seasons/upcoming` - Upcoming season anime list\n- `GET /v4/seasons/:year/:season` - Specific seasonal anime archive list\n\n### Users\n\n- `GET /v4/users?q=query` - Search users\n- `GET /v4/users/recentlyonline` - List recently online users\n- `GET /v4/users/userbyid/:id` - Get username by MAL ID\n- `GET /v4/users/:username` - Basic profile info\n- `GET /v4/users/:username/full` - Full profile metadata\n- `GET /v4/users/:username/statistics` - Anime and Manga list stats\n- `GET /v4/users/:username/favorites` - Favorite anime, manga, characters, and people\n- `GET /v4/users/:username/userupdates` - Latest updates\n- `GET /v4/users/:username/about` - About section (raw HTML)\n- `GET /v4/users/:username/history` - Activity history (supports `?type=anime|manga`)\n- `GET /v4/users/:username/friends` - Friends list\n- `GET /v4/users/:username/animelist` - Direct anime list\n- `GET /v4/users/:username/mangalist` - Direct manga list\n- `GET /v4/users/:username/recommendations` - User-submitted recommendations\n- `GET /v4/users/:username/reviews` - User reviews\n- `GET /v4/users/:username/clubs` - Joined clubs list\n- `GET /v4/users/:username/external` - Linked external social accounts\n\n---\n\n## ⚙️ Query Parameter Reference\n\n### Anime Search (`/v4/anime`)\n\n| Parameter                         | Type / Format                                   | Description                                                       |\n| :-------------------------------- | :---------------------------------------------- | :---------------------------------------------------------------- |\n| `q`                               | `string`                                        | Search query string                                               |\n| `page`                            | `integer`                                       | Page number for pagination                                        |\n| `limit`                           | `integer`                                       | Results limit (default: `25`)                                     |\n| `type`                            | `TV`, `OVA`, `Movie`, `Special`, `ONA`, `Music` | Media type filter                                                 |\n| `score`, `min_score`, `max_score` | `number`                                        | Score criteria filter                                             |\n| `status`                          | `airing`, `complete`, `upcoming`                | Airing status filter                                              |\n| `rating`                          | `g`, `pg`, `pg13`, `r17`, `r`, `rx`             | Age rating filter                                                 |\n| `sfw`                             | `boolean`                                       | Set `true` to filter out NSFW/adult entries                       |\n| `genres`, `genres_exclude`        | `string`                                        | Comma-separated genre IDs (e.g. `1,2`)                            |\n| `order_by`                        | `string`                                        | Field to sort by (`mal_id`, `title`, `start_date`, `score`, etc.) |\n| `sort`                            | `desc`, `asc`                                   | Sort direction                                                    |\n| `letter`                          | `string`                                        | Filter by first letter of title                                   |\n| `producers`                       | `string`                                        | Comma-separated producer IDs                                      |\n| `start_date`, `end_date`          | `YYYY-MM-DD`                                    | Release date range boundaries                                     |\n| `hover=1`                         | `flag`                                          | Opt-in Extended Metadata (slower; fetches popup fields)           |\n\n### Manga Search (`/v4/manga`)\n\n| Parameter                         | Type / Format                                                           | Description                                                     |\n| :-------------------------------- | :---------------------------------------------------------------------- | :-------------------------------------------------------------- |\n| `q`                               | `string`                                                                | Search query string                                             |\n| `page`                            | `integer`                                                               | Page number for pagination                                      |\n| `limit`                           | `integer`                                                               | Results limit (default: `25`)                                   |\n| `type`                            | `manga`, `novel`, `lightnovel`, `oneshot`, `doujin`, `manhwa`, `manhua` | Media type filter                                               |\n| `score`, `min_score`, `max_score` | `number`                                                                | Score criteria filter                                           |\n| `status`                          | `publishing`, `complete`, `hiatus`, `discontinued`, `upcoming`          | Publication status filter                                       |\n| `sfw`                             | `boolean`                                                               | Set `true` to filter out NSFW/adult entries                     |\n| `genres`, `genres_exclude`        | `string`                                                                | Comma-separated genre IDs                                       |\n| `order_by`                        | `string`                                                                | Field to sort by (`mal_id`, `title`, `chapters`, `score`, etc.) |\n| `sort`                            | `desc`, `asc`                                                           | Sort direction                                                  |\n| `letter`                          | `string`                                                                | Filter by first letter of title                                 |\n| `magazines`                       | `string`                                                                | Comma-separated magazine IDs                                    |\n| `start_date`, `end_date`          | `YYYY-MM-DD`                                                            | Publication date range boundaries                               |\n| `hover=1`                         | `flag`                                                                  | Opt-in Extended Metadata                                        |\n\n### User Search (`/v4/users`)\n\n| Parameter          | Type / Format                        | Description                    |\n| :----------------- | :----------------------------------- | :----------------------------- |\n| `q`                | `string`                             | Search query string (Required) |\n| `page`             | `integer`                            | Page number for pagination     |\n| `limit`            | `integer`                            | Results limit (default: `25`)  |\n| `gender`           | `any`, `male`, `female`, `nonbinary` | Filters by user profile gender |\n| `location`         | `string`                             | Filters by location string     |\n| `minAge`, `maxAge` | `integer`                            | Age range filter               |\n\n### Seasons (`/v4/seasons/now`, `/v4/seasons/upcoming`, `/v4/seasons/:year/:season`)\n\n| Parameter | Type / Format                                   | Description                                                         |\n| :-------- | :---------------------------------------------- | :------------------------------------------------------------------ |\n| `page`    | `integer`                                       | Page number for pagination                                          |\n| `limit`   | `integer`                                       | Results limit (default: `25`)                                       |\n| `filter`  | `tv`, `movie`, `ova`, `special`, `ona`, `music` | Media type filter                                                   |\n| `sfw`     | `boolean`                                       | Safe For Work toggle (`?sfw=1` or `?sfw=true`) to exclude Rx/Hentai |\n| `hover=1` | `flag`                                          | Opt-in Extended Metadata                                            |\n\n\u003e [!WARNING]\n\u003e **Use `?hover=1` sparingly.** It fires concurrent background requests for each entry on the page, increasing response times. Note that `?hover` is only supported on the HTML scraper fallback path.\n\n---\n\n## 🛠️ Development\n\n### Getting Started\n\n1. Install dependencies:\n   ```bash\n   npm install\n   ```\n2. Start the local hot-reloading server:\n   ```bash\n   npm run dev\n   ```\n\n### Testing\n\nRun the Vitest test suite to verify code changes:\n\n```bash\nnpm test\n```\n\n---\n\n## 📄 Licensing\n\nLicensed under the MIT License. See [LICENSE](LICENSE) for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnattadasu%2Fmiribyou","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnattadasu%2Fmiribyou","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnattadasu%2Fmiribyou/lists"}