Self-hosted service
FluidSynth/fluidsynth avatar
FluidSynth/fluidsynth

FluidSynth: A Real-Time SoundFont 2 Synthesizer You Embed or Drive from the Shell

Software synthesizer based on the SoundFont 2 specifications

2,507 stars340 forksCLGPL-2.1

At a glance

What is it?
FluidSynth turns MIDI events and SoundFont 2 files into audio on Linux, macOS, Windows and more. Here is how it is built, how to get a first note out of it, and where it stops being the right tool.
Who is it for?
Adopt FluidSynth when you need a permissively licensed (LGPL-2.1) SoundFont 2 engine that you can call from C, drive from a shell, or ship inside a larger application, and when you already have an SF2 bank whose licence you have checked. Do not adopt it expecting a sample-streaming sampler, a DAW, or a General MIDI bank bundled with the source.
Can I use it commercially?
Yes, with conditions. LGPL-2.1 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What FluidSynth actually is, and who ends up using it

FluidSynth is a software synthesizer built around the SoundFont 2 specification. The README describes it as a cross-platform, real-time software synthesizer and as the software analogue of a MIDI synthesizer: it reads MIDI events from input devices and generates audio by using a SoundFont. It can also play MIDI files.

The intended audience is narrower than the download numbers suggest. Three groups show up. First, application developers who need a MIDI-to-audio engine inside a larger program and want a C library they can link against rather than a standalone app. Second, people who have a .sf2 bank and a .mid file and just want sound out of a terminal. Third, integrators who need MIDI playback on a platform where a hardware or OS-level synthesizer is either absent or not configurable.

The historical section of the README explains the origin: the project grew out of a networked multi-user game where users were meant to extend the game with their own sounds, and the team chose wavetable synthesis because it is low on CPU usage and because MIDI files plus SoundFont files stay small and are easier to distribute than MP3. That origin still explains the design. It is a compact engine meant to be embedded, not a studio instrument.

Wavetable synthesis, SoundFont banks, and the self-contained design decision

The mechanism is wavetable synthesis. A SoundFont 2 file holds sampled waveforms plus the mapping rules that decide which sample plays for which MIDI note, velocity and channel. FluidSynth reads MIDI events, resolves them against that mapping, and renders audio in real time.

The README is explicit about a design constraint that shaped the codebase: the synthesizer was designed to be as self-contained as possible, because it had to be multi-platform (Linux, macOS, Win32) and therefore could not rely on any platform-specific library. That is a real trade-off rather than a slogan. Self-containment is why the engine is portable to the long list of platforms in the build badges, including FreeBSD, Solaris, OS/2, Android and iOS. It is also why audio and MIDI backends are optional build-time dependencies rather than hard requirements: the Dockerfile in the repository installs alsa-devel, libjack-devel, pipewire-devel, portaudio-devel, libpulse-devel, SDL3-devel and dbus-1-devel, which tells you the range of output paths a full build can carry. A minimal build can drop most of them.

SoundFont handling is not part of the core. The Dockerfile installs libinstpatch-devel specifically, and the README points readers to the wiki for the SoundFont concept. The sf2/ directory at the top level of the repository is where SoundFont-related material lives. If your question is about authoring or editing banks rather than playing them, FluidSynth is the wrong layer.

Installing FluidSynth and getting a first MIDI file to play

The README does not list package-manager commands. It points to the wiki page BuildingWithCMake for building from source, and the repository ships a CMakeLists.txt, a FluidSynthConfig.cmake.in for downstream find_package consumers, and a fluidsynth.pc.in pkg-config template. So there are two realistic routes: install a distribution package, or build from source with CMake.

The repository's own Dockerfile shows the dependency set a full Linux build expects. This is the layer that matters if you are building yourself rather than installing a binary:

dockerfile
RUN zypper refresh && zypper --non-interactive install --no-recommends \
  git bash findutils gawk cmake pkg-config make ninja gcc-c++ clang libasan8 libgomp1 \
  alsa-devel libjack-devel pipewire-devel ladspa-devel readline-devel libsndfile-devel SDL3-devel portaudio-devel libpulse-devel dbus-1-devel

The repository also carries a docker-compose.yml for development, which builds a local image named fluidsynth-devel, mounts the working tree at /fluidsynth, and passes /dev/snd through to the container:

yaml
services:
  fluidsynth:
    image: fluidsynth-devel
    build:
      context: .
    working_dir: /fluidsynth
    devices:
      - /dev/snd:/dev/snd

That device mapping is the part worth noticing. Without /dev/snd the container has no audio device, so it is useful for building and for regression tests but not for listening.

Once a binary exists, the command-line player is the shortest path to a first note. You supply a SoundFont bank and a MIDI file. FluidSynth does not ship a General MIDI bank in the source tree, so you need an .sf2 file of your own before anything is audible. The README does not document the exact CLI flag set, so check the wiki or the installed man page for the current syntax rather than guessing flags.

Where FluidSynth is the wrong tool

The most common mismatch is expecting the project to supply sound. FluidSynth is an engine. The README describes it as generating audio by using a SoundFont, and the wiki is where the SoundFont concept is explained. No bank is bundled in the repository, and the licence of whatever bank you load is your problem, not the project's. A user who installs FluidSynth and hears nothing has usually hit exactly this, not a bug.

