## What's Changed
For discussion and overview of changes see: https://forum.4ms.info/t/firmware-v2-4-0-vcv-expanders-load-balance-panel/2822
## Details
* Midi Expander support by @danngreen in https://github.com/4ms/metamodule/pull/613
* CPU Load Re-balancing by @danngreen in https://github.com/4ms/metamodule/pull/616
* Fix simulator build with MIDI off and headless link errors by @thorinside in https://github.com/4ms/metamodule/pull/617
* Support VCV expander modules by @gabriel-roth in https://github.com/4ms/metamodule/pull/615
* Plugin .fini_array destructors by @danngreen in https://github.com/4ms/metamodule/pull/619
* Allow MIDI CC mappings to be in Toggle mode by @danngreen in https://github.com/4ms/metamodule/pull/618
* Littlefs cleanup by @danngreen in https://github.com/4ms/metamodule/pull/620
* Implement native module context menus by @gabriel-roth in https://github.com/4ms/metamodule/pull/605
* Patch View: zoom and re-arrange modules freely, and use VCV patch layout: https://github.com/4ms/metamodule/pull/622
* Grouping, ordering and custom name for params and jacks in element roller: https://github.com/4ms/metamodule/pull/606
* Add Befaco Mex module
* Add groups, orders, and names for some multi-channel 4ms modules
* Add `make jprog-assets`, `make flash-stlink-assets` and `make flash-t32-assets` to update the assets.uimg in RAM with a JTAG debugger
* Improve developer console with a prompt `> ` and backspace support.
* Fix LEDs hidden behind a mapped button
* Add "Step" mode to button, MIDI CC and MIDI Note Gate mappings
* Handle I2C dropouts with expanders more robustly.
* Add button expander support in simulator (Shift + number)
* Fix crash when reloading a plugin via Dev Drive
## New Contributors
* @thorinside made their first contribution in https://github.com/4ms/metamodule/pull/617
**Full Changelog**: https://github.com/4ms/metamodule/compare/firmware-v2.3.1...firmware-v2.4.0
Download the firmware from metamodule.info/downloads and save the metamodule-firmware folder to a USB drive or microSD card. On the MetaModule, open Settings from the Main Menu and select Update. Insert the drive and click Update Firmware; the module detects the drive and shows the version and contents (main firmware, Wi-Fi firmware, bootloader, assets) before you start. Keep the module powered on for the whole update, about one minute. If you are also updating plugins, update the firmware first: power up with no drives inserted so no plugins are pre-loaded, insert the drive, update the firmware, then reboot with the drive still inserted.
## What's Changed
* Usb composite device: MIDI + console: https://github.com/4ms/metamodule/pull/610
* Usb Developer Mode: enables MSC drive for loading plugins during development by @danngreen in https://github.com/4ms/metamodule/pull/612
* Improve param z-order (support for Iroi's stacked knobs): https://github.com/4ms/metamodule/pull/609
* Add Befaco Iroi to metamodule by @hemmer in https://github.com/4ms/metamodule/pull/577
* MIDI PC patch change stays on JackMap or KnobSet pages if already there: https://github.com/4ms/metamodule/pull/608
- Recover from more types of plugin errors (Data Abort, uncaught exceptions)
* Use less memory when loading plugins by lazily populating element list for VCV plugins by @danngreen in https://github.com/4ms/metamodule/pull/611
* Fix some USB devices with large config descriptors not loading by @danngreen in https://github.com/4ms/metamodule/pull/614
**Full Changelog**: https://github.com/4ms/metamodule/compare/firmware-v2.3.0...firmware-v2.3.1-rc3
## What's Changed
### New Features
* Memory allocation system refactored in order to recover when plugins run out of memory or crash by @danngreen in https://github.com/4ms/metamodule/pull/601
* Firmware runs with c++ exceptions enabled
* All firmware allocations that might result in out-of-memory are caught and reported to the user, without crashing.
* Plugin heap is separate from firmware heap, so a plugin can safely be removed without crashing the firmware.
* Plugins that throw an exception (e.g. out of memory) can can be caught by firmware, and cleaned up.
* Plugins that crash (e.g. an uncaught exception, or ends up calling std::terminate or abort()) can be recovered, but not cleaned up (there may be memory leaks in the plugin heap).
* Firmware is self-extracting (smaller binary, loads faster)
* Splash screen while firmware is booting and extracting
* Support sliders in Module menu (context menu for modules) by @danngreen in https://github.com/4ms/metamodule/pull/598
* Simulator extplugin quality-of-life improvements by @danngreen in https://github.com/4ms/metamodule/pull/602
* Simulator: Support multiple key bindings per action, add Enter and Backspace by @KotMorderca in https://github.com/4ms/metamodule/pull/599
* Compress firmware and self-extract on boot and add splash-screen by @danngreen in https://github.com/4ms/metamodule/pull/604
### New USB Features
* Major refactor of USB manager by @danngreen in https://github.com/4ms/metamodule/pull/597
* Add USB Device mode: Can function as a USB Device, or Host, or auto-detect host/device.
* MIDI Device mode: Can connect to a computer as a MIDI Device.
* UVC Video device: Can function as a webcam device to mirror the screen to a computer.
* Console device: Can function as a CDC console for debugging or reading logs
* SDK API for USB and USB-MIDI queries: modules can query the USB connection status, and probe into available USB MIDI jacks and cables.
[...]
## What's Changed
* Module image generation tests by @danngreen in https://github.com/4ms/metamodule/pull/593
* Midi CC 14bit by @danngreen in https://github.com/4ms/metamodule/pull/589
* Fix headless simulator: restore the build, register built-in plugins, separate build dirs by @gabriel-roth in https://github.com/4ms/metamodule/pull/587
* Register bundled vcv_ports brands in the headless simulator by @gabriel-roth in https://github.com/4ms/metamodule/pull/588
* Simulator MIDI support by @danngreen in https://github.com/4ms/metamodule/pull/594
* CPU load tests: test plugins one at a time by @danngreen in https://github.com/4ms/metamodule/pull/596
- Add missing RackCore module metadata
- Fix small memory leak in addLightSlider()
- Fix Plateau not updating allpass size when lfo depth set to 0
- Fix Feline crash at 24kHz
- Fix display issue with very small numbers using sci notation in Manual Adjust pop-up
- Fix scrolling issue on Jack Maps page
- Fix MIDI poly voices stealing from other channels
**Full Changelog**: https://github.com/4ms/metamodule/compare/firmware-v2.2.0...firmware-v2.2.1
## New Features
* Support polyphonic cables, with a maximum of 4 voices per cable
- Modules derived from rack::engine::Module (i.e. plugins ported from VCV Rack) will usually "just work" with a max of 4 voices.
- New helper classes CoreProcessorPoly and SmartCoreProcessorPoly for native plugins
- API is backwards compatible with all v2.x plugins (original CoreProcessor base class is untouched -- only new types are added)
- Full support for cables with summed input nodes, splits, poly->mono conversions, etc with poly cables.
- Poly cables are drawn thicker in the Patch View
* Add built-in MIDI support for 4-voice polyphony per cable
- Max 8 voices using 2 poly cables (each poly MIDI cable can be voices 1-4 or voices 5-8)
- Can set the MIDI poly number directly in the Patch Info dialog box (default is Auto = auto-detect based on cables in the patch)
## Modules
4ms CoreModules:
* Update most 4ms modules to use polyphony. Some modules that aren't updated will likely never be made poly (because they are inherently a mono module, or due to memory usage concerns)
RackCore:
* Add RackCore Sum, Merge, and Split modules for poly support.
* Remaining VCV Core MIDI modules added (Gate_MIDI, MIDI_Gate, MIDICC_CV
## Improvements and Fixes
* Build simulator DSP at -O2 so the audio callback meets its real-time deadline by @gabriel-roth in https://github.com/4ms/metamodule/pull/585
* Default simulator LOG_LEVEL to WARN so errors are visible with plain cmake by @gabriel-roth in https://github.com/4ms/metamodule/pull/584
* Define no-op `plugin` target in simulator's create_plugin() to match real SDK by @gabriel-roth in https://github.com/4ms/metamodule/pull/586
* Fix New Panel Cable showing outputs for a connected module input by @gabriel-roth in https://github.com/4ms/metamodule/pull/590
* Fix cable node list on ModuleView page and Jack Maps page by @danngreen in https://github.com/4ms/metamodule/pull/591
* Fix MIDI voice allocations
[...]
## What's Changed
* MIDI PC messages can be assigned to load patches (https://github.com/4ms/metamodule/pull/576)
* Can replace or substitute a module in a running patch (https://github.com/4ms/metamodule/pull/575)
* Option to "Wrap navigation" in Module View in https://github.com/4ms/metamodule/pull/571
* Midi sysex and USB cable ID support in https://github.com/4ms/metamodule/pull/572
* Improve CPU performance by compacting toggler params
* Patch cpu tests in https://github.com/4ms/metamodule/pull/574
* Heap increase to 300MB in https://github.com/4ms/metamodule/pull/573
* Fix bug with jack alias keyboard not hiding
* Fix MIDI note allocation in legacy poly mode
* Fix possible crash at boot if aux core re-inits MMU while main core is running
* Fix occasional erroneous "A new version was just transferred but you have unsaved changes..." message when saving
**Full Changelog**: https://github.com/4ms/metamodule/compare/firmware-v2.1.16...firmware-v2.1.17
## What's Changed
* MetaButton Expander can change knobset by @danngreen in https://github.com/4ms/metamodule/pull/566
* Reduce Notifications by @danngreen in https://github.com/4ms/metamodule/pull/567
* Display firmware update version and contents on Firmware Update tab by @danngreen in https://github.com/4ms/metamodule/pull/568
* Fix various memory errors by @danngreen in https://github.com/4ms/metamodule/pull/569
**Full Changelog**: https://github.com/4ms/metamodule/compare/firmware-v2.1.14...firmware-v2.1.15
What is the latest firmware for the 4ms Meta Module?
The latest firmware for the 4ms Meta Module is version 2.4.0, released on 2 Oct 2026. FW//RADAR last checked 4ms's official page on 27 Oct 2026.
How do I update the 4ms Meta Module?
Download the firmware from metamodule.info/downloads and save the metamodule-firmware folder to a USB drive or microSD card. On the MetaModule, open Settings from the Main Menu and select Update. Full instructions on 4ms's official firmware page.
Where can I download 4ms Meta Module firmware and drivers?
Directly from 4ms's official firmware page — FW//RADAR links to the source and never hosts firmware files. Official firmware page →