flutter_midi_command
A Flutter plugin for sending and receiving MIDI messages between Flutter and physical and virtual MIDI devices.
1.1.2
4.7K downloads/mo
#3945 most downloaded on pub.dev
InvisibleWrench/FlutterMidiCommand
What this package is like to depend on
Last release 7 days ago
17 Aug 2026
Ships unpredictably
gaps range from 8 days to 1.2 years
Nearly every release is documented
notes for 63 of 64 stable releases
1 version withdrawn
withdrawn after publishing
8 years old
72 releases · first in 2018
14 releases in the last 12 months
see the full history below
Release timeline
72 releases · Nov 2018 to Aug 2026Releases
latest 60 of 72-
1.1.217 Aug 2026Release notes
Open source →- FIX(ble): retry a connection sequence whose link was torn down mid-handshake. universal_ble reports that as
deviceDisconnectedrather than a GATT status, so the retry shipped in 1.1.1 did not apply. Unlike a GATT status the code cannot arise from a peripheral that was never reachable, so it is honoured on every platform. - Update federated package constraints to
^1.1.2.
- FIX(ble): retry a connection sequence whose link was torn down mid-handshake. universal_ble reports that as
-
1.1.117 Aug 2026Release notes
Open source →- FIX(ble): retry the whole connection sequence through transient Android
GATT_ERROR133 failures, including failures during service discovery and notification subscription. - FIX(ble): recognise operation-specific GATT failures from their details and preserve typed pairing-removal errors through connection-stage wrappers.
- FIX(ble): avoid resetting connection priority when it was never raised during a failed connection attempt.
- FIX(ble): handle
stopScanfailures when Bluetooth is switched off during a scan instead of surfacing an unhandled asynchronous error. - Update federated package constraints to
^1.1.1.
- FIX(ble): retry the whole connection sequence through transient Android
-
1.1.012 Aug 2026Release notes
Open source →- FIX(darwin): read every packet of a coalesced
MIDIPacketListfrom the original list memory. Packets after the first were read from unrelated memory and anything over 256 bytes was truncated, affecting virtual devices; native devices already had a correct implementation. Virtual device timestamps now report nanoseconds, matching native devices. - FIX(ble): serialize writes per device so two SysEx messages sent in quick succession cannot interleave their BLE packets. The peripheral reassembles a multi-packet SysEx statefully, so interleaving silently merged two messages into corruption — the failure mode behind bulk transfers that break partway through with no BLE-level error.
- FEAT: add
MidiCommand.sendDataAwaitingDelivery, completing once the transport has written the data rather than queued it, so a bulk transfer can pace against the link rather than a fixed delay. Only the BLE transport observes delivery; platform-routed devices complete immediately, as withsendData. - FEAT(ble): size BLE MIDI packets from the negotiated ATT MTU and request a low-latency connection interval, both on by default. Together these cut the number of BLE writes per SysEx and lower MIDI latency. Note that they do not speed up a request/response protocol whose cost is the peripheral's turnaround: measured against a GEWA piano, the write path was ~1.4 ms of a ~495 ms per-packet round trip. New
UniversalBleMidiTransportflagsuseNegotiatedMtuandrequestHighPerformanceConnectionopt out. These apply on Android, Windows and Linux; on iOS and macOS a connected device is handed over to CoreMIDI, which then owns the write path. - FEAT: add
MidiCommand.onBleWriteFailure, reporting BLE writes the platform rejected.sendDatais fire-and-forget, so this is the only signal that a packet was dropped. Bulk transfers that split a payload across many SysEx messages should treat any event as a corrupted transfer. Silent on Apple platforms for devices handed off to CoreMIDI, which has no equivalent per-write signal, so it complements rather than replaces device-level acknowledgements. - FIX(ble): emit the BLE MIDI timestamp byte before the closing
0xF7in every SysEx packet. It was omitted whenever the remaining body was exactly one byte short of the packet size. - BREAKING (implementers only):
MidiBleTransportgainedonWriteFailure. Classes usingimplements MidiBleTransportmust declare it;extendsand all API consumers are unaffected. See the platform interface changelog. - Update federated package constraints to
^1.1.0.
- FIX(darwin): read every packet of a coalesced
-
1.0.906 Aug 2026Release notes
Open source →- FIX(ble): stop the opportunistic MTU request from stalling Android connections. It was issued from the connection callback and, because universal_ble runs every GATT command through one queue, it sat in front of service discovery long enough for Android to drop the link with
GATT_ERROR133 (surfaced asUnknown Error 133). - FIX(ble): retry the BLE link once through a transient Android
GATT_ERROR133, and keep the device in the transport cache across that retry so received data still resolves to it. - Update federated package constraints to
^1.0.9.
- FIX(ble): stop the opportunistic MTU request from stalling Android connections. It was issued from the connection callback and, because universal_ble runs every GATT command through one queue, it sat in front of service discovery long enough for Android to drop the link with
-
1.0.830 Jul 2026Release notes
Open source →- FIX(darwin): report CoreMIDI destinations as
inputPortsand sources asoutputPortsso port direction matches Android and the public device-owned API contract (#164). - FIX(android): disable Kotlin incremental compilation for the Android implementation so Windows builds do not fail when the app project and Pub cache are on different drives (#163).
- Update federated package constraints to
^1.0.8.
- FIX(darwin): report CoreMIDI destinations as
-
1.0.720 Jul 2026Release notes
Open source →- FIX: export
MidiPairingInfoRemovedExceptionfrompackage:flutter_midi_command/flutter_midi_command.dart. - Update federated package constraints to
^1.0.7.
- FIX: export
-
1.0.618 Jul 2026Release notes
Open source →- FIX: a disconnect that races an in-flight connect no longer surfaces as an unhandled async error on
PlatformDispatcher.onError(#160). - FIX(ble): surface a typed
MidiPairingInfoRemovedExceptionwhen a peripheral has removed its pairing information (iOSCBErrorPeerRemovedPairingInformation), best-effort clearing the stale bond, instead of leaking a rawUniversalBleException. - FIX(android): don't crash when a connected USB MIDI device is unplugged;
ConnectedDeviceteardown now survives theIOException: EPIPEfrom a removed device (#158). - FIX(platform): don't clobber a device's transitional connecting/disconnecting state when listing devices (#159).
- FIX: a disconnect that races an in-flight connect no longer surfaces as an unhandled async error on
-
1.0.513 Jul 2026Release notes
Open source →- FIX(ios): keep usable non-bonding BLE MIDI connections alive when no CoreMIDI counterpart appears, and perform bonded-device handoff as an optional atomic background upgrade (#157).
- FIX(ble): strip the BLE timestamp byte from received SysEx so SysEx round-trips on Android/Linux/Windows/Web (was corrupting the payload before 0xF7).
- FIX(ble): make scan start/stop idempotent to avoid redundant OS scan calls that can desync the Android LE scanner.
-
1.0.413 Jul 2026Release notes
Open source →- FIX(ci): track pubspec_overrides.yaml so melos bootstrap works on clean checkouts.
- FIX(ble): hide registered devices until rediscovered.
- FIX(ble): remove stale BLE devices on disconnect.
- FIX: await BLE MIDI readiness in connectToDevice.
- FIX: bluetooth discovery with latest Universal_ble.
- FIX: suppress duplicate BLE packets after the CoreMIDI handoff.
- FIX: subscribe to BLE MIDI notifications on platforms without a pairing.
- FIX: update example app to iOS v14 minimum.
- FIX: port to win32 6, csv 8 and file_picker 12 APIs.
- FIX: example app dependency update.
- FEAT(ble): bundle Android permissions and document platform setup.
-
1.0.312 Jul 2026Release notes
Open source →- FIX(ble): hide registered devices until rediscovered.
- FIX(ble): remove stale BLE devices on disconnect.
- FIX: await BLE MIDI readiness in connectToDevice.
- FIX: bluetooth discovery with latest Universal_ble.
- FIX: suppress duplicate BLE packets after the CoreMIDI handoff.
- FIX: subscribe to BLE MIDI notifications on platforms without a pairing.
-
1.0.230 Jun 2026Release notes
Open source →- FIX: update example app to iOS v14 minimum.
- FIX: port to win32 6, csv 8 and file_picker 12 APIs.
- FIX: example app dependency update.
-
1.0.130 Jun 2026 -
1.0.029 Jun 2026 withdrawnRelease notes
Open source →- Aligned CI to Flutter
3.44.2so the newer BLE dependency resolves in GitHub Actions. - Resolved the Windows example build failure caused by deprecated coroutine headers in older
universal_blereleases. - Restructured into a melos-managed federated monorepo.
- Bumped federated subpackages to 1.0.0 for the major API transition.
- Introduced shared BLE transport package (
flutter_midi_command_ble) and optional BLE wiring viaconfigureBleTransport. - Migrated host API contracts to generated Pigeon interfaces.
- Added typed host models (
MidiDeviceType,MidiHostDevice,MidiPort,MidiPacket) across platform bridges. - Added web implementation package (
flutter_midi_command_web) using browser Web MIDI. - Added transport capabilities/policies and stronger async connection semantics (
connectToDevicecompletes on connection). - Added a typed MIDI parser/generator API (
MidiMessageParserandMidiMessage.parse) with support for running status, realtime interleaving, SysEx, and NRPN/RPN message flows. - Expanded test coverage across shared logic, platform interface, BLE transport, and web backend.
- Updated the example app with separate transport toggles plus distinct
Refresh DevicesandScan BLEcontrols. - Improved Windows MIDI enumeration with hot-plug device updates and better multi-port full-duplex pairing.
- Aligned CI to Flutter
-
0.5.425 Mar 2026Nothing published for this version
-
0.5.315 Jan 2025Release notes
Open source →Adds a runtime check to ensure MIDI is available on the android device before starting. See #125 for further details. Make plugin work with Flutter 3.27.0 and Android Studio Lady Bug. #127 Removed package name from AndroidManifest.xml #126 Fix reconnect issue #120
-
0.5.206 Sep 2024 -
0.5.108 Jun 2024 -
0.4.1726 May 2024 -
0.4.1621 May 2024 -
0.4.1516 Oct 2023Release notes
Open source →Fixed more threading bugs on iOS Added iOS specific API for enabling Network Session (not implemented on other platforms)
-
0.4.1416 Oct 2023 -
0.4.1329 Sep 2023 -
0.4.1228 Sep 2023 -
0.4.1119 Mar 2023Release notes
Open source →Merge PRs from anzbert, bringing example app and gradle settings up to date
-
0.4.1026 Jan 2023 -
0.4.921 Nov 2022 -
0.4.819 May 2022Release notes
Open source →Fixed an issue where BLE devices would disappear from the device list on iOS, once connected.
-
0.4.703 May 2022Release notes
Open source →Added null_checks for latest flutter sdk (kotlin) fixed NRPN / added RPN
-
0.4.511 Mar 2022 -
0.4.409 Mar 2022 -
0.4.313 Feb 2022 -
0.4.207 Feb 2022 -
0.4.101 Feb 2022 -
0.4.020 Jan 2022 -
0.4.0-dev.812 Jan 2022 pre-release -
0.4.0-dev.711 Jan 2022 pre-release -
0.4.0-dev.530 Sep 2021 pre-releaseRelease notes
Open source →Fixed an issue with receiving consecutive SysEx messages on iOS Split packet into the (max) size reported by the connected device instead of fixed to 20 bytes, on iOS
-
0.4.0-dev.417 Sep 2021 pre-release -
0.4.0-dev.331 Aug 2021 pre-release -
0.4.0-dev.221 May 2021 pre-releaseRelease notes
Open source →Aligned behavior of running messages across iOS and Android. Running messages are sent to the app layer as individual messages.
-
0.4.0-dev.114 May 2021 pre-releaseRelease notes
Open source →Updated to new connectDevice function which return a future Aligned status updates from native across platforms
-
0.3.728 Apr 2021Release notes
Open source →Better workaround for an issue with receiving sysex messages on Android via BLE
-
0.3.628 Apr 2021Release notes
Open source →Workaround for an issue with receiving long sysex messages on Android via BLE
-
0.3.527 Apr 2021Release notes
Open source →Fixed an issue with BLE device IDs on Android Fixed an issue where BLE devices would appear in device list as native devices as well as bluetooth devices after being connected
-
0.3.426 Apr 2021Release notes
Open source →Changed permissions to fine location for BLE on Android, required when targeting sdk 29+
-
0.3.326 Apr 2021 -
0.3.222 Apr 2021 -
0.3.121 Apr 2021 -
0.3.023 Mar 2021 -
0.2.605 Nov 2020 -
0.2.504 Nov 2020 -
0.2.415 Oct 2020 -
0.2.311 Oct 2020 -
0.2.226 Sep 2020 -
0.2.124 Sep 2020 -
0.2.017 Sep 2020 -
0.1.729 Jun 2020 -
0.1.625 May 2020 -
0.1.512 May 2020Release notes
Open source →Updated Android plugin structure Fixed iOS compilation error, with latest Dart Fixed BLE Midi parsing on iOS
-
0.1.427 Feb 2020