> ## Content Index
> Fetch the complete content index at: https://blog.mrquantumoff.dev/llms.txt
> Use this file to discover other available public pages before exploring further.

# FL Studio on Linux in 2026 is very much usable (with VSTs too) with Wine.
- URL: https://blog.mrquantumoff.dev/fl-studio-on-linux-in-2026-is-very-much-usable-with-vsts-too-with-wine/
- Published: 2026-10-30T19:37:20.000Z
- Updated: 2026-10-30T19:37:20.000Z
- Description: Not Quadrant related, but thought to share with anyone potentially interested.
- Author: Demir Yerli

This is a guide made by Claude based off a session I had with it whilst trying to set up FL Studio and my VSTs. You may run into issues with VST activation, unless you are using specific versions with specific modifications (like in this guide, but this guide does it in educational purposes). Most of the guide was written by Claude Opus 5.5 with me checking.

# FL Studio 2026 on Linux (Wine)

A setup that runs FL Studio 2026 with low-latency audio, Windows plugins (including Serum 2, Anates Auto-Tune and others). Written for CachyOS / Arch with KDE Plasma (Wayland) and an NVIDIA GPU. Other distros need different package names. Other desktops and GPUs need the scaling and vsync steps adjusted.

Nothing here needs root except installing packages.

## Overview

