DISCLAIMER: nearly 100% of everything you see on this repo was written with the assistance of AI.
MIDIMaster is a desktop app that lets you bind MIDI controls (faders/knobs/buttons) to:
- System audio (master, focused app, per-app sessions)
- Audio devices (playback/recording)
- Integrations provided by runtime plugins (for example: OBS Studio, Elgato Wave Link, Philips Hue)
Integrations are plugin-driven. Plugins can be installed at runtime (no rebuild required) and can ship their own:
- Target lists for the binding picker (including nested menus)
- Connection UI inside the Connections modal
- Runtime behavior when a binding triggers
- Feedback updates (UI + OSD + motor faders)
- Windows only (system audio + device control)
Plugins are distributed as .midimaster packages.
- Install from file:
Plugins -> Installed -> Install Plugin... - Install from the in-app Store:
Plugins -> Store
The in-app Store lists plugins from the official MIDIMaster catalog and installs them into your config directory.
- The app verifies Store downloads using a trusted public key.
- The Store service/catalog and signing keys are maintained separately (not in this repository).
- The official catalog is curated (plugins may be accepted/rejected/removed at the maintainer's discretion).
Third-party product names, trademarks, and logos are property of their respective owners and are used for identification purposes only.
This project is not affiliated with, endorsed by, or sponsored by OBS Project, Elgato, Signify, Discord, or any other third-party vendor.
Some third-party logos are included in this repository and shown in the UI (for example in the bundled integration plugins) purely to help users recognize the integration they are configuring. If you are a trademark owner and would like a logo removed or adjusted to comply with brand guidelines, please open an issue.
This repo is a Tauri v2 app. The frontend is plain static HTML/CSS/JS (no Node build step).
Prereqs (Windows)
- Rust (stable) and Cargo
- Visual Studio Build Tools / MSVC toolchain (required by Rust on Windows)
- Tauri CLI v2 (
cargo install tauri-cli --version "^2" --locked)
cargo tauri devBuild a release bundle locally
cargo tauri buildStore URL override (forks)
The in-app Store catalog URL can be overridden with MIDIMASTER_STORE_URL.
Example (PowerShell):
$env:MIDIMASTER_STORE_URL = "https://example.com/catalog.json"
cargo tauri devReleases are created from git tags.
One-time updater key setup (required for built-in updates):
- Generate a signing keypair locally:
cargo tauri signer generate -w "$HOME/.tauri/midimaster.key"
- Copy the generated public key into
src-tauri/tauri.conf.jsonatplugins.updater.pubkey. - Add these GitHub repo secrets for the release workflow:
TAURI_SIGNING_PRIVATE_KEY(contents of the private key file, or a secure path)TAURI_SIGNING_PRIVATE_KEY_PASSWORD(empty string if no password)NETLIFY_AUTH_TOKEN(token with access to your Netlify site)NETLIFY_SITE_ID(Netlify project/site ID)
Release flow:
- Update
src-tauri/Cargo.tomlversion. - Create and push a tag in the form
v<version>(example:v0.1.0).
Pushing the tag triggers the GitHub Actions release workflow, which builds the Windows bundle and publishes installer assets to GitHub Releases and updater metadata to Netlify.
Built-in updater behavior:
- Update checks use Netlify metadata (
https://midimaster.netlify.app/updates/latest.json). - Metadata points to installer binaries hosted on GitHub Releases.
- Stable releases only are offered.
- If in-app update fails, users can still install manually from the GitHub release page.
Bridge migration (one release):
- Existing app installs that still check GitHub need one bridge release.
- For the bridge release, upload
latest.jsonto GitHub release assets as well. - After the bridge release, GitHub assets should be
.exefiles only. - Workflow toggles:
UPDATER_BRIDGE_RELEASE(repo variable): defaults totruewhen unset. Set tofalseafter the bridge release to stop uploadinglatest.jsonto GitHub.UPDATER_BRIDGE_INCLUDE_SIG(repo variable): optional; set totrueonly if you also want.sigfiles uploaded during bridge mode.
Documentation
- User guide:
docs/USER_GUIDE.md - Plugin developer guide (API v1):
docs/PLUGIN_DEVELOPER_GUIDE.md - Architecture guardrails:
docs/ARCHITECTURE_GUARDRAILS.md
Plugin examples
- Demo plugin:
plugin-example/demo/ - Starter template:
plugin-example/template/
MIT. See LICENSE.