3.0.0
This release has been in the making for a long time, and we now finally have support for VST3 plugins! With this release yabridge now for the very first time lets you use Windows VST3 plugins as if they were native Linux VST3 plugins. Other than allowing you to now use plugins that do not have an accompanying VST2 version, these VST3 plugins also provide some new features that are not available to VST2 plugins while also having lower processing overhead. Aside from VST3 support this release includes a lot of responsiveness and performance improvements as well as a number of important bug fixes. You can read more about all of this in the full changelog below.
If you need any help setting up yabridge or if you just want to keep up to date with new releases, then feel free to join the Discord.
Added
- Yabridge 3.0 introduces the first ever true Wine VST3 bridge, allowing you to use Windows VST3 plugins in Linux VST3 hosts with full VST 3.7.1 compatibility. Simply tell yabridgectl to look for plugins in
$HOME/.wine/drive_c/Program Files/Common Files/VST3
, runyabridgectl sync
, and your VST3 compatible DAW will pick up the new plugins in~/.vst3/yabridge
automatically. Even though this feature has been tested extensively with a variety of VST3 plugins and hosts, there's still a substantial part of the VST 3.7.1 specification that isn't used by any of the hosts or plugins we could get our hands on, so please let me know if you run into any weird behaviour! There's a list in the readme with all of the tested hosts and their current VST3 compatibility status. - Added an option to use Wine's XEmbed implementation instead of yabridge's normal window embedding method. This can help reduce flickering when dragging the window around with certain window managers. Some plugins will have redrawing issues when using XEmbed or the editor might not show up at all, so your mileage may very much vary.
- Added a compatibilty option to forcefully enable drag-and-drop support under REAPER. REAPER's FX window reports that it supports drag-and-drop itself, which makes it impossible to drag files onto a plugin editor embedded there. This option strips the drag-and-drop support from the FX window, thus allowing you to drag files onto plugin editors again.
- Added a frame rate option to change the rate at which events are being handled. This usually also controls the refresh rate of a plugin's editor GUI. The default 60 updates per second may be too high if your computer's cannot keep up, or if you're using a host that never closes the editor such as Ardour.
- Added a compatibility option to disable HiDPI scaling for VST3 plugins. At the moment Wine does not have proper fractional HiDPI support, so some plugins may not scale their interfaces correctly when the host tells those plugins to scale their GUIs. In some cases setting the font DPI in
winecfg
's graphics tab to 192 will also cause the GUIs to scale correctly at 200%. - Added the
with-vst3
compile time option to control whether yabridge should be built with VST3 support. This is enabled by default.
Changed
-
libyabridge.so
is now calledlibyabridge-vst2.so
. If you're using yabridgectl then nothing changes here. To avoid any potential confusion in the future, please remove the oldlibyabridge.so
file before upgrading. -
The release archives uploaded on GitHub are now repackaged to include yabridgectl for your convenience.
-
Window closing is now deferred. This means that when closing the editor window, the host no longer has to wait for Wine to fully close the window. Most hosts already do something similar themselves, so this may not always make a difference in responsiveness.
-
Slightly increased responsiveness when resizing plugin GUIs by preventing unnecessary blitting. This also reduces flickering with plugins that don't do double buffering.
-
VST2 editor idle events are now handled slightly differently. This should result in even more responsive GUIs for VST2 plugins.
-
Win32 and X11 events in the Wine plugin host are now handled with lower scheduling priority than other tasks. This might help get rid of potential DSP latency spikes when having the editor open while the plugin is doing expensive GUI operations.
-
Opening and closing plugin editors is now also no longer done with realtime priority. This should get rid of any latency spikes during those operations, as this could otherwise steal resources away from the threads that are processing audio.
-
The way realtime priorities assigned has been overhauled:
- Realtime scheduling on the plugin side is now a more granular. Instead of setting everything to use
SCHED_FIFO
, only the spawned threads will be configured to use realtime scheduling. This prevents changing the scheduling policy of your host's GUI thread if your host instantiates plugins from its GUI thread like REAPER does. - Relaying messages printed by the plugin and Wine is now done without realtime priority, as this could in theory cause issues with plugins that produce a steady stream of fixmes or other output.
- The realtime scheduling priorities of all audio threads in the Wine plugin host are now periodically synchronized with those of the host's audio threads.
- Realtime scheduling on the plugin side is now a more granular. Instead of setting everything to use
-
When using
yabridge.toml
config files, the matched section or glob pattern is now also printed next to the path to the file to make it a bit easier to see where settings are being set from. -
The architecture document has been updated for the VST3 support and it has been rewritten to talk more about the more interesting bits of yabridge's implementation.
-
Part of the build process has been changed to account for this Wine bug. Building with Wine 5.7 and 5.8 required a change for
yabridge-host.exe
to continue working, but that change now also breaks builds using Wine 6.0 and up. The build process now detects which version of Wine is used to build with, and it will then apply the change conditionally based on that to be able to support building with both older and newer versions of Wine. This does mean that when you switch to an older Wine version, you might need to runmeson setup build --reconfigure
before rebuilding to make sure that these changes take effect. -
yabridge-host.exe
will no longer remove the socket directories if they're outside of a temporary directory. This could otherwise cause a very unpleasant surprise if someone were to pass random arguments to it when for instance trying to write a wrapper aroundyabridge-host.exe
. -
When
YABRIDGE_DEBUG_LEVEL
is set to 2 or higher and a plugin asks the host for the current position in the song, yabridge will now also print the current tempo to help debugging host bugs.
Fixed
- VST2 plugin editor resizing in REAPER would not cause the FX window to be resized like it would in every other host. This has now been fixed.
- The function for suspending and resuming audio,
effMainsChanged()
, is now always executed from the GUI thread. This fixes EZdrummer not producing any sound because the plugin makes the incorrect assumption thateffMainsChanged()
is always called from the GUI thread. - Event handling is now temporarily disabled while plugins are in a partially initialized state. The VST2 versions of T-RackS 5 would have a chance to hang indefinitely if the event loop was being run before those plugins were fully initialized because of a race condition within those plugins. This issue was only noticeable when using plugin groups.
- Fixed a potential issue where an interaction between Bitwig Studio and yabridge's input focus grabbing method could cause delayed mouse events when clicking on a plugin's GUI in Bitwig. This issue has not been reported for yabridge 2.2.1 and below, but it could in theory also affect older versions of yabridge.
yabridgectl
- Updated for the changes in yabridge 3.0. Yabridgectl now allows you to set up yabridge for VST3 plugins. Since
libyabridge.so
got renamed tolibyabridge-vst2.so
in this version, it's advised to carefully remove the oldlibyabridge.so
andyabridgectl
files before upgrading to avoid confusing situations. - Added the
yabridgectl set --path-auto
option to revert back to automatically locating yabridge's files after manually setting a path withyabridgectl set --path=<...>
. - Added the
yabridgectl set --no-verify={true,false}
option to permanently disable post-installation setup checks. You can still directly pass the--no-verify
argument toyabridgectl sync
to disable these checks for only a single invocation.
Compatibility
The archive ending in -ubuntu-18.04.tar.gz
is a compatibility release meant for older distros and is thus slightly larger in size. If you're using Ubuntu 18.04, Linux Mint 19, debian 10, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. Yabridgectl will run on any distro.
Updating
To update from an older installation, simply overwrite your current yabridge and yabridgectl files with the ones downloaded below, and then rerun yabridgectl sync
to complete the update. As of yabridge 3.0.0 yabridgectl is now included in the regular release archives for your convenience.