flutter_midi_command_windows
The Windows implementation of flutter_midi_command, using the WinMM MIDI API to send and receive MIDI messages.
1.1.2
4.2K downloads/mo
#4110 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.3 years
Nearly every release is documented
notes for 15 of 15 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
24 releases · first in 2023
14 releases in the last 12 months
see the full history below
Release timeline
24 releases · Sep 2023 to Aug 2026Releases
latest 24-
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_windows" to
1.1.2and update the platform interface dependency constraint 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.
Release notes
Open source →- Bump "flutter_midi_command_windows" to
1.1.1and update the platform interface dependency constraint 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.
Release notes
Open source →- Bump "flutter_midi_command_windows" to
1.1.0and update the platform interface dependency constraint 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.
Release notes
Open source →- Bump "flutter_midi_command_windows" to
1.0.9and update the platform interface dependency constraint.
- 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 →- Bump "flutter_midi_command_windows" to
1.0.8and update the platform interface dependency constraint.
- 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_windows" to
1.0.7and update the platform interface dependency constraint.
- 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.
Release notes
Open source →- Major release aligned with the federated monorepo architecture.
- Updated to the 1.x platform interface and typed host models.
- Replaced third-party USB change monitoring with native Windows device notifications.
- Improved multi-port enumeration so balanced WinMM endpoint groups surface as full-duplex devices.
- Fixed short-message handling in the WinMM input callback path.
- Aligned CI to Flutter
-
0.3.001 Nov 2025Release notes
Open source →- Updated device_manager package to 0.0.7, which includes the fix for Windows
- Updated UniversalBle package to 0.21.0, with minor API changes
-
0.1.105 Jul 2024 -
0.1.008 Jun 2024Release notes
Open source →Moved Message Types into separate file: flutter_midi_command_messages.dart. Fixed threading issue. https://github.com/InvisibleWrench/FlutterMidiCommand/issues/4 Added teardown function to disconnect and close all ports and devices. Gradle dependency raised to 3.4.2 minSDKversion raised to 24 Version bumped to 0.1.0
-
0.0.1-dev.905 Mar 2024 pre-release -
0.0.1-dev.822 Feb 2024 pre-release -
0.0.1-dev.722 Feb 2024 pre-release -
0.0.1-dev.618 Dec 2023 pre-releaseRelease notes
Open source →- Split into windows_midi_device.
- Better port enumeration
- Better device monitoring.
-
0.0.1-dev.504 Nov 2023 pre-release -
0.0.1-dev.430 Sep 2023 pre-release -
0.0.1-dev.329 Sep 2023 pre-release -
0.0.1-dev.228 Sep 2023 pre-release