Open-source project
BrisklyDev/brisk avatar
BrisklyDev/brisk

Brisk spawns connections as a download progresses and reassigns them when they finish

Ultra-fast, modern download manager for desktop

1,546 stars61 forksDartGPL-3.0

At a glance

What is it?
Brisk is a Flutter download manager for Windows, macOS and Linux whose engine grows connections during a transfer rather than opening them all at once, and which ships as Flatpak, Snap, AUR package and tarball. The browser extension lives in a separate repository.
Who is it for?
Brisk suits someone moving large files on a desktop who wants more aggressive parallel downloading than a browser offers and prefers a small, actively packaged application to a browser's built-in manager. Do not adopt it for headless or scripted downloading, since it is a GUI application with no documented command line, and do not adopt the browser integration without reading the separate extension repository first.
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 35 days ago.
What is it written in?
Mainly Dart, according to GitHub's language statistics.

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

Editorial analysis

Connections grow during the transfer, not before it

The download engine is the part of Brisk worth understanding, and the README describes four behaviours.

Dynamic connection spawn is the first. A download starts with a single connection, and as it progresses new connections are added on the fly. The stated purpose is that a higher number of connections is used only when necessary, which matters for two opposite reasons: a small file does not need twenty connections, and a server may rate-limit or block a client that opens twenty connections immediately.

Dynamic connection reuse is the second. After a connection finishes receiving its designated byte range, it is immediately reassigned to help another connection, so the engine keeps as many active connections as it can and speeds stay near their peak. The important detail is byte ranges: the transfer is segmented, each connection owns a range, and a finished connection takes a new range rather than closing. That is the difference between a segmented parallel downloader and a set of independent files.

Automatic connection reset is the third. Hanging connections are reset automatically, which is the failure mode parallel downloaders hit when a server stalls one segment while the rest continue. Without it, one dead segment stalls the whole file.

The fourth is M3U8 stream capture from the browser, which needs the extension and is covered separately.

How the engine is built is also stated: entirely from scratch using Dart's `http` package, without external libraries or download utilities such as aria2. That is a deliberate trade. Reimplementing segmented downloading means owning the retry, resume and range-validation logic, and it means no feature parity with mature engines for free.

Six install routes and a Linux prerequisite list

The README's installation table covers Windows x86_64, macOS on x86_64 and arm64, Flatpak on x86_64 and aarch64, Snap on amd64, an AUR package for Arch on x86_64, and a Linux tarball for x86_64.

The distribution matters more than usual here, because of the Linux prerequisites. Two system libraries are needed:

- keybinder-3, provided as `libkeybinder-3.0-0` on Debian and Ubuntu, `keybinder3` on Fedora, RHEL and CentOS, and `libkeybinder3` on Arch - appindicator3, provided as `libayatana-appindicator3-dev` on Debian and Ubuntu, `libayatana-appindicator-gtk3` on Fedora, RHEL and CentOS, and `libappindicator-gtk3` on Arch

The README marks the prerequisites note as IMPORTANT and scopes it to the tarball. That scoping is the practical point: the Flatpak and Snap packages carry their own runtime and libraries, so a distribution-agnostic package avoids this class of problem entirely, while the tarball assumes you will satisfy the dependencies yourself.

Two platform notes are worth carrying forward. On Windows, a "Windows Protected your PC" warning appears and the README instructs you to click more info and run anyway, which is the expected path for an unsigned or differently signed build. On Linux specifically, the appindicator library is what gives Brisk a system tray icon, so without it you lose tray integration even if the application starts.

Building from source needs the Flutter SDK v3.32.0, and the README gives a single platform-selecting command:

bash
flutter build macos|windows|linux

The repository layout confirms the Flutter structure with `linux/`, `macos/` and `windows/` platform directories, alongside `lib/`, `pubspec.yaml` and `analysis_options.yaml`. The repository also contains `brisk_download_engine/`, `brisk_auto_updater/`, `hotkey_manager/`, `tray_manager/`, `window_manager/` and `pluto_grid/`.

The browser extension is a separate project

Everything about browser integration lives in another repository, `brisk-browser-extension`, and the README refers you there for installation rather than describing it here.

What the extension is claimed to do is listed. It captures download requests from the browser and adds them directly to Brisk, which is the basic intercept case. It extracts all download links from a selected text area and adds them at once, which is the bulk case and the one most browsers cannot do. And it captures m3u8 video streams from the browser, which is what feeds the M3U8 support in the engine.

The README also lists video stream downloading from the browser with soft-subbing support among the key features, which is a specific and non-obvious capability: it implies subtitle tracks attached to a stream are preserved rather than dropped, which matters if you are archiving a lecture series rather than saving a clip.

Two practical notes. The extension is named for interception, so the README advises disabling other download manager extensions for it to work properly, which is a hint about manifest conflicts. And the repository identity is inconsistent across the README: the badges point at `AminBhst/brisk` while the repository under review is `BrisklyDev/brisk`, and the browser extension link points at the AminBhst organisation. That is worth resolving before you file an issue against the wrong place.

