Skip to content

afta8/typemidi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TypeMIDI

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.

How it works

  • 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.

Requirements

  • macOS 13 or later
  • Accessibility permission (granted to TypeMIDI on first launch — see below)

Install

Option 1 — Download (easiest)

  1. Download the TypeMIDI-<version>.zip asset from the latest release, unzip it, and move TypeMIDI.app to your Applications folder.
  2. 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 → OpenOpen.) Or remove the quarantine flag up front:
    xattr -dr com.apple.quarantine /Applications/TypeMIDI.app
    
  3. Grant Accessibility when prompted (see First launch).

Option 2 — Build from source

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

First launch

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.

Using it

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.

Configuration

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):

  • midiChannel is 0-indexed (0–15) — your DAW shows 0 as channel 1, 1 as channel 2, and so on.
  • toggleModifiers is the list of modifiers held with toggleKeycode — any of command, control, option, shift (e.g. ["control"] for the default Control+Escape, or [] for none).
  • startVelocity (1–127), startOctave (octaves, 0 = centre, ±4) and startTranspose (semitones, 0 = none, ±12) set where those controls begin.
  • activeLayout names the layout to start on (its name, not its filename) — the Layout menu updates this for you.

Troubleshooting

  • 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.

Developing

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.

Roadmap & license

  • 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.

About

Turn your Mac keyboard into a MIDI controller — a lightweight menu-bar app with switchable note layouts (tracker + isomorphic), transpose, and velocity control. No loopback driver needed.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors