Open-source project
xjbeta/iina-plus avatar
xjbeta/iina-plus

IINA+: bullet comments for macOS video players

Extra danmaku support for iina. (iina 弹幕支持

1,391 stars75 forksSwiftGPL-3.0

At a glance

What is it?
IINA+ is a small macOS application that adds danmaku, the scrolling comment overlays used on Chinese video sites, to a set of streaming sites, and it does so for both live streams and on-demand video. It ships as a Swift app built in Xcode, and the per-site support table in the README is the most useful thing it contains.
Who is it for?
Adopt IINA+ if you watch Chinese video platforms on macOS and want the scrolling comment overlay that those platforms normally show in their own apps or web players. Do not adopt it expecting a general purpose player, because the scope is the danmaku layer rather than playback.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 28 days ago.
What is it written in?
Mainly Swift, according to GitHub's language statistics.

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

Editorial analysis

What the project is, and what the README leaves out

The repository is described as extra danmaku support for iina, and the README itself calls IINA+ a tiny macOS application. The description line in the project page is the same idea, with the Chinese text explaining it is danmaku support for iina.

There is an oddity in the README that is worth mentioning rather than skipping. The one-line description of the project reads: IINA+ is a tiny macOS application to ?. The sentence is unfinished, with a question mark where the purpose should be. Given the rest of the document, the intended meaning is that it is a small macOS application for adding danmaku to videos, but the README does not actually say so.

That matters slightly because the danmaku guide is not in the repository. The Download and Guide section points at two places: the IINA-plus Releases page on GitHub, and the Danmaku Guide in the project wiki. The wiki entry is linked with a percent-encoded Chinese path for a page titled as a tutorial with no brain, which suggests the guide is a walkthrough written for a reader who is new to the concept rather than a technical reference.

The project is GPL-3.0 licensed, written in Swift, the default branch is master, and the last push to the repository was on 2026-09-25. The releases are 0.8.34 from 2026-09-25, 0.8.33 from 2026-09-24, and 0.8.32 from 2026-09-21, so the project ships patch releases most weeks.

The support table, and the two columns that disagree

The support status table is the most informative part of the README, and it is worth reading carefully because it has three columns that answer different questions.

| website | live status | video decode | danmaku | |---|---|---|---| | bilibili | - | yes | yes | | bangumi | - | yes | yes | | bililive | yes | yes | yes | | douyu | yes | yes | yes | | huya | yes | yes | yes | | douyin | yes | yes | yes | | cc.163 | yes | yes | no | | live.qq | yes | yes | no |

The first column of meaning is live status, which is about live streams, and the second is video decode, which is about on-demand video, and the third is danmaku, which is the actual feature.

The pattern in the table is that video decode is supported for every site listed, while live status is marked with a dash for bilibili and bangumi, the two sites whose primary content is on-demand anime rather than live streaming. The two sites where danmaku is marked as unsupported, cc.163 and live.qq, are the two NetEase and QQ live platforms, and both still have working live status and video decode.

So the table is not a quality ranking. It is a statement that a live platform with a danmaku protocol available gets one, and a live platform that does not expose one does not, even though the video still plays. The video decode column is uniform, which tells you the hard part, the actual playback, is handled everywhere and the variable part is the comment overlay.

The demo animation is a GIF from 2018, which is a useful timestamp for the project and a hint about the platform it was built on, since a 2018 macOS application of this kind predates the modern IINA.

Building it, which is an Xcode project with a script

The build section is short and gives the requirements plainly: Xcode, latest release.

The sequence is a clone, a change of directory, and a shell script:

bash
git clone https://github.com/xjbeta/iina-plus
cd iina-plus
bash InstallDeps.sh

After that you open IINA+.xcodeproj with Xcode. The script is named InstallDeps.sh, and the convention is that the dependency installation is a shell script rather than a Swift Package Manager step, which is consistent with the rest of the project being a mix of Swift application code and vendored web libraries.

The repository layout shows what is in the box. There is the IINA+.xcodeproj directory and the IINA+ application directory itself, and a HuyaKit/ directory, which is the one per-platform piece visible in the tree and matches the huya row in the support table. There is InstallDeps.sh, a LICENSE, a LicenseForIcons.pdf, and an ISSUE_TEMPLATE.md.

The fact that this is a distributed macOS application rather than a library also shows up in the assets, since there is a payment image directory referenced for donations, and the Donate section points at it. The plugin/ directory and assets/ directory inside the application are where the interface resources live.

The IINA+ Xcode project is a full application, not a library, which means the build produces something you run rather than something you import. That is worth keeping in mind when you read the issue tracker, because a request to support another site is a request to add a new web view and a new protocol handler, not to add a dependency.

The dependency list, and the web libraries

The acknowledgements separate the dependencies into three groups, and the split tells you something about the implementation.

The first group is native Swift libraries. Alamofire for networking, CryptoSwift for cryptography, GzipSwift and SwiftBrotli for compression, Marshal for serialisation, SDWebImage for images, SocketRocket with an SPM patch, Sparkle for the update mechanism, swifter for a lightweight HTTP server, swift-protobuf for the protocol buffers work, and SwiftSoup for HTML parsing.

The second group is web libraries, and it is the tell. CommentCoreLibrary is the danmaku rendering engine that powers the comment overlays, and mpegts.js is a JavaScript implementation of MPEG-TS, which is the streaming format used by Chinese live platforms. Both are the reason the project has a JavaScript layer at all: the danmaku protocol on those platforms is delivered as MPEG-TS carrying H.264 with the comment stream embedded in it, and parsing that in pure Swift would have meant reimplementing a demuxer.

The third group is the sidebar icons, credited to freepik, with a separate LicenseForIcons.pdf at the repository root.

The presence of SocketRocket with an SPM patch and SwiftBrotli, neither of which is a stock Apple or common dependency, tells you this project has been maintained against a moving target for a while. The patch in particular suggests a fork of a networking library was needed to make it work in the way the project needs, and the project keeps that fork public rather than vendoring it silently.

What the danmaku layer actually does

It is worth being clear about what danmaku are and why they need a dedicated client, because it explains the whole architecture of the project.

Danmaku are the scrolling comments that appear over the video on Chinese streaming platforms. A viewer types a short message at a moment in the video, and the message scrolls across the screen at that point in the timeline. On those platforms they are not decoration. They are the comment layer, and a player without them is missing a large part of the experience, the same way watching a stream without chat is watching a broadcast.

The technical reason a dedicated implementation is needed is that the comments are carried inside the video stream rather than in a separate chat channel. They arrive as part of the MPEG-TS data, interleaved with the video, and the client has to demux the stream, extract the comment records, and render them on a separate layer that is timed against the video. That is what CommentCoreLibrary does, and it is why mpegts.js is in the dependency list, since the demuxing of MPEG-TS in a web context is what that library provides.

The consequence is that IINA+ is not a video player in the usual sense. It is a player with the comment layer added, which means it also has to handle the video decoding, the seeking, and the playback controls that any player needs. The video decode column in the support table is the sign of that: the project has to decode the video correctly itself, because a native macOS player cannot decode the raw stream from those platforms without the same demuxing work.

Release cadence, and what to expect from the repository

The release pattern is worth noticing, because it tells you what kind of project this is.

The three most recent releases are 0.8.34, 0.8.33, and 0.8.32, published on three consecutive days from 2026-09-21 to 2026-09-25. The last push to the repository matches the newest release to the minute, which is normal for a project where the release is the commit.

There are no GitHub releases listed, and no version tags beyond the release list, so the releases themselves are the versioning record. The version stays under 1.0, which for a macOS application distributed outside the App Store is a reasonable place to be, since there is no App Store review to satisfy and no promise of API stability to make.

What the release cadence implies is that this is maintained reactively. A release every few days across many sites means that something on one of those sites changes often enough to require a fix, and the fix ships immediately. That is a very different maintenance profile from a project that makes a scheduled release, and it is worth factoring in when you decide how much to depend on it.

The project is GPL-3.0 licensed, which is the right licence for a macOS application that patches around platform behaviour and therefore needs to stay forkable, and the repository has an issue template at the top level, which suggests issues are expected to arrive in a structured form.

The demo GIF dates from October 2018, and the version is at 0.8.34, so the visual design has been stable for a long time even as the underlying protocol work continues.

Editorial conclusion

Adopt IINA+ if you watch Chinese video platforms on macOS and want the scrolling comment overlay that those platforms normally show in their own apps or web players. Do not adopt it expecting a general purpose player, because the scope is the danmaku layer rather than playback. Verify first which of the supported sites you actually use, since the danmaku column in the support table has gaps that the live status column does not.

Frequently asked questions

What does IINA+ add to video playback on macOS?

It adds danmaku, the scrolling comment overlays used on Chinese video platforms, to a set of supported sites, for both live streams and on-demand video. The support table lists bilibili, bangumi, bililive, douyu, huya, douyin, cc.163 and live.qq.

How do I build IINA+ from source?

You need the latest release of Xcode, then clone the repository, change into the iina-plus directory, run bash InstallDeps.sh, and open IINA+.xcodeproj with Xcode. The IINA+ directory in the repository holds the application itself and there is a separate HuyaKit directory.

Which sites does IINA+ support danmaku for?

The support table marks danmaku as supported for bilibili, bangumi, bililive, douyu, huya and douyin. For cc.163 and live.qq the live status and video decode columns are supported but danmaku is not, while every site listed has video decode.

Why does IINA+ depend on JavaScript libraries?

The web library group is CommentCoreLibrary, the danmaku rendering engine, and mpegts.js, a JavaScript MPEG-TS implementation. They are needed because the comments arrive inside the video stream as MPEG-TS data rather than over a separate chat channel, so the stream has to be demuxed before the comment records can be extracted.

How often is IINA+ released?

Frequently, and reactively. The three most recent releases are 0.8.34, 0.8.33 and 0.8.32 published on consecutive days in September 2026, and the last push to the repository matches the newest release, which suggests fixes ship as soon as a site changes.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. xjbeta/iina-plus on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/xjbeta-iina-plus.svg)](https://hysenlabs.com/projects/xjbeta-iina-plus)