# wiliwili: the third-party Bilibili client built around a gamepad

> wiliwili is a C++ third-party Bilibili client for PC, Nintendo Switch, PSVita, PS4 and Xbox. It is aimed at controller and handheld users, and its portability story is more interesting than its feature list.

**xfangfang/wiliwili** — 第三方B站客户端，目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上

- Repository: https://github.com/xfangfang/wiliwili
- Website: https://xfangfang.github.io/wiliwili
- Stars: 5,513 · Forks: 268
- Language: C++
- License: GPL-3.0
- Published: 2026-09-22 · Updated: 2026-09-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/xfangfang-wiliwili

## What wiliwili solves, and for whom

Bilibili has no official client for the Nintendo Switch, the PSVita, the PS4 or Xbox, and its web player assumes a mouse and a keyboard. wiliwili fills that gap with a client whose interface is designed around a controller. The README describes it as "一个专为手柄用户设计的第三方 B站客户端", a third-party Bilibili client designed for gamepad users, and it supports touch, mouse, keyboard and gamepad input at the same time.

The audience is narrower than the platform list suggests. If you watch Bilibili on a desktop with a mouse, the official web player and the official PC client already cover you. wiliwili matters when the device is a handheld or a console: a Switch in hbmenu, a PSVita, a PS4 under the TV, or an old laptop where you want to browse recommendations with a controller from the couch. The README also mentions a one-handed mode that lets a single gamepad control the player, which is a feature written for exactly that setting.

The feature set mirrors the site rather than a subset of it: search with hot searches, video, bangumi and film categories; a filter page; a dynamic feed of followed uploaders; a live page; playback of video, bangumi, movies, documentaries and variety shows with danmaku and comments; and a personal page with QR-code login, history, favourites and follow lists. Danmaku settings, likes, coins and favourites are all present in the TODO list as completed items.

## How wiliwili renders a UI on five different consoles

The architecture is split into three layers, and the README states each one plainly. The interface is drawn with nanovg, a vector drawing library whose backend can be swapped for any graphics library; the project lists OpenGL, Vulkan and Metal as existing backends. Video playback uses FFMPEG plus MPV for rendering, defaulting to OpenGL, with D3D11, Deko3d, Gxm and software rendering also supported. Platform input, touch and IME handling go through GLFW or SDL, or can be implemented directly, as the Gxm-based PSVita version does.

That split explains the porting advice in the README. If a target device supports OpenGL or OpenGL ES, the project generally compiles and runs without changes. If the device uses a different graphics library, the first job is porting nanovg so the main interface appears, and the second is getting FFMPEG hardware decoding and MPV rendering working for acceptable performance. The project invites porting discussion in an issue but states that Android and iOS are out of scope.

The consequence is a codebase where the UI layer is portable by design and the video layer is where the work concentrates. The README's own porting notes put nanovg first and hardware decoding second, which is a fair description of where the difficulty actually sits.

## Installing wiliwili on Switch, PSVita, PS4 and PC

Every platform installs from the release page, and none of them requires building from source. On Nintendo Switch, download `wiliwili-NintendoSwitch.zip`, place `wiliwili.nro` in the `switch` directory of the memory card, then hold R while launching any game to enter hbmenu and pick wiliwili from the list. A desktop icon can be installed from inside the app under Settings, Utilities, Tutorial. The README notes that the desktop icon tries `switch/wiliwili.nro` first, then `switch/wiliwili/wiliwili.nro`, and falls back to hbmenu if neither exists.

On PSVita the release is a single `.vpk` file, and on PS4 a single `.pkg` file. On PC you download the installer for your system. Linux and Steam Deck users can also install it from their distribution's software store, such as Discover or GNOME Software, by searching for `wiliwili`.

If you prefer a package manager, the README links Fedora COPR, Scoop's extras bucket, the Arch User Repository and Flathub. A nightly test build is published through nightly.link for the `dev` branch.

Building from source is documented for desktop only. On Ubuntu the dependencies and build are:

```bash
sudo apt install libssl-dev libmpv-dev libwebp-dev
cmake -B build -DPLATFORM_DESKTOP=ON
make -C build wiliwili -j$(nproc)
```

On macOS the equivalent is `brew install mpv webp` followed by the same `cmake -B build -DPLATFORM_DESKTOP=ON` and `make -C build wiliwili -j$(sysctl -n hw.ncpu)`. On Windows the README uses MSYS2 MinGW64 and installs `mingw-w64-x86_64-gcc`, `mingw-w64-x86_64-cmake`, `mingw-w64-x86_64-make`, `git`, `mingw-w64-x86_64-mpv` and `mingw-w64-x86_64-libwebp` through pacman, then configures with `cmake -B build -G "MinGW Makefiles" -DPLATFORM_DESKTOP=ON`. A system install with a desktop icon adds `-DINSTALL=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr`, and removal after install is done with `sudo xargs -a build/install_manifest.txt rm`.

Cross-compiling the Switch `wiliwili.nro` is documented as a Docker build, with the README describing a local environment as tedious to configure.

## Decoding limits on PS4 and PSVita, and the Switch deko3d trade-off

