An iPhone app that installs open-source firmware on the M-VAVE FM-1 over USB, and backs up and restores what is on it.
FM-1 Hub is on the App Store, for anyone with an iPhone and an M-VAVE FM-1.
Free · iPhone, iOS 17 or later · No account · GPL-3.0 · Not affiliated with M-VAVE
Want new versions before they reach the App Store? Join the free beta through Apple’s TestFlight app: testflight.apple.com/join/Rspq3M2C. Open it on the iPhone you will plug the FM-1 into.
Found a bug or have an idea? Send feedback.
Update stopped part-way, or got an error code?
The app shows the open-source firmwares listed by the FM-1 Firmware Hub (thefirmwarehub.com), and keeps the list for offline use. Each card shows a picture of the firmware's screen, its maker, version, type, installs and stars, with a beta badge where it applies.
Search, sort, and filter by style: synths, grooveboxes, drums & samplers, chords, trackers, dev, ambient, vintage. Each firmware's page links to its project, source, editor, browser demo, cheat sheet and feedback channel.
Each firmware comes as a single .fwsc file, which the app calls a package. The app installs it over USB MIDI the same way the hub's installer and M-VAVE's updater do. If an update is interrupted, you can resume it with the same package.
A .fwsc from the Files app works too, for a release the catalogue doesn't list yet.
One tap installs M-VAVE's current release from M-VAVE's own server. The app reads the version from the file, so new official releases appear without an app update. Or install the official V15, which the hub keeps as a recovery image; the app accepts only the exact published file.
Because the FM-1 can't send its firmware back to the phone, a backup records which firmware is on it and keeps the package that installs it again. The app finds that package by itself when it can. Several firmwares can report the same identity, so if it can't tell which one is on the FM-1, you choose from a list or pick a .fwsc yourself.
On firmwares that answer Felucca's or SLOOP's backup protocol, a backup also saves your music, settings, projects and samples. Felucca's file opens in the Felucca web editor, and SLOOP's in the SLOOP web editor. The FM-1 tab says what a backup of your firmware will include. You restore firmware and music separately, and the app can do this backup automatically before every install.
The History tab lists every install attempt: what, when, from where (the hub, a backup, a file or M-VAVE), what the FM-1 reported before and after, and the result or error.
Installing firmware always carries some risk, and the app follows seven rules to keep it down.
The manual below refers to them by name.





Manual
Read it in order the first time. Every section and every error code has its own link.
.fwsc).FM-1_904.FM-1_904.The app lists the other MIDI ports it can see and asks “Is one of these your FM-1?” Some firmwares name their USB port after themselves. Tap the right one and the app remembers it. Asking writes nothing to the FM-1.
If the list is empty, check the cable, close other MIDI apps, and turn on Settings → MIDI → Ask every MIDI port.
Do this before every install.
Settings → Installing → Back up before every install is on unless you turn it off. When the running firmware answers Felucca's or SLOOP's backup protocol, its music is saved before each install, with the package if the app can find it. If that backup fails, the install stops before anything is written. Other firmwares install without a backup: press Back up the FM-1 now to keep the package, and save your music with their own tool.
While it is writing, don't unplug the cable. If you can, don't let the phone go to sleep.
On the FM-1 tab, under Official firmware, press one of:
.fwsc you already haveOn the FM-1 tab, open More and log and press Install a .fwsc from Files (last resort). Use it for a GitHub release the catalogue hasn't picked up yet, or for M-VAVE's own download. The app refuses any file that isn't for an FM-1.
You can finish it.
The FM-1 stays in update mode until an update completes.
To install something else instead, pick any firmware from the catalogue. That continues the update too.
Another updater, or an older version of this app, started the update. Install any firmware from the list. It continues from the same place.
Find the code the app showed you.
No FM-1 answered.
Plug the FM-1 in by USB, close other MIDI apps, then try again.
The package is for a different model than the connected device. Nothing was written.
Check you picked a firmware for the FM-1.
The update loader (which receives the new firmware) did not appear after step 1.
Still stuck? Hold OCT− while switching the FM-1 on, then press Install again.
The FM-1 or its update loader stopped part-way.
Replug the USB cable and press Install again: the device stays in update mode until it is finished.
The FM-1 was disconnected part-way.
Replug the USB cable and press Install again: the device stays in update mode until it is finished.
The firmware was sent, but the FM-1 did not come back.
Power-cycle the FM-1 (switch it off and on). If it does not start, hold OCT− while switching it on and install again.
The firmware was written, but the FM-1 reports a different identity than expected.
Check the firmware's own notes; reinstall, or restore a backup.
The FM-1 is in another firmware's own update mode.
Finish that update with its own updater.
A package failed its checks or could not be saved on the phone, or a SLOOP archive was made on a firmware that reports another identity.
Refresh the catalogue and try again; free space if the phone is full. For a SLOOP archive, restore the firmware first.
The FM-1 asked for data that isn't in the package.
Report it — the package and the device disagree.
The backup exchange with the FM-1 went wrong.
Stop playback on the FM-1 and try again. When you restore music, the app may ask you to restore the firmware first.
The MIDI port could not be opened.
Close other MIDI apps and replug.
A backup failed. Nothing was written to the FM-1.
Stop playback on the FM-1 and try again. If it happened before an install, you can also turn the automatic backup off in Settings.
You stopped it.
—
Your backup folders are untouched, and the lists start empty. The app keeps the unreadable file in its folder as library-unreadable-….json, named after a fingerprint of its contents. If it can't even make that copy, it writes nothing over the original until you free some space. To have the file looked at, copy it out through Files.
Restore the firmware first, then the music.
Delete this backup removes the backup and its folder. Clearing the package cache in Settings never deletes backups.
In the Files app, under On My iPhone › FM-1 Hub. You can copy anything there to iCloud Drive or a computer. Each backup is a folder in Snapshots: copy it out to keep it beyond this app.
Packages/.fwsc files, named id-version-sha8.fwsc, where sha8 is the first 8 characters of the file's SHA-256. Clearing the cache in Settings empties this folder.Snapshots/<uuid>/package.fwscSnapshots/<uuid>/felucca-backup.jsonSnapshots/<uuid>/sloop-backup.jsonlibrary.jsonDetail · optional reading
The FM-1 can't send its firmware back over MIDI. In an update, it asks the phone for the package piece by piece (0x30 read requests against the logical image, answered with 7-bit packed data). Nothing can copy the firmware off the device, so a firmware backup is a copy of the package, identified by its SHA-256, which the app keeps.
Music and settings use a different protocol (F0 7D 46 4C …), offered by Felucca-family firmwares, by SLOOP and by firmwares built on it, with different command numbers and file formats. The app uses it when the FM-1 answers BACKUP_LIST.
You need Xcode 16 or newer, an iOS 17 deployment target, and a free or paid Apple developer account to sign for a device.
FM1Hub.xcodeproj.FM1Hub target → Signing & Capabilities → pick your Team. Change the bundle identifier (com.debreczi.fm1hub) if Xcode asks.The Simulator has no USB MIDI. The catalogue, filters, history and backups work there, but connecting to an FM-1 needs a real phone.
github.com/debreczi/fm1firmwarehost