· 5 min read · Bloomee

BloomeeTunes v3.0: A Complete Rebuild Around the .bex Plugin System

BloomeeTunes v3 banner

Version 3.0.0 is the biggest release in BloomeeTunes history. The headline features — local music support, a global 10-band equalizer, and crossfade — are the ones people asked for most loudly. But the real work in v3 is architectural: a ground-up rewrite of how Bloomee connects to music sources, how it manages downloads, how it handles queue transitions, and how your data is stored and migrated. This post covers all of it, based on the actual release notes from the repository.

The .bex Plugin System

Every music source in Bloomee used to be baked into the app. YouTube Music, JioSaavn, and any future source required a code change and a full release cycle. That model was the ceiling on what Bloomee could become.

V3 replaces it entirely with .bex — a Rust-backed plugin format. Plugins are distributed as packages with repository manifests, downloaded and updated independently from the app itself. The integration path is now fully plugin-based, and legacy source-specific identifiers are retained only where required for migration compatibility from v2.

The Rust backing matters for reasons beyond performance. The .bex system is sandboxed — a plugin that misbehaves cannot crash the main application. Auto-updating is built in at the plugin level, so a source that changes its API can ship a fix without waiting for an app update. This is what opens Bloomee to community-built sources without requiring merge access to the main repo.

The download workflow also moved to Rust internals in v3, gaining an improved tracking pipeline in the process. The old download manager in v2 was rewritten once in v2.12.3 and again more completely here.

Local Music Support

Until v3, Bloomee was a streaming player. You could download tracks for offline use, but your existing MP3, FLAC, and OGG files — already on your device — lived in a separate app. That is now fixed.

V3 introduces full browsing and playback of local music files directly from your device. The critical implementation detail is unified playback: local file paths and remote plugin resolutions are handled by the same audio pipeline. You can queue a local FLAC alongside a streamed track and the transition is seamless. The app treats them as the same kind of thing.

Cross-plugin fallbacks also apply to local content. If a streamed track becomes unavailable mid-queue, Bloomee now has stronger recovery paths — falling back to an alternative source or replacement track rather than hitting a dead state.

BloomeeTunes player view

Global Equalizer

The 10-band equalizer was one of the most-requested features across versions. In v3 it is available on all devices — Android, Windows, and Linux — and applies globally to all sources, including local files.

Earlier versions had partial EQ support that only applied to streaming sources. The unified audio pipeline in v3 is what makes a truly global EQ possible: since both local and streamed audio go through the same processing layer, a single EQ instance covers everything.

Crossfade Everywhere

Crossfade has existed in earlier versions of Bloomee but only worked between certain source types. V3 makes it universal, defaulted to 2 seconds, and it applies to all source transitions: stream-to-stream, local-to-stream, stream-to-local, and local-to-local.

The underlying work was a full refactor of the queue, transition logic, and crossfade flow to eliminate edge-case dead states, skip/advance race conditions, and stale resolver transitions that caused the previous implementation to be unreliable across source types.

The Road From v2 to v3

The v3 release did not arrive from nowhere. The architecture was built progressively through the late v2.x series:

v2.12.3 rewrote the download manager from scratch, added Windows native media controls, rebuilt backup/restore to use a stable JSON format, and added in-app changelogs. This was the first major foundation work.

v2.12.4 added bulk download for entire playlists at once, queue management controls (showPlayNext, showAddToQueue), and recently-played tracking with flexible thresholds.

v2.12.5 migrated to Flutter 3.35.4, removed concatenated audio sources for smoother playback, added automatic network failure recovery with intelligent song skipping, and patched Isar database compatibility.

v2.13.2 brought the full-screen lyrics viewer, library search, a new progress bar, a redesigned Up Next panel, improved touch support, and switched to MediaKit for Android media handling.

v2.13.3 fixed the player disposer bug affecting Realme and Oppo devices and added desktop shortcut visual feedback.

V3 builds the plugin architecture on top of these foundations.

BloomeeTunes lyrics view

Startup and Settings Accuracy

V3 also fixes a class of bugs that were subtle but annoying: UI default settings that diverged from runtime behaviour on first launch. Stream quality reverting to a lower setting after opening the app, or crossfade disabling itself on the first run, are both fixed. Settings now initialise once and stay correct.

What the Version Number Means

BloomeeTunes uses Flutter’s build number format: v3.0.0+197 means version 3.0.0, build 197. The app has shipped 197 builds since it started. Going from build 188 (v2.13.3) to build 197 (v3.0.0) represents 9 internal builds of integration and testing for the plugin architecture before the stable release.

Getting v3

Download from the official releases page on GitHub or from SourceForge. Android ARM64, Windows installer, and Linux AppImage are all available. The only official sources are GitHub, SourceForge, and IzzyOnDroid — the README has a specific warning about fake sites distributing modified APKs.

BloomeeTunes playlist view

H
· 877 words · 5 min read