A third-party Bangumi client built with React Native. Compatible with both iOS and Android while maintaining maximum consistency across platforms.
Bangumi is a Chinese website for tracking anime, music, dramas, games, and more — think MyAnimeList but broader in scope, covering all media types. It is a fully Chinese community with no plans to provide i18n or localization. Over 100 pages have been developed, redesigned for mobile, covering nearly every page on the website.
Originally developed as a React Native exercise — through this project I've learned and continue to learn more about mobile development. For detailed project documentation, visit Yuque (Chinese).
Android APK | AltStore Sideload | iOS Current Methods | Expo
- Google Play was removed due to a report — currently on hold
- iOS paid developer account has expired; given issues with community content, copyright, and regional regulations, no further App Store submissions are planned
Links lead to web previews (view-only, no interaction)
- Anime/media progress tracking
- Subject & Character details
- Timeline
- Forum (Rakuen) & Topics
- Time Machine & User Space
- And more: Daily Broadcast, Search, Rankings, New Episodes, Catalogs, Yearbook, Tags, Logs, Groups
- Limited sync of watch history from other sites (Crunchyroll, IMDb-style) to bgm.tv
- Cover images and most sanitized static data served via self-funded CDN for faster, more stable loading (even when the website is slow or down, the app still loads data normally)
- Photo Wall, Recommendations & AI Suggestions, Related Series, Curated Catalogs, Rating Monthly, Category Rankings
- Word Clouds: Subjects, People, Topics
Per-episode streaming source lookup for current season anime, custom source management, Find Anime/Books/Games- Anime Screenshot Preview & game screenshot previews
- Advanced Forum Filtering & user blocking
- Local Folder Subject Management (with romaji filename scraping support)
- Little Holy Grail (character trading game with custom UI and interactions)
Below are screenshots from June 2025, showing various UI pages with minimal overlap. If images don't load, visit Yuque (Chinese).
Current Version Details (Chinese)
Full Changelog (Chinese)
A single-page application preview built with @storybook/react-native 6.5, reconstructing a full navigation flow with minimal intrusion into the main project (performance is not optimized — not comparable to production apps built with Next.js, for example).
Key implementation: navigate | window popstate
As Expo for web has matured, a proper web version using the same codebase may be considered in the future.
SPA Preview (web collection management features are in progress; basic info display is supported, optimized for mobile)
Development has been ongoing since React Native 0.37. Back then, there weren't nearly as many polished solutions and third-party libraries as today — no React Hooks, no react-native-reanimated, no Expo libraries, not even concepts like Pressable or color scheme. TypeScript was only added in the last couple of years, so many early designs didn't account for typing. Newer all-in-one solutions like expo-router and One have also emerged, capable of producing high-performance builds for both mobile and web. As a result, the codebase contains many legacy patterns that are difficult to refactor with modern approaches.
Making a React Native app feel smooth takes real effort — but with the right patterns, it can be just as smooth as native. After years of development, the key performance bottlenecks come down to a few things:
- Avoid rendering oversized images (the single biggest impact on smoothness)
- Minimize simultaneous and slow network requests (including image loads)
- Cache computed results whenever possible
- Defer rendering for off-screen areas (no built-in browser-like solution exists)
- Favor functional programming and async logic; minimize
thisusage and loops - Reduce nesting depth where possible (even more critical for web)
Details
Development is done on macOS — iOS uses the Expo client for debugging, Android runs on a physical device via USB.
After 4+ years of iteration, both this project and the original Expo setup have diverged significantly. iOS currently runs only on Expo, while Android runs on Metro.
To fully leverage Expo's streamlined debugging on iOS, no third-party libraries unsupported by Expo are used. On Android, maximum performance is prioritized, so it has been ejected from Expo and uses many third-party performance libraries as replacements.
To debug locally, do not install packages at the root. Instead, go to ./packages/[target-env]/, install with yarn, then run yarn env [xxx] to switch to the target environment. Refer to the root package.json for available commands. The typical local dev command is yarn dev. See packages/README.md for details on environment switching and patch management.
If things don't run, don't struggle too much — it's recommended to set up all prerequisites using the official workflow before running this project. Windows and macOS environments differ quite a bit; refer to the Expo documentation.
Details
Do not use a mirror registry (e.g., taobao) — it may cause proxy errors during environment setup.
npm config set registry https://registry.npmjs.orgFor the first download, packages may be slow. Due to many legacy dependencies with complex version requirements, use yarn to install.
git clone https://github.com/czy0729/Bangumi
cd ./Bangumi
yarnDetails
If installation fails, try adding sudo before the command.
Enable developer debugging mode on Android. You need to open Android Studio at least once while connected via USB to allow debugging.
Make sure the app has installation and overlay permissions.
For spawnSync adb ENOENT, see StackOverflow.
If the first build fails with a read timeout, you may need a VPN. Builds that worked yesterday may fail today — gradlew dependencies only cache for 24 hours. Try --offline.
Details
Successfully debugged on Mac M1. iOS Expo runs smoothly, but APK builds had several issues:
- Make sure you're using the correct JAVA JDK, not JRE!
- Install watchman before building, otherwise you'll hit file watcher errors
- If the build fails, run
./gradlew cleanin theandroiddirectory and retry - If a
node_modulespackage is named in the error, try manually installing it - For unpredictable issues, try restarting the machine
-
All data and information come from various websites. No media download, direct playback, or modification functions are provided.
-
The project does not store any third-party user information.
-
This code is for learning and personal use only. Not for commercial use. Contact for takedown requests.
[Bangumi-OnAir] ekibun — episode broadcast data
[bangumi-mosaic-tile] weizhenye — user stats mosaic tile library
[bangumi-data] — media data index
[bangumi-api] — official API
Development is a long journey. If you find the app useful, consider giving a star.












