# Bilibili-Old: rebuilding the pre-2020 Bilibili web pages in TypeScript

> Bilibili-Old is a Manifest V3 extension and a Tampermonkey userscript that swaps the current Bilibili interface for the older one, including the classic player, and it is maintained by a single author working from archived pages and a hand written log of Bilibili's changes.

**MotooriKashin/Bilibili-Old** — 恢复旧版Bilibili页面，为了那些念旧的人。

- Repository: https://github.com/MotooriKashin/Bilibili-Old
- Stars: 685 · Forks: 61
- Language: TypeScript
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/motoorikashin-bilibili-old

## A second Bilibili interface built on archived pages

Bilibili-Old exists because Bilibili removed its old web interface and some people wanted it back. The project description says it restores the old Bilibili pages for those who miss them, and the README frames the whole thing as two deliverables: a Manifest V3 browser extension and a Tampermonkey userscript, both of which bring back the old layout including the small television player of the older era. The scope is a restoration project, not a client. It does not connect to Bilibili with your own credentials in any new way, it takes the modern site and presents it through the old structure, using the Wayback Machine as a source of archived pages and an earlier user script called bilibiliOldPlayer as the prototype. The audience is a specific one: long time users who want the old home page, the old bangumi pages, the old ranking, and the old player, and who are willing to run third party code in their browser to get them. The code is TypeScript, the licence is MIT, and the project is not archived, with the last push on 2026-09-30.

## Two installation paths, and only one of them updates itself

The README offers two mutually exclusive routes. The userscript route asks you to install the Tampermonkey script manager, then install the script from its GreasyFork page, script number 394296, and then open any Bilibili page and click the floating gear icon in the lower right corner to adjust settings, with the note that the gear hides itself and reappears when the mouse moves back over its position. The extension route is more manual. The extension is not published to any extension store, so you have to use the load unpacked workflow: download the archive named bilibili-old from the latest workflow on the Actions page, unpack it to any directory, turn on developer mode on the extensions page in Chrome, and point the load unpacked button at that directory, then use the extension icon to open the options page. The gap between the two routes matters. The Tampermonkey script is served by GreasyFork, while the extension does not auto update, and the README tells you to download the newest build from Actions, unpack it over the old files, and restart Chrome by hand.

## Two build targets sharing one package.json

The repository builds each deliverable separately, and the script names in package.json make the structure obvious: chrome and tampermonkey targets for the two main artifacts, plus a third one called comment, and a tsc script that type checks without emitting, running tsc --noEmit against the configuration in src/tsconfig.json. The build tooling is esbuild, with TypeScript and fs-extra for development. The runtime dependencies are small and tell you what the project actually does: protobufjs handles the protobuf encoding that Bilibili's newer danmaku format requires, md5 and fflate cover hashing and compression, and quill-delta-to-html-cb converts the delta format used in comment payloads into HTML. Two local file dependencies, @jsc/chrome and @jsc/tampermonkey, point at the chrome/ and tampermonkey/ directories, which is how one source tree serves two different hosts with different APIs.

```json
  "scripts": {
    "tsc": "tsc --noEmit -p ./src/tsconfig.json",
    "chrome": "node chrome/build.mjs",
    "tampermonkey": "node tampermonkey/build.mjs",
    "comment": "node tampermonkey/comment/build.mjs"
  }
```

The documented development environment is Windows 11 Pro, Chrome 108, Visual Studio Code 1.74.2, and Node.js v19.1.0, and a developer document is linked from the README. There are no GitHub releases for the project at all, so the Actions artifacts are the only binary distribution channel.

## The player work: codecs, danmaku, and region limits

The feature list for the restored pages is long, and the player is the densest part. It offers switching between AVC, HEVC and AV1 sources, CC subtitles, and a segmented progress bar. It replaces UPOS servers, and it removes playback restrictions for the Hong Kong, Macau, Taiwan, app only and Southeast Asian regions, with a Thai region case called out. A long automation list covers expanding the danmaku list, scrolling to the player, wide screen mode, turning danmaku off, starting playback, web fullscreen, remembering playback speed, and skipping the charging thank you message. Danmaku support goes further than the old site had: protobuf format danmaku, reverse lookup of who sent a danmaku, interactive danmaku, online and local loading, and code danmaku. Local video file playback is also listed. The reverse lookup work is credited to a CRC rainbow table approach and to a separate project that reversed the CRC algorithm, and the whole danmaku area has its own top level directory in the repository.

## Old pages standing in for features that no longer exist

