Open-source project
tiajinsha/JKVideo avatar
tiajinsha/JKVideo

JKVideo: A React Native Bilibili Client That Ended With a Cease-and-Desist

B React Native. High-looking third-party B station React Native client

4,993 stars2,856 forksTypeScriptMIT

At a glance

What is it?
JKVideo is a feature-rich React Native client for Bilibili, offering DASH playback, danmaku, and live streaming. It stopped development after receiving a legal notice from Bilibili, making it a learning reference rather than a production tool.
Who is it for?
JKVideo suits developers studying React Native media apps, DASH streaming, or Bilibili API integration, but only as a learning reference. Do not use it for production or commercial purposes, as the project received a legal notice from Bilibili and is no longer maintained.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 126 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

A Client Built for Bilibili Enthusiasts

JKVideo targets people who want a third-party mobile client for Bilibili, a Chinese video platform. The README describes it as a 'high-looking' client, which suggests a focus on visual polish. It solves the problem of accessing Bilibili content with a custom interface, offering features like inline video playback, live streaming, and danmaku (comment overlays). The intended audience is likely developers or power users who want more control over their viewing experience than the official app provides. However, the project's own announcement makes clear that this is not a tool for everyday use. The repository received a lawyer's letter from Bilibili, demanding a stop to API calls and imitation behavior. As a result, the project is now frozen, with no new issues or pull requests accepted. This makes it a reference for learning, not a service to rely on.

How JKVideo Works: DASH, Danmaku, and WBI Signing

The core mechanism is converting Bilibili's DASH streams into a local MPD file. The function buildDashMpdUri() generates this MPD, which ExoPlayer then decodes natively. This allows playback of 1080P and 4K HDR with Dolby Vision, according to the README. Danmaku is handled in two ways: video danmaku uses an XML timeline for synchronized display across five lanes, while live danmaku uses WebSocket for real-time reception, including captain markers and gift counts. For authentication, the project implements WBI signing with a hand-written MD5 in TypeScript, avoiding external encryption dependencies. The nav interface caches for 12 hours. This approach is notable because it shows how to reverse-engineer Bilibili's API without relying on heavy libraries, but it also means the code is tightly coupled to Bilibili's changing endpoints.

Setting Up JKVideo: Three Paths, Each with Trade-offs

The README offers three ways to run JKVideo. The quickest is Expo Go: clone, npm install, and run npx expo start, then scan the QR code with the Expo Go app. This works in about five minutes, but the README warns that some resolutions are limited and video playback falls back to a WebView-based solution. The recommended path is a Dev Build, using npx expo run:android or npx expo run:ios. This unlocks native DASH playback for 1080P and above, plus the full danmaku system. The third option is Web, using npx expo start --web, but this requires a local proxy server to bypass Bilibili's image hotlink protection. You start that with node scripts/proxy.js on port 3001. Each path has a clear cost: Expo Go sacrifices quality, Dev Build requires compilation, and Web needs extra infrastructure. For Android users, there is also a pre-built APK in the Releases section, but you must enable installation from unknown sources.

Known Limitations and Where It Fails

JKVideo has several documented limitations. High-resolution playback, specifically 4K and 1080P+, requires a premium Bilibili account. This is a Bilibili API policy, not a code issue, but it limits the audience. FLV live streams are not supported because neither HTML5 nor ExoPlayer handle FLV, so the client automatically selects HLS instead. On the Web, images need a local proxy due to Referer restrictions. More significantly, certain features like dynamic feeds, posting, and liking are not implemented because they require a bili_jct CSRF token. The login QR code expires after ten minutes, which is a minor annoyance. These limitations show that JKVideo is not a complete Bilibili replacement. It is a partial client that covers playback and viewing but not interaction. For a user who wants to comment or post, this is the wrong tool.

Architecture Choices: React Native, Expo, and Zustand

The technical stack is modern and consistent. React Native 0.83 with Expo SDK 55 forms the base. Routing uses expo-router v4 with file-system-based routes and Stack navigation. State management relies on Zustand, which is lightweight and suits the need for cross-component synchronization, especially for the global mini player. Network requests go through Axios, and local storage uses AsyncStorage. Video playback uses react-native-video for DASH, HLS, and MP4, with a fallback to react-native-webview for HTML5 video. The project structure separates concerns into app/ for screens, components/ for UI, hooks/ for data fetching, services/ for Bilibili API wrappers, store/ for Zustand state, and utils/ for helpers like MPD building. This organization is clean and would help a developer navigate the codebase. However, the reliance on Bilibili-specific APIs means the services layer is fragile and would break if Bilibili changes its endpoints.

The Legal Reality: Why Development Stopped

The most important fact about JKVideo is its legal status. The README contains a prominent notice: the project received a lawyer's letter from Bilibili, demanding a stop to API calls and imitation behavior. In response, the repository immediately ceased maintenance and updates, and no longer accepts issues or pull requests. The code remains available for learning reference, but the author explicitly states that it should not be used for commercial or illegal purposes. This is a direct consequence of building a client that mimics a commercial platform's interface and API. For any developer considering a similar project, this is a cautionary tale. The legal risk is not hypothetical; it materialized here. The MIT license covers the code, but it does not protect against Bilibili's intellectual property claims regarding its API and branding. This section is not about the code's quality but about the environment in which it exists.

Alternatives and Comparisons

If you want a Bilibili client without legal risk, the official Bilibili app is the obvious alternative. It supports all features, including 4K, danmaku, and live streaming, without requiring a third-party proxy or reverse-engineered API. The difference is that the official app is closed-source and does not offer the customization that JKVideo provides. Another alternative is to use Bilibili's web interface in a mobile browser, which avoids installation but lacks native performance. For developers, there are other open-source projects that use Bilibili's official API or embed the web player, but these are not named in the README. The key distinction is that JKVideo's approach, directly calling unofficial APIs and building a custom player, is what triggered the legal action. Alternatives that respect Bilibili's terms, such as using official SDKs or webviews, are safer but less flexible.

Maintenance and Upgrade Costs

JKVideo is no longer maintained, so there are no ongoing upgrades. The last push was on 2026-05-12, with version 1.0.19. The README's announcement is explicit: no new issues, no pull requests, and no future updates. This means any bug you find will not be fixed. The cost of using this project is not in updates but in compatibility. Bilibili's API changes frequently, and without active maintenance, the WBI signing and API endpoints will likely break over time. The README mentions that the nav interface caches for 12 hours, but if Bilibili changes the signing algorithm, the client will fail. Additionally, the project depends on specific versions of React Native and Expo, which will age. For a learning project, this is acceptable. For a production app, it is a dead end. The MIT license allows you to fork and maintain it yourself, but that requires ongoing effort to track Bilibili's API changes, which is a significant cost.

Editorial conclusion

JKVideo suits developers studying React Native media apps, DASH streaming, or Bilibili API integration, but only as a learning reference. Do not use it for production or commercial purposes, as the project received a legal notice from Bilibili and is no longer maintained. Before experimenting, verify the legal status of using Bilibili's API in your jurisdiction, and expect that features like 4K playback require a premium account and that Web support needs a local proxy. If you need a stable, legally safe client, consider official Bilibili apps or other open-source projects that respect API terms.

Official sources

  1. Official README
  2. Project repository
  3. Release notes
Community notes

Community notes