midi-harbor/docs
James Coleman 43f7b8916b fix(appimage): install the desktop entry so the window gets its icon
- A Wayland desktop finds a window's icon by looking up its application ID among the installed desktop entries. An AppImage carries its entry and icon inside its own tree, where no desktop looks, so its window showed the generic Wayland icon and Midi Harbor was missing from the application menu.
- Run from an AppImage, the window now installs com.mrgeckosmedia.MidiHarbor.desktop under $XDG_DATA_HOME/applications and the icon under icons/hicolor/scalable/apps before it opens. Exec is rewritten to the AppImage file, quoted as the Desktop Entry Specification requires, and each file is written only when it differs, so a moved AppImage is followed.
- TryExec names the AppImage file, so desktops stop offering the entry once the file is deleted, which is how an AppImage is removed.
- Nothing is installed when a directory in XDG_DATA_DIRS already holds the entry: one under the user's directory takes precedence and would point a package's menu item at the AppImage.
2026-10-02 12:32:08 -05:00
..
cli.md feat(update): say when the daemon is another build and update it on request 2026-10-02 11:56:27 -05:00
configuration.md feat(network): follow a machine's session and forget removed ones 2026-10-02 11:56:20 -05:00
installation.md fix(appimage): install the desktop entry so the window gets its icon 2026-10-02 12:32:08 -05:00
platforms.md First commit 2026-09-28 13:59:10 -05:00
README.md First commit 2026-09-28 13:59:10 -05:00

Midi Harbor

Midi Harbor manages MIDI connections on macOS, Linux and Windows: virtual ports that applications on the same computer can use, attached MIDI hardware, network ports that reach other computers over RTP-MIDI, and Bluetooth LE MIDI devices. Connections repair themselves. A network connection that drops is reconnected, hardware that is unplugged and plugged back in picks up where it left off, and notes that were sounding when a link went away are released rather than left ringing.

A daemon owns every connection and runs whether or not anything is watching it. The command line and the graphical interface are both clients of it: closing either changes nothing.

  • Installation — building, installing, and running the daemon at login.
  • Command line — every command, its options, and its exit codes.
  • Configuration file — where the setup is kept, and how to write it by hand.
  • Platforms — where macOS, Linux and Windows behave differently, and why.

A first setup

midi-harbor service install --start      # run the daemon now and at every login
midi-harbor port create "Sequencer Bus"  # a port every MIDI application can see
midi-harbor status

To join another computer on the network, create a network port and connect it:

midi-harbor network create "Studio"
midi-harbor network discover             # the machines advertising on this network
midi-harbor network connect "Studio" "Stage Mac"
midi-harbor route create "Sequencer Bus" "Studio"

MIDI played into "Sequencer Bus" now reaches "Stage Mac", and keeps reaching it across sleep, network changes, and either machine restarting.