# iris: a small video player for Windows and Android

> IRIS is a lightweight video player written in Dart with Flutter, distributed through the Microsoft Store and as per-architecture Android packages, and it plays local files as well as WebDAV and FTP sources. It is built on the Media Kit and FVP playback stacks, it can switch subtitle and audio tracks on the fly, and the repository shows a Flutter project targeting six platforms even though the published builds cover two.

**nini22P/iris** — A lightweight video player | 轻量级视频播放器

- Repository: https://github.com/nini22P/iris
- Stars: 541 · Forks: 37
- Language: Dart
- License: MPL-2.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/nini22p-iris

## A Flutter player with a deliberately small feature list

IRIS is described in one line as a lightweight video player, and the feature list in the README is short enough to read as a design decision rather than a feature list. The project is written in Dart with Flutter, it is published under the MPL-2.0 licence, and the repository is not archived with a last push on 2026-08-23.

The five checked features are the whole product. It is built on the Media Kit and FVP playback stacks, which is how it supports multiple video formats. It reads from local storage, WebDAV and FTP. It has switchable subtitle and audio tracks. It has a playback queue with random and repeat. And it has comprehensive gesture support.

The repository layout says more about the ambition than the README does. There are platform folders for android, ios, linux, macos and windows, alongside lib/ for the Dart code, assets/ for images and fonts, test/, a l10n.yaml for localisation, analysis_options.yaml and devtools_options.yaml for the Flutter tooling configuration, pubspec.yaml and pubspec.lock, a CHANGELOG.md, a PRIVACY.md, a LICENSE file and an inno.iss, which is the Inno Setup script that produces the Windows installer. There is also extract_log.py at the top level, a small log extraction tool that sits outside the Flutter folders.

What the layout and the release table together say is that this is a Flutter application built to run on several platforms but published as a player for two of them. The Windows and Android builds are the ones with download links, and the Microsoft Store is where the Windows build is recommended to live.

## Local files, WebDAV and FTP in one open dialog

The storage support is the part that distinguishes IRIS from a player that opens files from your own disk. The feature list names local storage, WebDAV and FTP, and the keyboard map confirms it as a first class concept rather than an extra: the F key opens the storages screen, and Ctrl + O opens a file while Ctrl + L opens a link.

The separation between open file and open link matters for the remote sources. A local file goes through the file picker, while a link goes through a different path, and for a WebDAV or FTP server the same key opens a location rather than a path on a disk. For a user whose media lives on a NAS, that is the difference between a player that is usable for their library and one that is not.

The playback stack is what makes the format coverage possible. Media Kit and FVP are the two components the README credits, and FVP is the one that does the decoding work. A player built on those has broader format support than a player built on the platform decoders alone, at the cost of the binary size that a bundled decoder implies, which is a trade the project has made in exchange for the lightweight claim and the cross-platform build.

The other thing worth noting is that IRIS presents itself as a player rather than a library. The keyboard map has no search, no metadata browser and no playlist management beyond the queue, and that is consistent with a tool whose selling point is opening a file and playing it, quickly, with the keys you already know.

## A keyboard map that treats a player as a tool

The keyboard control table is the most detailed part of the documentation, and it is what a user actually spends time with.

The basics are where you expect them: Space plays, pauses or selects a file, the arrow keys seek and change the volume, and Enter and F11 both toggle full screen, with Enter also selecting a file. The left and right arrows fast forward and backward, the up and down arrows change the volume, and Ctrl + M mutes.

The interesting bindings are the modifier ones. Ctrl + Left and Ctrl + Right move to the previous and next item, Ctrl + X toggles shuffle, Ctrl + R toggles repeat, and Ctrl + V changes the video zoom. That is a deliberate design: the same gestures that work in a browser for a media element are wired to the features a browser player does not have, which is what makes the player feel like an application rather than an embedded video.

The single letter keys are shortcuts into the other screens: S opens the subtitles and audio tracks, P opens the play queue, F opens storages, and Ctrl + H opens the play history. Ctrl + P opens settings, Ctrl + C closes the current media file, and Alt + X exits the application. F10 toggles always on top, which is the one that tells you about the target user: a player that can sit above other windows while you work is a background utility.

The gesture list mirrors the keyboard map for touch devices. A tap selects or opens a menu, a double tap in the centre plays or pauses, double taps on the left and right edges seek, horizontal swipes adjust the playback progress, vertical swipes on the left side change the screen brightness and on the right side change the device volume, and a long press opens the playback speed selector, with a long press followed by a swipe adjusting the playback speed directly.

## Two distribution channels, and only one of them updates itself

The download table covers two platforms, and the notes in it are the important part.

On Windows there are three routes. The Microsoft Store build is marked as recommended, with auto-updates. There is an installer executable, and there is a portable zip that you unzip and run. The store listing is the one a normal user should take, and the reason is stated: it updates itself.

On Android there are three packages, one per architecture, and the notes are about which device each one is for. IRIS-android-arm64-v8a.apk is for 64-bit devices, IRIS-android-armeabi-v7a.apk for 32-bit devices, and IRIS-android-x86_64.apk for emulators and x86 devices. These are files to sideload rather than a store listing, which is the structural difference from the Windows channel: there is no auto-update path in the table, so an Android user has to check for a new release themselves.