Remaining features are more conventional: download queues and scheduling, and a custom hotkey that adds a download URL from the clipboard. The `hotkey_manager/` package in the tree is the implementation of that last one.

What a GUI download manager cannot do for you

The limitation here is structural rather than a missing feature, and it should be stated plainly before anyone reaches for Brisk.

Brisk is a desktop GUI application. There is no documented command line interface, no documented headless mode and no documented scripting surface in the README. Every operation described, from starting a download to scheduling a queue, is expressed through a window or a tray icon. If your requirement is a download that runs on a server, in a container or on a schedule, this is the wrong category of tool.

That comparison is not a criticism. For scripted downloads, consider a tool designed for non-interactive automation.

The second limitation concerns what the parallel engine can actually deliver. Segmenting a download across many connections helps when the bottleneck is per-connection throughput or a per-connection limit, which is common on consumer internet and on CDNs. It does not help when the bottleneck is the link itself, when the server caps total bandwidth per client, or when the server does not honour byte ranges at all. In the last case a segmented downloader cannot reassemble correctly, and the README does not describe how Brisk detects or handles a server that ignores `Range` headers. On any source where ranges are not supported, fall back to a single-stream tool.

A third point is about integration. Because the browser integration lives in a separate extension repository, the two halves can drift. There is no shared version number in the README tying an extension build to a Brisk build, so treat a mismatch as a possibility when the integration misbehaves.

Licence, packaging signals and release cadence

The licence is GPL-3.0, with the LICENSE file at the repository root and the README badge pointing at the same licence. For a desktop application distributed as binaries that is unremarkable, but it does mean anyone redistributing Brisk, including a Linux distribution package, is working under copyleft terms and should confirm the obligations before shipping.

The packaging signals are the strongest evidence about the project's intent. Alongside the repository entries there is `com.aminbhst.Brisk.yml`, which is a Flatpak manifest, and a `snap/` directory, which is Snapcraft packaging. Those two files, plus `distribute_options.yaml` and `scripts/`, indicate someone is actively maintaining several distribution formats rather than leaving it to packagers. The Flathub and Snapcraft release tags in the history reinforce that: v2.3.8.flathub and v2.3.8.flathub.fix are separate tags for packaging-specific fixes.

That split has a consequence for upgrades. A packaging fix published as its own tag is not an application release, so a script that tracks tags for version numbers will see versions that contain no functional change.

On cadence: the repository is not archived, and the last push was on 2026-09-18, the same day as the v2.3.9 tag. Before that sit the two Flathub tags from 2025-11-21, so application releases are less frequent than the package tags suggest.

Community channels are Discord, Telegram and a code of conduct file in the repository root. There is no contributing guide beyond the statement that contributions are welcome, so if you want to send a patch, expect to ask on Discord first.

Editorial conclusion

Brisk suits someone moving large files on a desktop who wants more aggressive parallel downloading than a browser offers and prefers a small, actively packaged application to a browser's built-in manager. Do not adopt it for headless or scripted downloading, since it is a GUI application with no documented command line, and do not adopt the browser integration without reading the separate extension repository first. Verify first that your Linux distribution has keybinder-3 and an appindicator library available, since the tarball build needs them and the Flatpak and Snap packages bundle them instead.

Frequently asked questions

How do I install Brisk on Linux?

Three routes are listed: a Flatpak from Flathub for x86_64 and aarch64, a Snap for amd64, and a tarball for x86_64. The tarball needs system libraries: keybinder-3 and an appindicator3 library, whose package names differ per distribution and are listed in the README.

What libraries does Brisk need on Linux?

keybinder-3, packaged as libkeybinder-3.0-0 on Debian and Ubuntu, keybinder3 on Fedora, RHEL and CentOS, and libkeybinder3 on Arch. Plus an appindicator3 library: libayatana-appindicator3-dev on Debian and Ubuntu, libayatana-appindicator-gtk3 on Fedora, RHEL and CentOS, and libappindicator-gtk3 on Arch.

How does Brisk's download engine handle connections?

It starts with a single connection and adds more as the transfer progresses, reusing a connection for a new byte range immediately after it finishes its own, and resetting hanging connections automatically. The engine is written from scratch on Dart's `http` package rather than using aria2 or another external downloader.

Where is the Brisk browser extension?

In a separate repository, brisk-browser-extension, which the README refers to for installation. The extension captures download requests, extracts links from a selected text area, and captures m3u8 streams for the app to download.

Can I use Brisk for scripted or headless downloads?

Not as documented. Brisk is a desktop GUI application with queues, scheduling and a tray icon, and the README documents no command line interface or headless mode. For automation, consider a tool designed for non-interactive use.

What license is Brisk released under?

GPL-3.0, with the LICENSE file at the repository root. The repository also ships a Flatpak manifest, a snap directory and packaging options files, and the licence file is named in the repository entry list.

Official sources

  1. BrisklyDev/brisk on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
  5. Releases
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/brisklydev-brisk.svg)](https://hysenlabs.com/projects/brisklydev-brisk)

Was this useful?