MuxMage: a pin planner for microcontrollers

No more datasheet Sudoku. Tell it you need a UART, SPI and three ADC channels, and it finds pins where all of them fit together.

PartSTM32G071CB PackageLQFP48 · 39 I/O Solved · checked
RequirementInstancePins
UARTAuto → USART2PA2, PA3
SPIAuto → SPI1PA5, PA6, PA7
ADC × 3ADC1PA0, PA1, PA4
Status LEDGPIO · lockedPB3
Instances on Auto were picked by the solver. PB3 was locked and stayed put.

Highlights

“Can we add just one more thing?”

Yes, no, or “only if SPI2 moves”. You’ll know in seconds, not after a night with the datasheet.

Changes move as few pins as possible.

When a new requirement only fits after a reshuffle, the solver moves the fewest unlocked pins it can. Locked pins never move.

It picks the USART for you.

Ask for “a UART” and it chooses the instance that leaves room for everything else. You can still name one yourself.

It says no like a grown-up.

When something doesn’t fit, it tells you exactly which requirements are fighting.

Browse the other valid pinouts.

See the alternatives the solver found instead of taking the first answer.

Signals go where the connector is.

Say which side of the package a UART belongs on, near its connector, and its pins stay there.

Your design stays on your machine.

The solver runs in your browser, so nothing is sent anywhere to be solved. Projects autosave locally.

How it works

  1. Start from what the board needs, not from pins.

    Add a requirement like “one UART”, “SPI with two hardware chip selects” or “three ADC channels”. Leave the instance on Auto, fix it to USART2, or name ADC1_IN5 directly.

  2. Add the constraints that come from the real board.

    Lock pins you’ve already routed, reserve pins you need for something else, and say which side of the package you want certain signals on.

  3. The solver finds a pin for every signal.

    Browse alternative mappings instead of taking the first answer. When the design changes, it moves as few pins as it can.

  4. Download your KiCad symbol.

    Export the pinout as a KiCad symbol library, with each pin named after its signal. A second, independent checker validates it against the device’s pin rules before you download it.

What it is

Picking MCU pins usually means an afternoon with the alternate-function table, a spreadsheet and a growing suspicion that SPI2 and I2C1 are fighting over the same pins. With MuxMage you just list what the board needs. The pin juggling is no longer your job.

You start from what the board needs, not from pins. Add a requirement like “one UART”, “SPI with two hardware chip selects” or “three ADC channels”. Be as specific as you like: leave the instance on Auto, fix it to USART2, or name ADC1_IN5 directly. Then add the constraints that come from the real board. Lock pins you’ve already routed, reserve pins you need for something else, and say which side of the package you want certain signals on so they end up near the connector they go to.

MuxMage fills in everything you didn’t specify and finds a pin for every signal. You can browse alternative mappings instead of taking the first answer. When the design changes, it treats your current pinout as the starting point and moves as few pins as it can. When a set of requirements really can’t fit, it says which ones collide, so you know what to give up or rethink.

Every result is checked against the device’s pin rules by a second, independent checker before it’s shown as valid. The solver runs in your browser, so your design isn’t sent anywhere to be solved. Projects autosave locally and export as JSON. Cloud sync and collaboration are coming later, for teams that want them.

Parts

About 2,200 STM32 parts and 33 Espressif ESP32 chips and modules, 38 families in all. You pick the exact part in the app.

Not using STM32 or ESP32?

Features

Features marked “Available” are in the app today; each one has a wiki page. The ones marked “Not built yet” aren’t built. Tell us which one you want: those clicks decide what we build next.

Available

KiCad symbol library

Export the solved pinout as a KiCad symbol, with each pin named after its assigned signal. The export is validated before you download it.

Read the guide: KiCad symbol library
Available

Assignment CSV

Export every assigned pin and its signal as a CSV for your spreadsheet, schematic notes or firmware header generator.

Read the guide: Assignment CSV
Available

Project JSON

Export a whole project as JSON and open it again on another machine. Your requirements and locks come with it.

Read the guide: Project JSON
Available

History and branches

Projects autosave in your browser. Go back to an earlier version, or branch off to try a different pinout without losing the current one.

Read the guide: History and branches
Not built yet

KiCad plugin

Keep your KiCad symbols in step with the pinout automatically, without exporting a library by hand after every change.

Not built yet

CubeMX .ioc

Start from an existing CubeMX project.

Not built yet

Team collaboration and pinout sign-off

Review the pinout with your team and sign it off. Every pin is checked against the device’s pin rules, so no more debates about whether a pin supports something.

Not built yet

Part comparison

See whether the same requirements fit a cheaper part.

Not built yet

Desktop app

Offline app for locked-down machines.

FAQ

Where does my design go?
Your design stays on your machine. The solver runs locally in your browser, and projects are saved locally, not on our servers.
Do I need to install anything?
No. It runs in the browser: no install, no account and no 2 GB vendor IDE.
What if my requirements don’t fit?
“Doesn’t fit” comes with a reason. It names the requirements that collide, so you’re not left with a shrug.
Can I take my project elsewhere?
Projects autosave locally and export as JSON.

Just open the browser.

Pick your part, add what the board needs, and see where it fits.

Start a new project