The second mismatch is scope. This is not a sampler in the modern sense: there is no disk-streaming of multi-gigabyte libraries described anywhere in the README, and the historical rationale in the README explicitly favours small files built from loops and wavetables. If your workflow depends on streaming large sample sets from disk, the wavetable-plus-SoundFont model is the wrong shape.

The third is latency and real-time behaviour. The README calls FluidSynth a real-time synthesizer, but real-time performance depends on the audio backend you build against and on the host. A build with a desktop-oriented backend will not behave like one wired to JACK. The README does not publish latency figures, and none should be assumed.

Finally, the documentation is deliberately thin in the repository. The README states plainly that the central place for documentation is the GitHub wiki, and that missing parts should be reported to the mailing list. That means the repository itself will not answer most operational questions, and the wiki is community-editable.

FluidSynth compared with a DAW's built-in sampler

The obvious alternative for many readers is the sampler or SoundFont player already inside a digital audio workstation, or a plugin host that loads a SoundFont instrument. The difference is architectural, not cosmetic. A DAW sampler is a GUI-first instrument: you load it, you click a piano roll, you export a mixdown. FluidSynth is a library and a command-line program first, and the README frames it as something to integrate, with self-containment chosen so the code could be embedded across platforms.

That distinction decides the choice. If a human is going to play and edit, a DAW sampler is the better fit and FluidSynth adds nothing. If a program needs to turn MIDI into audio without a GUI, without a plugin host, and on platforms where no plugin format is available, the embeddable C library is the reason to pick FluidSynth. The same reasoning applies to server-side or headless rendering, where a plugin host is not an option at all.

A second alternative is writing your own wavetable layer. FluidSynth already implements the SoundFont 2 mapping, and the README's design notes describe the portability work that went into keeping it platform-neutral. Reimplementing that to avoid a dependency is a large amount of work for a solved problem.

Licence terms, versioning, and what a FluidSynth upgrade costs

FluidSynth's source is distributed under the GNU Lesser General Public License, version 2.1. The README points readers who want to understand commercial or closed-source use to a LicensingFAQ in the wiki, and that page, not this article, is where the linking questions belong. The practical point is that LGPL-2.1 is a weak-copyleft licence with specific obligations around relinking and source availability, and those obligations differ between dynamic and static linking. Check the LicensingFAQ against your own distribution model.

The project is not archived, and the last push to the master branch was on 2026-09-27, with releases v2.6.1 on 2026-09-19, v2.6.0 on 2026-08-11 and v2.5.7 on 2026-07-25. That release cadence suggests the upgrade path is a moving target rather than a frozen one, and the 2.6.0 minor release is the kind of version where API or behaviour changes are most likely to appear. The repository keeps a ChangeLog.old at the top level, which implies change history is tracked, but the README does not describe a deprecation policy or a rollback procedure. If you pin a version, verify the behaviour you depend on against the release notes for each step rather than assuming drop-in compatibility.

Portability has a cost on the other side. The CI badges cover Linux, Alpine with musl, FreeBSD, Windows 10, macOS, Android, iOS, Solaris and OS/2. That breadth is good for reach and bad for anyone who wants a single supported configuration: the number of build combinations the project must keep working is large.

Editorial conclusion

Adopt FluidSynth when you need a permissively licensed (LGPL-2.1) SoundFont 2 engine that you can call from C, drive from a shell, or ship inside a larger application, and when you already have an SF2 bank whose licence you have checked. Do not adopt it expecting a sample-streaming sampler, a DAW, or a General MIDI bank bundled with the source. Before committing, verify three things: that your target platform's audio backend is present in the build you install, that your SF2 file is licensed for your distribution, and whether the LGPL-2.1 obligations of dynamic linking versus static linking fit your product, which the project's own LicensingFAQ addresses.

Frequently asked questions

What does FluidSynth do?

It is a cross-platform, real-time software synthesizer based on the SoundFont 2 specification. It reads and handles MIDI events from MIDI input devices and generates audio using a SoundFont, and it can also play MIDI files.

Is FluidSynth free?

The source code is distributed under the GNU Lesser General Public License, version 2.1, as stated in the README. The README points to a LicensingFAQ in the wiki for the conditions of use in commercial or closed-source projects.

How to install FluidSynth on Linux?

The README does not list package commands; it directs readers to the wiki page BuildingWithCMake for building from source. The repository's Dockerfile shows the dependency set a full Linux build expects, including alsa-devel, libjack-devel, pipewire-devel, portaudio-devel, libpulse-devel and SDL3-devel.

How to use FluidSynth with a MIDI file?

The README states that FluidSynth can play MIDI files in addition to handling live MIDI events, and that it generates audio by using a SoundFont. You need to supply both a MIDI file and a SoundFont 2 bank, since no bank is bundled in the repository.

What is FluidSynth?

The README describes it as a cross-platform, real-time software synthesizer based on the Soundfont 2 specification, and as the software analogue of a MIDI synthesizer. It generates audio by reading and handling MIDI events from MIDI input devices using a SoundFont.

How to use FluidSynth?

You provide a SoundFont 2 bank and MIDI input, either from a MIDI device or from a MIDI file, and FluidSynth renders the audio. The README does not spell out the command-line syntax; it points to the wiki for documentation and further links.

Official sources

  1. FluidSynth/fluidsynth on GitHub
  2. License: LGPL-2.1
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/fluidsynth-fluidsynth.svg)](https://hysenlabs.com/projects/fluidsynth-fluidsynth)