Submit your firmware
Made a firmware for the FM-1, the SMK-37 – or a native Vibe for VIBE FM? Put it on the hub. It goes here with your name and your links, and the hub follows every release you make. Open source gets the most: one-click install from the hub itself. Questions? Check the FAQ / read the requirements, and see if your identity is free.
Heads-up: newer FM-1s have a different flash chip
Units sold since autumn 2026 (mostly AliExpress) carry a UC25HQ80 flash, JEDEC ID 0xB36014, instead of
the Puya P25Q80 (0x856014). Same size (1 MiB), the same plain SPI NOR commands.
If your firmware checks the flash ID – anything built on sloopDX, Dinghy or Felucca-base does – it takes these units
for unknown: saves stay in RAM ("flash error") and the update loader refuses to install.
The fix: accept both. Search your source for 0x856014, the update loader too (ldr_flash_known),
not just the app:
#define FL_JEDEC_OK(id) ((id) == 0x856014u || (id) == 0xB36014u) flash_ok = FL_JEDEC_OK(FL_FAR(fl_jedec_ram)());
OberVave 3.3.1, sloopDX and Dinghy have it already.
Requirements for listing / updating
Six things, all of them needed – and a seventh if your firmware carries sounds. They keep the hub safe for players and keep your card up to date without a single mail.
Open source
GPL-3.0, MPL-2.0 or another open licence, the complete source public. Then the hub installs it in one click and keeps a copy of the source.
A release on GitHub
With the .fwsc attached. Every new release goes on your card by itself, within three hours.
Tested on a real FM‑1
Installed from V15 and from another firmware, and you can leave it again. Untested firmwares are not listed.
An fmhub.json
Your card's text, in your repository's root. Change it any time: edit, push, your card follows within three hours.
{
"what": "What it is and what you can do with it.",
"author": "Your Name",
"kinds": ["groove"],
"play": "https://you.github.io/yours/emu/",
"editor": "https://you.github.io/yours/editor/",
"cheat": "https://you.github.io/yours/cheatsheet.pdf",
"image": "docs/card.png",
"color": "#FF7A00",
"sounds": "own"
}
Sounds you may share
Only if your firmware carries samples, sample banks, sound banks, ROMs or recordings – in the repository or
inside the package. Then your fmhub.json says where they come from, in one line:
"sounds": "own: recorded on my own drum machine"
What to send
- Names: the firmware's, and yours as it should appear on the card and the Wall of Creators.
- The repository with the release (closed source: your page), its
FM-1_identity and its licence. - What it does: in your repository's
fmhub.json, not in the form. - A picture and a cheat sheet: in your
fmhub.jsontoo (image,cheat), so you can change them yourself. - If you have them: a version that plays in the browser, an editor, a video, a cheat sheet.
What happens then
- I look at it and write back if something is missing.
- It goes on the test site first, then live: your card on the hub, your name on the Wall of Creators.
- Every release from then on is checked (identity, update loader, checksum) and listed by itself, and a copy of its source is kept next to the package.
- Players rate it, keep it as a favourite, and reach you through your repository.
Questions makers ask
Does the hub pick up my new release by itself?
Yes, within three hours: the newest GitHub release with a .fwsc attached, pre-releases too. A version with
beta, alpha, rc or a 0.x number gets a beta tag on its card. Nothing to mail me.
Can the file name and the identity stay the same from release to release?
Yes. Same asset name, same FM-1_ number: players press Install and are on the new version. Or put the
version into the number, as many do (FM-1_378009): that works too, as long as the part in front stays yours.
Does the hub keep my older versions?
The card always offers the newest. Older ones stay on your GitHub releases for anyone who wants them.
How do I keep my card's text up to date myself?
With the fmhub.json in your repository's root: edit it and push. The hub reads it every three hours and
your card shows the new text by itself, no approval, no mail. Longer than 300 characters is cut at a word.
{
"what": "Two or three sentences: what it is, what it does.",
"author": "Your Name",
"kinds": ["groove"],
"play": "https://you.github.io/yours/emu/",
"editor": "https://you.github.io/yours/editor/",
"cheat": "https://you.github.io/yours/cheatsheet.pdf",
"image": "docs/card.png",
"color": "#FF7A00",
"sounds": "own"
}
Kinds, one of: synth, groove, drums, chords, tracker,
other. play, editor, cheat and color (your card's colour,
#RRGGBB) are optional.
What picture do you need, and how do I change it?
Put it in your repository and name it in your fmhub.json:
"image": "docs/card.png". Square, 240 × 240 to 1024 × 1024, PNG, WebP or JPEG, 300 KB at most; best a
capture of the screen at 240 × 240 as PNG. A new one: replace the file and push, no mail. Your picture on the
Wall of Creators is your GitHub profile picture, taken by itself.
Which identity should I pick?
One nobody else uses: check it below. Do not keep the number of the firmware you started from (Felucca's
FM-1_980, FM-1_900 and so on). Long numbers with a part of your own are safest, e.g.
FM-1_47 + your version digits. Two firmwares with one number install fine, but the hub cannot tell
which one is on a connected FM-1. More.
Is a source ZIP in the release enough?
No: the source must be in the repository itself, browsable, at the tag of each release. The hub keeps a copy of it next to every package. An attached archive is fine as an extra, not instead.
What does "Built from source on GitHub" mean, and how do I get it?
GitHub built your package from your tagged source and signed it, and the hub verified that signature. Five minutes, once, with fm1-build: how.
What counts as tested?
The list above, on your own FM-1: installing from V15 and from another firmware, leaving it again, the USB identity. "It builds" or "it runs in the emulator" is not enough: such firmwares wait until they have run on a real one.
My firmware writes more than its package (data, samples).
Tell me. Its card then gets Install on its page ↗, which leads to your own installer that writes all of it; the hub still checks, lists and mirrors the package, but never writes it itself.
My firmware has samples or banks. What do I need?
One line in your fmhub.json saying where they come from: "sounds": "own" (made or recorded
by you), "CC0: <source>", "public domain: <source>" or
"licensed: <source>, <licence>". Own, CC0 and public domain go through by themselves;
someone else's licensed sounds are looked at first. With the line you confirm you may share them all, and you answer
for it, not the hub. If a rights holder complains, the card comes off until it is solved.
I have no GitHub releases yet.
The hub can take the package your installer page serves, or one committed in the repository. A release is better: it gives the card a date, a version and the source at its tag.
What about the SMK-37?
Builds for the SMK-37 go on the SMK-37 page, one per model (Pro, Elite, MKE-P37), installed from your installer. The same rule: tested on a real SMK-37 first.
How do I take my firmware off the hub?
Mail fw@thefirmwarehub.com. A repository that is deleted or made private leaves the hub by itself at the next run.
Is my identity free?
Type the number your firmware answers with. It is checked against every firmware on the hub right now (all identities).
Send it
Fill this in and the hub checks your repository and release right away: source, licence, fmhub.json, the
package, its identity and flash chip. You get a page that shows what is missing and what happens next. Sven
looks at every firmware himself – nothing goes on the hub without him. For VIBE FM and other devices there is
no automatic check yet: Sven looks at it directly.
