hexter.

A Yamaha DX7, in software.

Six-operator FM, all 32 algorithms, the envelope and LFO behavior of the real instrument, and it loads any DX7 bank ever made. Free software since 2004, written by Sean Bolton. This is the 2026 revival: the same engine, built as modern plugins for Linux, macOS and Windows, plus apps for Android and iOS.

Download latest release

Every release is on the releases page, with notes for what changed.

What you get

PluginsCLAP, LV2, Audio Unit on macOS, and the legacy DSSI plugin with its GTK2 editor on Linux
StandaloneIts own application with audio and MIDI, no host needed, on all three desktops
PhonesAn Android app, and an iPhone and iPad app you build yourself
Command linehexter-render turns a MIDI file and a bank into a WAV
Banks.syx, .dx7, .mid, .tx7, .snd, .bnk, .dx2, and raw packed voices
SysexSingle voice, 32-voice bulk dump (six-operator or four-operator), voice and function parameter changes, as the hardware sends them
LicenseGPL-2.0-or-later

Installing on a computer

Unzip the package for your platform and copy what you want:

CLAPLV2Audio Unit
Linux~/.clap/~/.lv2/
macOS~/Library/Audio/Plug-Ins/CLAP/~/Library/Audio/Plug-Ins/LV2/~/Library/Audio/Plug-Ins/Components/
Windows%COMMONPROGRAMFILES%\CLAP\%APPDATA%\LV2\

The standalone runs from wherever you put it. The Linux package holds two: hexter, which speaks ALSA and PulseAudio and runs anywhere, and hexter-jack, which adds JACK and needs a JACK library installed to start. Logic Pro and GarageBand use the Audio Unit; restart Logic after copying it and it appears under AU Instruments as Keith Adler > hexter.

The standalone window is small on purpose. hexter has no controls of its own, so its window is a short note saying it is running. Audio and MIDI settings, and saving or loading its state, live in the menu behind the icon at the top left of the window. Right-clicking the title bar opens the same menu.

Installing on a phone

Android

Download the .apk above and open it. Android will ask once whether to allow installs from your browser or file manager; say yes, then tap Install. It is not in the Play Store, so this is the only route. You need Android 8.0 or newer on a 64-bit device, which is every phone sold in the last several years. A USB MIDI keyboard needs no setup; for a Bluetooth keyboard, tap Bluetooth MIDI in the app and pick it from the list. Each release is signed with its own key, so uninstall the old version before installing a new one.

iPhone and iPad

Apple does not allow installing an app from a file, so there is nothing to download. With a Mac and Xcode you can build it onto your own phone with a free Apple ID in about twenty minutes. The README has the step by step, written for someone who has never opened Xcode. An app signed with a free Apple ID stops opening after seven days; press Run again and it works for another seven.

Playing it

hexter has no editor. You play it over MIDI and your host shows its parameters, which is how a real DX7 module works:

ParameterRange
Program1 to 128Named from the loaded bank. MIDI program change works too.
AlgorithmPatch, or 1 to 32Forces the patch's operator wiring, the knob on the front panel of the hardware.
OP1 to OP6 wavePatch, or W1 to W8The waveform each operator plays. W1 is the DX7's sine.
Tuning415.3 to 466.2 HzA4
Volume-70 to +20 dB
Polyphony1 to 64 voices
Voice modePoly, Mono, Mono legato, Mono both

The algorithm knob is an override rather than a setting. At Patch, where it rests, every program plays its own wiring and the knob does nothing. Move it to 1-32 and that wiring is forced, which you hear on notes you are already holding rather than only on the next one. Move it back to Patch, or select a program, and the patch's own algorithm returns.

The waveform knobs work the same way, one per operator. A DX7 operator can only play a sine; the four-operator machines from the TX81Z on pick one of eight shapes, and that is most of why they sound like themselves. W1 is the sine hexter has always played, W2 is that sine squared, and the rest silence part of the cycle or run it at double speed. Anything but W1 puts harmonics in before the FM starts, which takes a familiar patch somewhere a DX7 cannot go.

Loading a bank. In a CLAP host, use the host's preset browser and point it at any bank file. In an LV2 host, set the Bank file property. Either way you can also send the bank as a bulk dump over MIDI, from a six-operator machine or a four-operator one, exactly as you would to the hardware, or set HEXTER_DEFAULT_BANK to a file that loads on every instance. Six banks ship with it, including the original DX7 ROM cartridges.

Which DX7s it understands

hexter models the six-operator engine, so it plays anything from that family. DX7, TX7, TX816 and TX802 banks load as they are. DX7II and DX7s banks load with the base voice; the II's extras live in a separate data block that hexter ignores. DX1 and DX5 banks load as they are, each half being a DX7 voice.

The four-operator machines are a different synth, with four operators instead of six and their own eight algorithms. hexter reads their 32-voice dumps anyway and converts each voice: the four operators take four of the six, wired with whichever DX7 algorithm stands closest, and the other two stay silent. Envelopes, ratios, detune, feedback, the LFO and the name come across. That covers DX21, DX27 and DX100, and TX81Z banks as well. A TX81Z voice also carries a waveform per operator, and each one lands on the DX7 operator that four-operator one became.

A converted voice is a sound-alike, not the hardware. Their envelopes have a stage the DX7 does not, and their pitch modulation reaches further for the same number. It is a way to play those banks, not a way to hear those machines. The TX81Z part in particular is built from the format rather than from a real dump, and has not been tried against hardware.

The FB-01 is four-operator as well, but not that family under another name: its bank is one message of its own, 6363 bytes holding 48 voices rather than 32, with seven-character names and every value stored as a pair of nibbles. hexter converts those too. Two of its values are kept as attenuation, where zero is loudest, so they are turned round on the way in; read the other way a patch comes out inside out and silent.

That format was read from the FB01 Sound Editor by Frederic Meslin. It is GPLv3 and hexter is GPL-2.0-or-later, so none of its code is here: what was taken is the description of a file format, which is a fact about the hardware. It is credited in AUTHORS. Like the TX81Z support this is built from the format rather than from a real dump, and the FB-01 banks shipping with hexter are old conversions, not originals, so they do not exercise it.

Still out of reach: the DX11 and the reface DX.