TypeMIDI turns your Mac keyboard into a wide-range, system-level MIDI controller.
It runs as a lightweight menu-bar app and creates its own virtual MIDI input, so no loopback driver or extra MIDI routing setup is required. Launch TypeMIDI, select TypeMIDI as an input in your DAW or instrument, and your computer keyboard can act like a controller.
Toggle MIDI mode on and your typing keyboard becomes a playable control surface; toggle it off and it behaves normally again. Because TypeMIDI works at system level, your DAW, plugin host or standalone instrument can stay focused while your keyboard sends MIDI in the background.
The default layout is inspired by FastTracker / Renoise / FL Studio-style two-row note entry, with the lower row starting at C and the QWERTY row an octave above. The aim is not just to copy a tracker layout, but to make the computer keyboard genuinely useful as an instrument: almost three octaves for chords, melodies, drum racks, sampler slices and quick sound design.
TypeMIDI is deliberately simple: a fast toggle, a consistent layout across music apps, and a wide playable range when you do not have a hardware controller connected, or when reaching for one would interrupt the flow.
Status: v1.1 — a daily-driver menu-bar app with switchable note layouts (including an isomorphic one) and semitone transpose. TypeMIDI is not notarized by Apple (it's free and isn't shipped through a paid developer account), so there's a one-time Gatekeeper step on install — see below.
- Captures bare keypresses (no modifier held) via a CGEventTap — the same permission-gated event path tools like Karabiner and Hammerspoon use — and swallows them, so the focused app (Ableton, Bitwig, Logic…) never sees the typing. Your DAW stays focused; you just play.
- Outputs notes through a virtual CoreMIDI source named "TypeMIDI", which any DAW or MIDI-aware app can select as an input.
- macOS 13 or later
- Accessibility permission (granted to TypeMIDI on first launch — see below)
- Download the
TypeMIDI-<version>.zipasset from the latest release, unzip it, and move TypeMIDI.app to your Applications folder. - TypeMIDI isn't notarized, so macOS blocks the first open. Clear it once: try
to open the app (it'll be blocked), then go to System Settings → Privacy &
Security, scroll to the "TypeMIDI was blocked" message, and click Open
Anyway → confirm. (On macOS 14 and earlier you can instead right-click
the app → Open → Open.) Or remove the quarantine flag up front:
xattr -dr com.apple.quarantine /Applications/TypeMIDI.app - Grant Accessibility when prompted (see First launch).
Requires the Xcode Command Line Tools (xcode-select --install). No other
dependencies.
git clone https://github.com/afta8/typemidi.git
cd typemidi
scripts/build-app.sh # produces builds/TypeMIDI.app
open builds/TypeMIDI.app
TypeMIDI needs Accessibility permission to read the keyboard. On first launch it adds itself to System Settings → Privacy & Security → Accessibility and shows a prompt — switch TypeMIDI on there, then launch it again. The grant is attached to the app, so you only do this once.
A keycap-with-note icon sits in your menu bar — an outline when MIDI mode is off, filled green when on, so you always know which mode you're in.
- Control + Escape toggles MIDI mode on/off. (Configurable; works on every keyboard layout.)
- In MIDI mode the keys play the active layout. The default Tracker layout uses the Z row for one octave and the Q row for the octave above; an Isomorphic (Linnstrument-style) layout also ships. Switch between them in the menu, or write your own — see KEYMAP.md.
- Left/Right arrows shift the octave; Shift + Left/Right transpose by a semitone; Up/Down arrows adjust velocity.
- Space and Return still reach your DAW (transport), so you can play and hit record/play.
Click the menu-bar icon for:
- MIDI Mode — toggle without the hotkey (the current hotkey is shown beside it).
- Layout — switch between installed note layouts (shown when more than one).
- Velocity, Octave, and Transpose sliders — show and set the current values; they mirror the keyboard controls live.
- Launch at Login — start TypeMIDI automatically with your Mac.
- Reveal Config File — open the config in Finder.
- Quit.
On first run TypeMIDI writes its settings to:
~/Library/Application Support/TypeMIDI/config.json
This holds the global settings — the toggle key and modifiers, MIDI channel,
start velocity/octave/transpose, velocity step, octave/velocity keys, and the
pass-through list. The note layouts themselves live in separate files in a
layouts/ folder next to it. Relaunch to apply changes (everything is read once
at startup). Nothing leaves you stuck: a malformed config.json shows an alert
with a Regenerate Config option, and a broken layout file is flagged in the
menu rather than blocking launch.
Note layouts — and how to write your own — are documented in KEYMAP.md, with the full keycode table and copy-ready examples. (It's also written so you can hand the whole file to an AI and have it generate a layout for you.) Switch between installed layouts from the menu-bar Layout submenu. Keys are matched by hardware position (keycode), so a layout plays the same on any language keyboard.
A few config.json fields that aren't obvious from the JSON (which has no comments):
midiChannelis 0-indexed (0–15) — your DAW shows0as channel 1,1as channel 2, and so on.toggleModifiersis the list of modifiers held withtoggleKeycode— any ofcommand,control,option,shift(e.g.["control"]for the default Control+Escape, or[]for none).startVelocity(1–127),startOctave(octaves,0= centre, ±4) andstartTranspose(semitones,0= none, ±12) set where those controls begin.activeLayoutnames the layout to start on (itsname, not its filename) — the Layout menu updates this for you.
- Nothing happens / no menu-bar icon. TypeMIDI needs Accessibility permission — see First launch.
- TypeMIDI is switched on in Accessibility but still doesn't respond (most likely right after an update): macOS is holding a stale permission entry. Select TypeMIDI in System Settings → Privacy & Security → Accessibility, click – to remove it, then add it back — it re-prompts on next launch and works again.
- "TypeMIDI can't be opened" / unidentified developer: that's the one-time
Gatekeeper step from install — open System Settings → Privacy & Security
and click Open Anyway next to the TypeMIDI message (on macOS 14 and
earlier, right-click the app → Open), or run
xattr -dr com.apple.quarantine /Applications/TypeMIDI.app.
Builds with plain swiftc via scripts/build-app.sh — no Xcode project, no
third-party dependencies, and the app icon is generated from code rather than
committed as an asset. If you rebuild repeatedly, a self-signed TypeMIDI Dev
code-signing certificate keeps the Accessibility grant from resetting on each
build; see NOTES.md for that and the project's design decisions.
- KEYMAP.md — how note layouts work and how to write your own.
- ROADMAP.md — where this is headed (continuous controls, and more).
- NOTES.md — design decisions and the rationale behind them.
TypeMIDI is free software licensed under GPL-3.0-or-later — see LICENSE. You're free to use, study, modify, and share it under those terms.
The TypeMIDI name, logo, and icon are not licensed for unofficial or modified releases without permission. If you distribute a fork, please give it your own name and artwork.