The hardware ceiling differs by console, and the README is specific about it. The PS4 build supports software decoding only; playing 4k@60 requires enabling low-quality decoding in settings. The PSVita, with hardware decoding enabled, plays 720P landscape video, 480P portrait video and some 1080P original-quality live streams smoothly. The Switch ships an OpenGL build capped at 4k@30, with a separate deko3d build that the README says plays 4k@60 smoothly but may crash occasionally.

That last point is the honest limitation in the project's own words. The faster Switch build is not the default download; you have to fetch it from the nightly link, and you trade stability for frame rate. Anyone choosing the deko3d build should treat occasional crashes as expected rather than a bug report.

A second limitation is the bug-reporting preconditions, which tell you what the project already knows is fragile. Switch users are asked to run the latest Atmosphère and system firmware, use FAT32 on the memory card, and delete `config/wiliwili` from the memory card if the app shows a black screen for too long. Users are asked to verify system time, DNS, and to disable any network proxy before reporting, and to attach a network diagnostic screenshot from Settings, Utilities, Network Diagnostic. That list reads as a map of the failure modes the maintainer sees most often: stale firmware, exFAT cards, wrong DNS and proxies. If your Switch setup does not match those conditions, wiliwili is likely the wrong tool until it does.

## How wiliwili differs from mpv-based Bilibili scripts

The closest alternative for desktop users is a Bilibili plugin or script for MPV, which plays Bilibili URLs inside a general-purpose player. The difference in approach is visible in the architecture: an MPV script gives you playback and nothing else, because MPV is a player, and browsing, search, comments and login stay in the browser. wiliwili embeds MPV as one component and builds the rest of the client around it, with nanovg drawing a full interface for search, the dynamic feed, live streams and the personal page.

That means wiliwili carries a much larger surface area. It has to implement login, favourites, danmaku rendering and a settings UI, and the TODO list shows the cost: searching for users, one-press triple actions, personal homepages, comment jumps to timestamps or search, and interactive video are all still open items. An MPV script does not have that backlog because it does not attempt those features.

The trade-off runs the other way too. An MPV script runs anywhere MPV runs, including a normal desktop with a keyboard, and it inherits MPV's configuration. wiliwili's value is concentrated on devices where MPV alone has no usable interface and no input method for a controller. If you are on a desktop, the script is lighter; if you are on a Switch or a PSVita, there is no script to compare against.

## Maintenance, licensing and what GPL-3.0 means here

The repository is not archived, and the last push was on 2026-04-25, the same day as the v1.6.0 release. The two releases before that, v1.5.3 and v1.5.2, landed on 2025-12-07 and 2025-08-08. That is a release cadence of a few months rather than weeks, and the default branch is `yoga`, with `dev` used for work in progress; the README asks that pull requests target `dev`.

wiliwili is licensed under GPL-3.0. For a desktop user this changes nothing. For anyone embedding it in a product, the licence is the same copyleft family used by many emulators and homebrew projects, and it interacts with the platform toolchains you build against. That is a question for a lawyer, not for this article.

The practical upgrade cost is low on PC, where the Flathub, AUR, COPR and Scoop packages follow releases, and higher on consoles, where you replace files by hand. On Switch, an upgrade means swapping `wiliwili.nro` on the memory card, and if the new build misbehaves, the README's own troubleshooting step is deleting `config/wiliwili` rather than rolling back. The README does not document a rollback path, so keep the previous release archive if you care about reverting.

## Conclusion

Install wiliwili if you want Bilibili on a Switch, PSVita, PS4 or an old PC driven by a controller, and you accept that it is a third-party client with soft-decoding limits on PS4 and a deko3d Switch build the README itself calls crash-prone. Do not adopt it for Android or iOS: the README explicitly excludes those platforms from porting discussion. Before relying on it, check the release page for the newest build, confirm your Switch memory card is FAT32, and run the in-app network diagnostic if playback fails, because network problems are the first thing the project asks you to document.

## FAQ

### What is wiliwili?

It is a third-party Bilibili client written in C++ and designed for gamepad users, running on PC, Nintendo Switch, PSVita, PS4 and Xbox. The README describes it as aiming for a browsing experience close to the official PC client.

### How do I use wiliwili on a Nintendo Switch?

Download wiliwili-NintendoSwitch.zip from the releases page, put wiliwili.nro in the switch directory of the memory card, then hold R while opening any game to reach hbmenu and select wiliwili. A desktop icon can optionally be installed from Settings, Utilities, Tutorial.

### What is the wiliwili PS4 build limited to?

The PS4 version supports software decoding only, and the README says 4k@60 playback requires enabling low-quality decoding in settings.

### What is the wiliwili app?

It is a third-party Bilibili client that runs on PC, Nintendo Switch, PSVita, PS4 and Xbox, with touch, mouse, keyboard and gamepad controls. The README lists search, a dynamic feed, live streams, danmaku playback, comments and QR-code login among its features.

## Sources

- [License: GPL-3.0](https://github.com/xfangfang/wiliwili/blob/yoga/LICENSE)
- [Project website](https://xfangfang.github.io/wiliwili)
- [README](https://github.com/xfangfang/wiliwili/blob/yoga/README.md)
- [Releases](https://github.com/xfangfang/wiliwili/releases)
- [xfangfang/wiliwili on GitHub](https://github.com/xfangfang/wiliwili)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/xfangfang-wiliwili
