// the find
bggRGjQaUbCoE/PiliPlus
PiliPlus
PiliPlus is a third-party BiliBili client built in Flutter, targeting Android, iOS, Windows, and Linux. It's a fork of PiliPalaX (itself a fork of pilipala) that pushes harder on features, adding things like Anime4K upscaling shaders, SponsorBlock, DLNA casting, and multi-account support that the official app doesn't expose. If you use BiliBili and dislike the official client, this is the most feature-complete alternative available.
- Anime4K GLSL shaders are bundled and actually wired into the player — GPU upscaling in a Flutter app via media-kit/libmpv is non-trivial and the shader selection (CNN-S/M/VL variants plus auto-downscale pre-passes) is done properly, not cargo-culted.
- media-kit as the video backend is the right call: it wraps libmpv, handles BiliBili's codec diversity (HEVC, AV1, Dolby), and gives hardware decode access on all platforms without writing platform channels per codec.
- CI/CD is real — separate workflows per platform (win_x64, linux_x64, mac, ios, android) with release builds, not just a README checkbox.
- The feature surface is genuinely wide: offline cache, DLNA cast, WebDAV settings backup, SponsorBlock, danmaku merging, live photo, and interactive video — most of these require understanding undocumented API responses in detail, which the authors clearly do.
- The entire thing is built on bilibili-API-collect, a community-documented reverse-engineering of BiliBili's private API. BiliBili has broken third-party clients before with no warning. There's no API contract, no versioning, and no fallback — one signature change can brick the app silently.
- No test suite visible anywhere in the directory tree. A project this complex (video playback, auth flows, multi-account state, danmaku rendering) with zero tests is a liability; the 'fix bugs' changelog entry is doing a lot of heavy lifting.
- The codebase copies and modifies Flutter's own internal widgets (text fields, page views, scrollable internals under lib/common/widgets/flutter/) — this is a maintenance trap that means every Flutter SDK upgrade needs manual diffing against framework internals.
- The ongoing gRPC migration marked [wip] while the existing HTTP layer is still live means the networking layer is currently split across two approaches with no clear completion timeline, making it hard to reason about what codepath any given feature actually uses.