flutter_midi_command_platform_interface
A common platform interface for the FlutterMidiCommand plugin.
1.1.2
4.5K downloads/mo
#4004 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.7 years
Nearly every release is documented
notes for 23 of 23 stable releases
1 version withdrawn
withdrawn after publishing
6 years old
25 releases · first in 2020
13 releases in the last 12 months
see the full history below
Release timeline
25 releases · Sep 2020 to Aug 2026Releases
latest 25-
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.
Release notes
Open source →- Bump "flutter_midi_command_platform_interface" to
1.1.2for the synchronized workspace release.
- 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.
Release notes
Open source →- Bump "flutter_midi_command_platform_interface" to
1.1.1for the synchronized workspace release.
- 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.
Release notes
Open source →- FEAT: add
MidiWriteFailureandMidiBleTransport.onWriteFailure, so a BLE transport can report writes it accepted from the fire-and-forgetsendDatabut could not deliver. The getter has a default empty-stream implementation for transports that cannot detect write failures. - FEAT: add
MidiBleTransport.sendDataAwaitingDelivery, which completes once the data has been written rather than queued, so a bulk transfer can pace against the link. Defaults tosendDatafor transports that cannot observe delivery. - BREAKING (implementers only): a class using
implements MidiBleTransportmust now declareonWriteFailureandsendDataAwaitingDelivery, because Dart requiresimplementsto provide every member regardless of a default body. Classes usingextendsare unaffected, as are all consumers of the API.
- 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.
Release notes
Open source →- DOCS: clarify that
MidiDevice.inputPortsandoutputPortsare described from the MIDI device's perspective.
- 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.
Release notes
Open source →- Bump "flutter_midi_command_platform_interface" to
1.0.7for the synchronized workspace release.
- 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).
Release notes
Open source →- FIX: don't clobber a device's transitional connecting/disconnecting state when listing devices; a passive
devicesrefresh no longer collapses an in-progress connect to disconnected (#159). - FEAT: add
MidiPairingInfoRemovedExceptionfor BLE peripherals that have removed their pairing information.
- 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.
Release notes
Open source →- Aligned the platform interface with the 1.0.4 federated workspace release.
-
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.
Release notes
Open source →- FIX(ble): remove stale BLE devices on disconnect.
- FIX: await BLE MIDI readiness in connectToDevice.
-
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.
Release notes
Open source →- Major API cleanup for the federated 1.0 architecture.
- Typed device/port/packet models used across generated Pigeon host contracts.
- Aligned CI to Flutter
-
0.4.309 Mar 2025 -
0.4.206 Nov 2024 -
0.4.116 Oct 2023Release notes
Open source →- Added
isNetworkSessionEnabledandsetNetworkSessionEnabledfor controlling Network Sessions on iOS (introduced in FlutterMidiCommand 0.4.15)
- Added
-
0.4.020 Jan 2022 -
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.411 Jan 2022Release notes
Open source →Changed permissions to fine location for BLE on Android, required when targeting sdk 29+
Release notes
Open source →- Improved bluetooth state handling:
- Start bluetooth subsystem only when you want, not automatically
- Allow to retrieve bluetooth state before starting scanning
- Allow to observe bluetooth state (poweredOn, poweredOff, ...)
- Improved bluetooth state handling:
-
0.3.327 Apr 2021 -
0.3.224 Mar 2021 -
0.3.123 Mar 2021 -
0.3.012 Mar 2021 -
0.2.106 Jan 2021 -
0.2.017 Sep 2020