The build script behind the Windows installer is in the repository, inno.iss, which is the Inno Setup configuration, and the continuous integration badge points at a ci.yml workflow that produces these artefacts. The version history is steady: v1.5.0 on 2025-09-18, v1.5.1 on 2025-10-05 and v1.5.2 on 2025-11-01.

The one thing the table does not offer is a build for macOS, Linux or iOS, even though the repository has the platform folders for all three. If you are on one of those systems, this project is a source tree you could build rather than a package you can install, and the README does not describe a release path for them.

## Localisation, privacy and the parts of the repository you will not read

A few repository details tell you what the maintainer cares about. There is a second README, README_CN.md, and a l10n.yaml, so the application is localised rather than English only, with the English README linking to the Chinese one. There is a PRIVACY.md at the top level, which for a player that talks to a NAS over WebDAV or FTP is a more meaningful document than it would be in most projects, since the app handles network credentials and remote locations. There is a CHANGELOG.md, and the release numbering suggests the maintainer keeps it current.

The extract_log.py script at the top level is worth a note too. It sits outside the Flutter folders, so it is a utility rather than app code, and its presence suggests that the project expects users to report problems with logs attached, which is the kind of workflow that a cross-platform player with per-architecture packages needs, since a bug on a 32-bit Android device and a bug on a Windows machine are often different bugs.

The contribution section asks for issues or pull requests directly, and the sponsorship section lists Afdian and Ko-fi, which tells you the project is maintained by an individual with a funding link rather than by a company.

## What the release history does and does not tell you

There is a gap between the last published version and the last commit that is worth checking before you install. The releases are v1.5.0, v1.5.1 and v1.5.2, published between 2025-09-18 and 2025-11-01, and the last push to the repository is dated 2026-08-23. So the source tree has moved on from what is published, by a margin of close to a year, and there is no release that matches master.

That has two consequences. The Windows Store build and the Android packages are both at the last tagged version, so a bug fixed after 2025-11-01 is not in them, and a user on the store channel will not see the fixes until a new version is published. And someone building from source will get code that has never been in a release, with a CHANGELOG.md that stops at the last tag.

The licence is MPL-2.0, with the text in the LICENSE file. For a desktop and mobile application, the practical effect of a file level copyleft is that the MPL covered files stay under MPL-2.0 if you distribute a modified build, while the rest of an application that embeds it is unaffected. A user who simply installs the published binary has no obligation beyond the licence terms, and a distributor who repackages the app, for instance in a container image, is the case where the terms need reading.

The overall shape of the project is a small, well documented player with a complete control scheme and a wide format and source support, kept by one person, published for two platforms, and currently a little behind its own source tree. If you want a player that stays current through the store, take the Microsoft Store build; if you want the fixes that are in the repository but not yet published, you are in the build from source case.

## Conclusion

iris fits a user who wants a small player that opens a file from a NAS over WebDAV or FTP as readily as a local one, and who wants keyboard control rather than a media library application, since the shortcut map is complete and includes a storage picker, a queue and history. It is the wrong tool if you need a maintained package for macOS, Linux or iOS, because the download table only covers Windows and Android even though the source tree contains those platform folders, and it is the wrong tool if you rely on automatic updates on Android, since the APK channel is a sideloaded file. Before you install, read the notes in the download table, because the Microsoft Store build is the one that updates itself, and check the CHANGELOG.md in the repository to see whether the code on master is ahead of the last published version.

## FAQ

### What is IRIS and which platforms does it run on?

IRIS is a lightweight video player written in Dart with Flutter, built on the Media Kit and FVP playback stacks, with switchable subtitle and audio tracks, a playback queue and gesture support. The published downloads cover Windows, through the Microsoft Store or an installer or portable zip, and Android, through per-architecture APK files.

### Can IRIS play videos from a network server?

Yes. The feature list names local storage, WebDAV and FTP support, and the keyboard map has a dedicated storages screen on the F key, along with Ctrl + O to open a file and Ctrl + L to open a link.

### What are the keyboard shortcuts in IRIS?

Space plays, pauses or selects a file, the arrows seek and change volume, Ctrl with the arrows moves to the previous and next item, Ctrl + X toggles shuffle, Ctrl + R toggles repeat, Ctrl + V changes the zoom, S opens subtitles and audio tracks, P opens the queue, F opens storages, F10 toggles always on top and Alt + X exits.

### Is IRIS still being updated?

The repository is not archived and was last pushed on 2026-08-23, but the latest published release is v1.5.2 from 2025-11-01, so the published Windows and Android builds are behind the source tree. The Microsoft Store build updates itself, while the Android APKs are sideloaded files that have to be fetched manually.

## Sources

- [Issues](https://github.com/nini22P/iris/issues)
- [License: MPL-2.0](https://github.com/nini22P/iris/blob/main/LICENSE)
- [nini22P/iris on GitHub](https://github.com/nini22P/iris)
- [README](https://github.com/nini22P/iris/blob/main/README.md)
- [Releases](https://github.com/nini22P/iris/releases)

---

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