| 🌐 Your phone is the server Open it in any browser on your Wi-Fi. Nothing to install. |
📱 Your phone is the remote Arrow pad, touchpad, quality, speed and voice search. |
| 🎬 Native Bilibili Search, playback, comments, danmaku and live rooms. No web view. |
🧠 Recommends on the phone FlowNeuro learns on the device. Nothing leaves it. |
| 🧩 Everything from Flow YouTube, SponsorBlock, DeArrow and downloads. |
🔒 Nothing to sign up for No account, no ads, no tracking. |
Home feed · Search YouTube and Bilibili · Bilibili live with danmaku and chat · Phone as a remote · Launcher icons
To watch on a computer, turn the server on and open it in any browser, with nothing to install. If you would rather have a dedicated desktop app, Flow's own Flow-Desktop is another option. Subscriptions, history, and watch-later come straight from the app.
Once it is on, the phone serves a web app on port 8080.
- On the phone itself:
http://localhost:8080 - On any device on the same Wi-Fi:
http://<phone-ip>:8080, with nothing to install there
Private networks only. The server answers devices on the same local network (your home Wi-Fi, or your phone's hotspot) and nothing else: not the internet, and not a web page of another site. Public Wi-Fi such as a cafe usually blocks devices from reaching each other, so there, connect the computer to your phone's hotspot. To reach it from outside the house, use a VPN such as Tailscale rather than opening a port.
Pairing code. The first time a browser opens the server, it asks for the 6-digit code shown on the phone (in Settings, and on the Remote screen). After that the browser stays paired. The "New code" button signs every browser out. Guessing is limited: a few wrong tries lock that device out for 10 minutes. The connection is plain HTTP, so someone capturing traffic on the same network could still read the code. Use it only on a network you trust, and turn it off when you are done.
In the web app:
- Search, channels, playlists, subscriptions
- A Library page: history, watch-later, playlists and downloads
- Download from the watch page, choosing quality, format or audio only
- An Up next card that autoplays, with a switch to turn it off
- A Video.js 10 player, served from the device itself: quality menu, chapters, seek-bar thumbnails, subtitles, audio-only mode, shortcuts, resume
- YouTube and Bilibili playback, with danmaku
The web server and web page are inspired by localtube by diekaiju, rewritten for Fathom and extended with Bilibili.
Away from the keyboard? Steer a Fathom screen from your phone instead.
- Arrow pad with OK, Back, Home and Options, plus a touchpad
- Playback controls, and shortcuts to Subscriptions and Library
- Search by typing or by voice
- A YouTube / Bilibili switch
No web view. A Kotlin client talks to Bilibili's web API directly.
- Search, channels (uploads, series, seasons), playback, quality, multi-part videos
- Comments and danmaku, the comments that scroll across the video
- Live rooms, with danmaku over the video and a chat list that shows avatars and super chats
- Subscriptions, history, likes and playlists, alongside YouTube's
Every recommendation comes from FlowNeuro, A-EDev's on-device engine from Flow.
- Learns from watches, skips, likes, searches, and how long you stay
- Spots when you're bored of a topic and mixes in something new
- Shows exactly what it knows about you, and lets you edit, export, or wipe it
What Fathom adds: Bilibili watches count toward the same profile as YouTube's, and a filter of Chinese filler words (我们, 这个, 大家 and the like) keeps them from showing up as topics. The engine itself is Flow's.
- Import NewPipe or PipePipe subscription JSON. Bilibili channels and avatars come along.
- Export the same JSON back to either app.
Every APK on the releases page is signed with the same key, and the release workflow refuses to publish one signed with any other. To check that a file is Fathom's, compare its signing certificate with this fingerprint using AppVerifier or apksigner:
Signing certificate SHA-256 fingerprint
2E:35:71:C4:F5:21:F7:1C:65:50:42:D9:D9:6F:BD:11:C2:95:B7:4E:28:8E:2F:31:72:66:CD:61:93:21:74:EA
apksigner verify --print-certs fathom.apkEach release also carries checksums.txt, so sha256sum -c checksums.txt confirms a download is whole.
git clone https://github.com/Chiehx0220/Fathom.git
cd Fathom
./gradlew assembleGithubDebugSigned APKs are on the releases page, the newest stable release is marked Latest. Variants: foss (no updater), nightly (installs beside debug).
Paths are under app/src/main/java/io/github/aedev/flow/.
| Where | What |
|---|---|
bilibili/ |
The client: an API facade split by area (video, search, comments, live, uploader), request signing, sessions, typed ids, models, deep links |
data/paging/, player/stream/, ui/screens/playlists/ (Bilibili*) |
Mappers and glue that plug it into search, playback, and playlists |
di/BilibiliModule.kt |
One shared session for the whole app |
localserver/ |
The web server: routing, one backend per service, feeds, stream proxy, pairing, remote control, and the web player pages |
app/src/test/ (bilibili/, localserver/) |
Offline replay tests: recorded Bilibili responses behind a fake HTTP layer, compared with saved baselines |
| upstream files (see FORK-DIFF.md) | Small hooks, mostly passing a service id through |
The rule: new code goes in new files, and upstream files only get a call into it. That keeps merges from upstream small, and a CI budget fails the build if the changed part of upstream grows. FORK-DIFF.md lists every upstream file touched (node scripts/fork-diff.js), and bilibili/PPE-REFERENCE.md records which PipePipeExtractor revision the client was ported from.
Everything else in Flow (SponsorBlock, DeArrow, music, Shorts, downloads, themes) is still here. See upstream.
Fathom has been developed with AI assistance from the outset: Claude Code (Anthropic) has been used throughout development.
Direction and quality remain my responsibility. I define the goals and make the design decisions, I review each change, and I decide what is merged and released. No commit, push or release is made without my instruction.
Quality is safeguarded as follows: unit tests and CodeQL run on every push; replay baselines pin Bilibili and web server behavior across refactors; a CI budget limits how much of upstream Flow's code Fathom changes (see FORK-DIFF.md); and every user-visible change is tested on a physical phone before release.
Flow and FlowNeuro by A-EDev · PipePipeExtractor by InfinityLoop1308 (the Bilibili client is based on it) · NewPipeExtractor · localtube by diekaiju · Video.js and hls.js
Fathom is released under GPL-3.0. You are free to use, modify and share it, but any version you distribute must stay open source under the same license.
Flow, FlowNeuro included, is © 2025–2026 A-EDev. The changes and additions in Fathom are © 2026 Chiehx0220.