| Piece    | What it is                                                                                                                     | Why                                                                                                                                                                                                                                                 |
| -------- | ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Wine     | giang17's d2d1-dcomp fork, built into \~/.local/opt/wine-d2d1                                                                  | Upstream Wine (as of 11.20) fails FL 26.1.4+'s signature check ([WineHQ bug 60231](https://bugs.winehq.org/show%5Fbug.cgi?id=60231&ref=blog.mrquantumoff.dev)) and lacks the Direct2D/DirectComposition support Serum 2 needs. The fork fixes both. |
| Prefix   | \~/.wine-fl, used only for FL                                                                                                  | Keeps FL's DLL overrides and settings away from other Wine apps                                                                                                                                                                                     |
| Audio    | [WinePipe](https://github.com/mrquantumoff/winepipe?ref=blog.mrquantumoff.dev), an ASIO driver that talks to PipeWire directly | Low latency with no JACK layer. FL's buffer size becomes PipeWire's quantum.                                                                                                                                                                        |
| Launcher | \~/.local/bin/flstudio plus a menu entry                                                                                       | Sets the prefix, buffer size, vsync and logging the same way every time                                                                                                                                                                             |

## 1\. Packages

You need three groups of packages: Wine's build dependencies, the mingw-w64 Windows cross-compilers for 32- and 64-bit, and Rust plus the libraries for WinePipe's settings app. You also need `winetricks` and `git`.

The Arch commands are what this guide was set up with. The Ubuntu and Fedora commands haven't been tested here. The Ubuntu list follows the one in the [Serum 2 on Linux write-up](https://meow.garden/serum-2-linux/?ref=blog.mrquantumoff.dev) and the [Building Wine](https://gitlab.winehq.org/wine/wine/-/wikis/Building-Wine?ref=blog.mrquantumoff.dev) wiki page. If `./configure` in step 2 reports a missing library, install its development package and run it again.

### Arch / CachyOS

```sh
sudo pacman -S --needed base-devel git mingw-w64-gcc rustup winetricks \
  alsa-lib libpulse dbus fontconfig freetype2 gnutls libunwind mesa \
  libx11 libxcomposite libxcursor libxfixes libxi libxrandr libxrender libxext \
  wayland libxkbcommon gstreamer gst-plugins-base-libs sdl2 vulkan-headers vulkan-icd-loader \
  flex bison

```

### Ubuntu / Debian (24.04 or newer)

```sh
sudo apt install build-essential git gcc-mingw-w64 rustup winetricks \
  libasound2-dev libpulse-dev libdbus-1-dev libfontconfig-dev libfreetype-dev libgnutls28-dev \
  libgl-dev libegl-dev libunwind-dev \
  libx11-dev libxcomposite-dev libxcursor-dev libxfixes-dev libxi-dev libxrandr-dev libxrender-dev libxext-dev \
  libwayland-bin libwayland-dev libxkbcommon-dev libxkbregistry-dev \
  libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libsdl2-dev libudev-dev libvulkan-dev \
  flex bison

```

On releases without a `rustup` package, install it from [rustup.rs](https://rustup.rs/?ref=blog.mrquantumoff.dev) instead.

### Fedora

```sh
sudo dnf install dnf-plugins-core
sudo dnf builddep wine
sudo dnf install git mingw32-gcc mingw64-gcc rustup winetricks libxkbcommon-devel wayland-devel
rustup-init -y

```

`dnf builddep wine` installs everything Fedora's own Wine package is built with.

### All distros

Set up the Rust toolchain WinePipe needs:

```sh
rustup default stable
rustup target add x86_64-pc-windows-gnu i686-pc-windows-gnu

```

Check that your kernel provides `ntsync`, which moves Wine's thread synchronisation into the kernel and keeps small audio buffers stable:

```sh
ls /dev/ntsync /usr/include/linux/ntsync.h

```

On Ubuntu and Fedora the header comes with the kernel headers package (`linux-libc-dev` or `kernel-headers`). If `/dev/ntsync` is missing, Wine still works, just with more overhead.

## 2\. Build the Wine fork

Pick the `d2d1-dcomp-11.<N>` branch matching the newest Wine release. The branch list is on [github.com/giang17/wine](https://github.com/giang17/wine?ref=blog.mrquantumoff.dev), and the branch's `PATCHES.md` explains every change.

```sh
git clone --depth 1 --branch d2d1-dcomp-11.20 https://github.com/giang17/wine.git ~/.cache/wine-d2d1-src
cd ~/.cache/wine-d2d1-src
./configure --prefix=$HOME/.local/opt/wine-d2d1 --enable-archs=i386,x86_64 --disable-tests
grep HAVE_LINUX_NTSYNC_H include/config.h   # should print a #define
make -j$(nproc) && make install

```

- Build both architectures (`i386,x86_64`). FL runs 32-bit plugins through a 32-bit bridge.
- `make install` also installs the fork's `wine.inf`. It sets `HideWineVersion` for `FL64.exe`, which makes JUCE 8.0.13+ plugins use Direct2D instead of a degraded GDI fallback that drops their artwork.

## 3\. Install WinePipe

[WinePipe](https://github.com/mrquantumoff/winepipe?ref=blog.mrquantumoff.dev) is an ASIO driver for Wine that I vibecoded. It talks to PipeWire directly, with no JACK or `pw-jack` in between. FL Studio appears as an ordinary PipeWire node with `in_N`/`out_N` ports, linked to your default devices automatically. It's a better alternative than wineasio in 2026, since it does things with a more modern and user-friendly approach, whilst also being low-latency.

- The buffer size you pick in FL becomes PipeWire's graph quantum, and the driver adds no buffering of its own.
- A stalled DAW can't stall PipeWire. If PipeWire restarts, the DAW is asked to reset its audio device.
- It's built for Wine's PE/Unix split (Wine 10.2+ / 11), with 32-bit support through WoW64.
- It has its own settings window, which opens from FL's ASIO panel button.

Build it into the Wine fork from step 2\. That needs Rust ≥ 1.93 with the Windows targets from step 1:

```sh
git clone https://github.com/mrquantumoff/winepipe.git ~/.cache/winepipe-src
cd ~/.cache/winepipe-src
make
make install-driver WINELIBDIR=$HOME/.local/opt/wine-d2d1/lib/wine PREFIX=$HOME/.local

```

The AUR package (`paru -S winepipe`) installs into system Wine (`/usr/lib/wine`) instead. Use it only if FL runs on system Wine.

See the [WinePipe README](https://github.com/mrquantumoff/winepipe?ref=blog.mrquantumoff.dev) for all options.

## 4\. Create the prefix

```sh
export WINEPREFIX=~/.wine-fl
W=~/.local/opt/wine-d2d1/bin
$W/wineboot -i
PATH=$W:$PATH winepipe-register             # register WinePipe with the fork's Wine
$W/wine reg query 'HKLM\Software\ASIO'      # should list WinePipe

```

### Display scaling

On KDE Wayland, check how X11 apps are scaled:

```sh
kreadconfig6 --file kwinrc --group Xwayland --key Scale

```

If it prints a scale like `1.75`, KDE lets X11 apps (Wine included) scale themselves, so give Wine the matching DPI: 96 × scale, here 168.

```sh
$W/wine reg add 'HKCU\Control Panel\Desktop' /v LogPixels /t REG_DWORD /d 168 /f
$W/wine reg add 'HKCU\Software\Wine\Fonts'  /v LogPixels /t REG_DWORD /d 168 /f

```

## 5\. Install FL Studio

Use the official installer from Image-Line. It installs silently:

```sh
WINEPREFIX=~/.wine-fl ~/.local/opt/wine-d2d1/bin/wine ~/Downloads/flstudio_win64_<version>.exe /S

```

The installer can look like it never finishes because Wine's background services stay running. Check for `C:\Program Files\Image-Line\FL Studio 2026\FL64.exe`, then stop the prefix with `wineserver -k`.

Sign in with your Image-Line account inside FL to unlock your license.

## 6\. Plugin runtimes

Many plugins need Microsoft's real Visual C++ runtime, GDI+ and the Direct3D shader compiler instead of Wine's stand-ins. Missing ones show up as crashes on load.

```sh
WINEPREFIX=~/.wine-fl WINE=~/.local/opt/wine-d2d1/bin/wine WINESERVER=~/.local/opt/wine-d2d1/bin/wineserver \
  winetricks -q vcrun2022 gdiplus d3dcompiler_47 corefonts

```

To see what a particular plugin imports:

```sh
x86_64-w64-mingw32-objdump -p Plugin.vst3 | grep 'DLL Name'

```

### DXVK: leave it out at first

DXVK speeds up Direct3D 11 plugins, but it replaces `dxgi`/`d3d11`, where the fork's DirectComposition support lives. Notes from testing:

- Serum 2 draws into a DirectComposition surface and is reported to work on DXVK.
- JUCE 8 plugins that draw through a swapchain flicker with DXVK 3.1.1\. Fixed in DXVK master at or after `ba62c42`.

Start without DXVK. If Direct3D plugins are too slow, install it for the whole prefix with `winetricks dxvk` and watch for flicker. To remove it again, delete DXVK's `d3d8/d3d9/d3d10core/d3d11/dxgi.dll` from `system32` and `syswow64`, remove their `DllOverrides`, then run `wineboot -u`.

## 7\. Launcher and menu entry

`~/.local/bin/flstudio`:

```sh
#!/bin/sh
export WINEPREFIX="$HOME/.wine-fl"
# Errors only, so crashes (including bridged plugins) leave a trace
export WINEDEBUG=-all,err+all
# OpenGL plugin GUIs: do not block each window's buffer swap on vblank (NVIDIA)
export __GL_SYNC_TO_VBLANK=0
LOG="$HOME/.cache/flstudio.log"
[ -f "$LOG" ] && mv -f "$LOG" "$LOG.1"
exec "$HOME/.local/opt/wine-d2d1/bin/wine" "C:/Program Files/Image-Line/FL Studio 2026/FL64.exe" "$@" >"$LOG" 2>&1

```

`~/.local/share/applications/flstudio.desktop`:

```ini
[Desktop Entry]
Name=FL Studio 2026
Exec=/home/YOU/.local/bin/flstudio %f
Icon=1010_FL64.0
Type=Application
Categories=AudioVideo;Audio;Midi;
MimeType=application/x-flp;
StartupWMClass=fl64.exe

```

The installer also creates its own entries, in `~/.local/share/applications/wine/Programs/` and as `wine-protocol-*.desktop`. Those call plain `wine`, so either change their `Exec=` to the fork's `wine` or add `NoDisplay=true` to the duplicate FL entry. Then run `kbuildsycoca6`.

A shell alias for installing plugins into the prefix:

```sh
alias flwine='WINEPREFIX=~/.wine-fl ~/.local/opt/wine-d2d1/bin/wine'

```

## 8\. Audio and MIDI settings in FL

- **Options → Audio settings → Device: WinePipe.** The buffer size set in FL becomes PipeWire's quantum directly, so there's no separate PipeWire latency setting. Start at 256 samples and lower it until it crackles, then go back up one step. FL's ASIO panel button opens WinePipe's settings window.
- **FL Studio ASIO** is a fallback that works with no extra setup, at higher latency. Its audio goes through PipeWire's PulseAudio layer. Tune it with `PULSE_LATENCY_MSEC=20` in the launcher.
- **MIDI inputs:** "PipeWire-System - input" and "PipeWire-RT-Event - input" are PipeWire's internal ports, not devices, and show **FAIL** with "The driver was not enabled". Untick **Enable** on both and untick **Auto accept detected controller**. Real controllers appear under their own names after **Refresh device list**.

## 9\. Serum 2

- Use the fork from step 2\. Stock Wine can't render it properly.

When FL runs a plugin bridged, it runs in `ilbridge.exe`, which the fork's `wine.inf` doesn't cover. Add it so JUCE 8 plugins render properly there too:

```sh
flwine reg add 'HKCU\Software\Wine\AppDefaults\ilbridge.exe' /v HideWineVersion /t REG_SZ /d Y /f

```

In `Serum2Prefs.json` (in `AppData/Roaming/Xfer/Serum 2`), the fork recommends:

```json
"Disable DirectComposition": false,
"Disable Partial Redraw": false,

```

A preferences file copied from Windows may have `"Disable Partial Redraw": true`, which makes Serum 2 redraw its whole window every frame and feel laggy, especially at 4K.

## 10\. Troubleshooting

| Symptom                                             | Cause                                                                                             | Fix                                                                                                         |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| "The validity of the program could not be verified" | Wine bug 60231: Wine re-encodes the signed attributes before checking them                        | Use the fork (it has the crypt32 fix), or FL 26.1.0 on stock Wine                                           |
| "Failed to create user data folder(s)"              | Read-only permissions copied from the NTFS mount                                                  | chmod -R u+rwX on the copied folders                                                                        |
| FL looks frozen at about 0% CPU                     | A modal dialog such as "Problems loading the project" is hidden behind the fullscreen main window | Take FL out of fullscreen (F10). On KDE, raise the dialog with a KWin script or xprop/\_NET\_ACTIVE\_WINDOW |
| "The driver was not enabled" under MIDI             | PipeWire's internal sequencer ports are enabled as inputs                                         | Disable them, and disable auto-accept                                                                       |
| ilbridge.exe access violation                       | A bridged plugin failed or closed badly                                                           | Check \~/.cache/flstudio.log. Turn off **Make bridged** for 64-bit plugins                                  |
| Plugin crashes on load                              | Missing runtime                                                                                   | Step 6, then check the plugin's imports with objdump                                                        |
| Laggy OpenGL plugin GUIs                            | NVIDIA vsync throttles every GL window                                                            | \_\_GL\_SYNC\_TO\_VBLANK=0 (already in the launcher)                                                        |
| Laggy Direct3D plugin GUIs                          | Wine's own Direct3D is slower                                                                     | Try DXVK (step 6) and watch for flicker                                                                     |
| WinePipe missing from the device list               | Not registered in this prefix, or installed into a different Wine than the one FL runs on         | Install into the fork with WINELIBDIR (step 3), and register with the fork's Wine on PATH (step 4)          |
| Files missing when opening old projects             | Paths refer to the Windows user folder, or to files never copied                                  | The user-folder link in step 9; copy the missing folders                                                    |

To see what FL is stuck on, attach Wine's debugger (FL keeps running):

```sh
flwine winedbg --command "info process"    # note FL64.exe's pid
flwine winedbg --command "bt all" 0x<pid> > ~/fl-bt.txt

```

## Repositories

| Project                                   | Link                                                                                                                                                     | Used for                                                                                                                                                                                       |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| giang17/wine (d2d1-dcomp-11.<N> branches) | [https://github.com/giang17/wine](https://github.com/giang17/wine?ref=blog.mrquantumoff.dev)                                                             | The Wine fork: Direct2D/DirectComposition for Serum 2 and the crypt32 signature fix. [Patch notes](https://github.com/giang17/wine/blob/d2d1-dcomp-11.20/PATCHES.md?ref=blog.mrquantumoff.dev) |
| WinePipe                                  | [https://github.com/mrquantumoff/winepipe](https://github.com/mrquantumoff/winepipe?ref=blog.mrquantumoff.dev)                                           | ASIO driver for Wine that talks to PipeWire directly                                                                                                                                           |
| Wine (upstream)                           | [https://gitlab.winehq.org/wine/wine](https://gitlab.winehq.org/wine/wine?ref=blog.mrquantumoff.dev)                                                     | Where the fixes need to land. FL's signature check is [bug 60231](https://bugs.winehq.org/show%5Fbug.cgi?id=60231&ref=blog.mrquantumoff.dev)                                                   |
| winetricks                                | [https://github.com/Winetricks/winetricks](https://github.com/Winetricks/winetricks?ref=blog.mrquantumoff.dev)                                           | Installs the plugin runtimes in step 6                                                                                                                                                         |
| DXVK                                      | [https://github.com/doitsujin/dxvk](https://github.com/doitsujin/dxvk?ref=blog.mrquantumoff.dev)                                                         | Optional faster Direct3D for plugins (step 6)                                                                                                                                                  |
| regipy                                    | [https://github.com/mkorman90/regipy](https://github.com/mkorman90/regipy?ref=blog.mrquantumoff.dev)                                                     | Reads FL's settings from the Windows registry hive (step 9)                                                                                                                                    |
| JUCE                                      | [https://github.com/juce-framework/JUCE](https://github.com/juce-framework/JUCE?ref=blog.mrquantumoff.dev)                                               | Plugin framework. [PR #1701](https://github.com/juce-framework/JUCE/pull/1701?ref=blog.mrquantumoff.dev) would make the HideWineVersion workaround unnecessary                                 |
| yabridge                                  | [https://github.com/robbert-vdh/yabridge](https://github.com/robbert-vdh/yabridge?ref=blog.mrquantumoff.dev)                                             | Runs Windows plugins in a native Linux DAW. Its [Serum 2 issue](https://github.com/robbert-vdh/yabridge/issues/413?ref=blog.mrquantumoff.dev) tracks Serum 2 under Wine                        |
| yabridge-bottles-wineloader               | [https://github.com/microfortnight/yabridge-bottles-wineloader](https://github.com/microfortnight/yabridge-bottles-wineloader?ref=blog.mrquantumoff.dev) | Lets yabridge use different Wine builds per plugin                                                                                                                                             |

Background reading: [Serum 2 works on Linux now](https://meow.garden/serum-2-linux/?ref=blog.mrquantumoff.dev) explains the Serum 2 situation with yabridge and Bottles.

## Notes

- **Plugin licensing.** Install plugins from their vendors' installers. iLok/PACE-protected plugins often fail under Wine. A Windows VM with your USB audio interface passed through is the fallback for those.
- **Updates.** The fork and WinePipe don't update with pacman. When a new `d2d1-dcomp-11.<N>` branch appears, rebuild step 2 and reinstall WinePipe into it (step 3). Check whether upstream Wine has merged the bug 60231 and Direct2D fixes before switching back. Or just keep the old Wine version and WinePipe if they work without issues.

#