Not everything can be restored honestly, and the README marks those cases by crossing the entries out. Playlist pages and mylist pages are crossed out as no longer available, and the comment pagination support is crossed out too, because Bilibili replaced the paginated comment list with a waterfall layout. What the project does instead is simulate the missing features on top of the old page. Video collections are simulated using playlists, and the play all button is simulated the same way. A batch of other restorations is listed under fixes and modifications: the old top bar is reinstated globally, uploader lists work, dynamic banners render, bangumi episode data is restored, the home page keeps its personalised recommendations, the Hong Kong, Macau and Taiwan new anime schedule is available, spaces of restricted uploaders can be visited, the account registration time is shown, album addresses are restored, information about deleted videos can be retrieved, BV identifiers are converted to av numbers, junk query parameters are stripped from URLs, log reporting is intercepted, and bangumi search works for the Hong Kong, Macau and Taiwan catalogue.

## Live streams, downloads, and blocking what Bilibili sends

Three areas go beyond cosmetics. For live streams the project blocks P2P upload, blocks idle detection, and filters live replays out of the dynamics feed. For downloads it offers video, cover image, danmaku and subtitle downloads, with the download panel design credited to a YouTube Links user script. For privacy it intercepts log reporting, which is the telemetry Bilibili's web client sends about your activity. The acknowledgements section gives the full dependency picture, including toastr for the floating notifications the script shows, the Wayback Machine for the archived page sources, and two third party interface projects, BiliPlus and Bilibilijj, which supply some of the endpoints the restored pages call. That last point deserves attention: the restored front end leans on third party services for parts of its data, so a lookup is not purely a local rendering of an old layout.

## The list of Bilibili changes that broke each feature

The most valuable part of the repository is a dated log titled as notes on Bilibili updates, which records what Bilibili changed and therefore what the script has to work around. It starts on 2019-12-09 with the deprecation of old av numbers and the bangumi redesign, then notes 2020-03-23 when BV numbers arrived and av numbering became non sequential, 2020-04-28 when the native old page disappeared for good, and 2020-05-21 when protobuf danmaku was enabled and a large amount of advanced and code danmaku was lost along with parts of the XML danmaku after the 90 minute mark. It continues with the enforcement of comment API changes on 2022-02-16, which made it impossible to fetch the number of comment floors, and ends on 2022-11-02 with the retirement of the flv container for new videos. The value of this log is that it explains why features fail, and it doubles as a maintenance signal, since every entry is a claim that the author has checked current behaviour.

## Known problems the project says it cannot fix

The README is unusually blunt about what does not work, and it deserves to be read before anyone installs this. The list of known issues opens by saying the following problems may be, and will long remain, unfixable. First, the new page may flash by for a moment before the old one is restored. Second, the restored page can be broken by leftover scripts and styles from the new version, and the suggested mitigation is a refresh. Third, the original old player can no longer obtain the danmaku pool beyond 90 minutes, so the reconstructed player should be used instead. Fourth, and most seriously, the charging and coin payment features may have lost maintenance, and the instruction is not to use them or to move to the new page instead. Fifth, some features cannot be fully restored because the underlying APIs no longer work, and the project can only look for substitutes. On top of that, there is no automatic update path for the extension, which turns every Bilibili side change into manual work for the user.

## Conclusion

Adopt Bilibili-Old if you specifically miss the pre-2020 Bilibili layout, you use Chrome on Windows, and you are willing to install an unpacked extension or a userscript that rewrites third party interfaces. Skip it if you need features the old interface cannot provide, especially payments, since the project states that charging and coin payment may have lost maintenance, and if you need automatic updates, because the extension is not published to any store and has to be replaced by hand. Verify first that the pages you care about still work, since the author lists flash of the new page and layout breakage as ongoing problems with no fix in sight.

## FAQ

### How do I install Bilibili-Old in Chrome?

You can install the Tampermonkey userscript from its GreasyFork page, script 394296, and then click the floating gear icon in the lower right of any Bilibili page. The extension route is manual because it is not published to any store: download the bilibili-old archive from the latest Actions workflow, unpack it, turn on developer mode, and load the unpacked directory.

### Does the Bilibili-Old extension update automatically?

No. The README states that the extension version does not update automatically, and instructs you to download the newest build from the Actions page, unpack it over the previous files, and restart Chrome.

### Which Bilibili pages does Bilibili-Old restore?

The feature list covers the home page, av and BV video pages, bangumi pages, watch later, the site wide ranking, the embedded player, columns and search. Playlist pages and mylist pages are crossed out in the list because they can no longer be restored.

### Is it safe to use charging and coin payment in Bilibili-Old?

The known issues section warns that charging and coin payment features may have lost maintenance and tells you not to use them, or to move to the new page instead.

## Sources

- [Issues](https://github.com/MotooriKashin/Bilibili-Old/issues)
- [License: MIT](https://github.com/MotooriKashin/Bilibili-Old/blob/master/LICENSE)
- [MotooriKashin/Bilibili-Old on GitHub](https://github.com/MotooriKashin/Bilibili-Old)
- [README](https://github.com/MotooriKashin/Bilibili-Old/blob/master/README.md)

---

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