Skip to content

Releases: robbert-vdh/yabridge

4.0.0

09 Jun 14:47
Compare
Choose a tag to compare

TL;DR: If you don't have the time to read the entire post, do make sure to still check out the first bullet under the 'yabridgectl' section of the changelog.

It's been a couple of months, but today's the day to finally release yabridge 4.0. The original plan was to also work on ARA2 support for this release, but most of these changes have already been sitting idly on the master branch since April as I didn't have any time to prepare a proper release in the meantime. So it seemed like a good idea to just get these things out of the way first, as there are a several significant quality of life improvements in here.

So, what changed? In short, almost everything. But, at least in theory, after the initial yabridgectl sync, everything should work exactly as it always has worked or better. All of these changes and many more are covered in more detail in the changelog. So if you're interested, then I encourage you to read that as well.

The biggest change in yabridge 4.0 is very technical, but it will improve the experience of using yabridge considerably. Yabridge has always consisted of two components: a plugin library a native VST2 or VST3 host can load, and a Wine plugin host application that can host Windows VST2 and VST3 plugins. Both components talk to each other to pass through messages or function calls, and they are thus coupled very tightly together. Because of that, updating one but not the other may result in crashes or other unexpected behavior. And as a result, you had to always rerun yabridgectl sync after updating yabridge in order to replace old yabridge library copies with fresh ones. This can be a problem when installing yabridge through a distro's package manager, as the package may have been updated without you realizing it. Yabridge would pop up a desktop notification warning you about this, but even that may not work if the old yabridge library copies were compiled against older version of Boost as the host would now be completely unable to load the plugin. To remedy these problems, yabridge 4.0 no longer copies the entire plugin libraries around. Instead, yabridgectl now using these new, dependencyless shim libraries while the main yabridge files stay in their place. These shim libraries are tiny plugins that simply search the system for the actual yabridge files, load them, and then forward all function calls to them. This somewhat resembles the chainloading process used by boot loaders, and yabridge thus borrows that term to refer to this process. As a result of this, yabridge plugins can no longer go out of sync as the chainloader will always load the correct version of the yabridge plugin library, even if you didn't rerun yabridgectl sync after an upgrade. In addition, this approach slightly reduces the time it takes to set up plugins, and plugins take up less disk space if you aren't using Btrfs or XFS (in which case yabridgectl uses reflinks instead of copies).

The second user facing change is that VST2 plugins are now set up in ~/.vst/yabridge by default, just like VST3 plugins are set up in ~/.vst3/yabridge. This way you only need to make sure your DAW searches through ~/.vst for VST2 plugins, and it will automatically be able to find all of your yabridge plugins. Be sure to read the bullet under the 'yabridgectl' section in the changelog for more detailed migration instructions, but the short version is that you simply need to make sure that your DAW searches for VST2 plugins in ~/.vst, and that it no longer searches for plugins in any of your Windows plugin directories. After running yabridgectl sync, yabridgectl will inform you about the leftover .so files in your Windows plugin directories from yabridge 3.x. Simply read through that list to make sure there's nothing in there that shouldn't be deleted, and then rerun the command as yabridgectl sync --prune to remove them. If you want to stick with the old way to set up VST2 plugins instead of them being set up in ~/.vst/yabridge, then there is an option available to do so through yabridgectl set.

There are many more noticeable changes, but the most important ones I should mention here are in yabridge's shared memory handling and in yabridgectl's post-installation setup checks. Yabridge uses desktop notifications to inform you about things that are going terribly wrong, and yabridgectl now also checks whether notify-send is installed after running yabridgectl sync. This ensures that you won't miss any important messages. The shared memory handling change relates to how yabridge handles the locking of shared memory. Yabridge uses shared memory to share audio buffers between the native plugin and the Wine plugin host, and it tries to lock that shared memory to main memory to prevent it from being swapped out to the disk. Previously yabridge would simply terminate if it couldn't do so, but now it will fall back to not using memory locking if the user doesn't have permissions to do so. It will, however, still show you an annoying desktop notification until you fix this.

On the backend side, a lot has changed. The biggest change is that the dependency on Boost has been completely removed, and everything has been reworked accordingly. This should make packaging easier, as yabridge now no longer depends on any system library other than the basic libraries needed to interact with X11. Some parts of Boost have been replaced by other headers-only libraries, while other parts now simply use custom implementations. All of this is explained in more detail in the 'Packaging notes' section of the changelog. Yabridgectl also lost its dependency on winedump, at least in most cases. It now tries to parse plugin libraries directly using the goblin binary parsing library. This should also speed up the syncing process. I did, however, run into one plugin that this new parser couldn't handle. If that happens then winedump will still be used instead.

There are many more changes, so I encourage you to read the full changelog below. Oh and on a completely unrelated note, I've been working on a CLAP and VST3 plugin framework and a suite of plugins in Rust, so be sure to check that out as well if you're interested: https://github.com/robbert-vdh/nih-plug

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Yabridge 4.0 completely revamps the way plugin loading works to allow yabridge to be updated without breaking existing yabridge'd plugins while saving disk space on filesystems that don't support reflinks and speeding up the yabridgectl sync process. Up until this point, yabridgectl sync has always made copies of yabridge's libyabridge-vst2.so or libyabridge-vst3.so plugin libraries for every Windows plugin it sets up. These plugins are tightly coupled to the yabridge plugin host binaries, and updating one but not the other can thus cause issues. With yabridge 4.0, yabridgectl no longer copies the entire plugin libraries. Instead, it now creates copies of these new tiny dependencyless shim libraries. When loaded by a plugin host, these libraries locate the actual plugin libraries on the system and then transparently forward all entry point function calls to them as if the host was loading the yabridge plugin library directly. Yabridge internally calls these libraries chainloaders due to their similarity to the identically named functionality in boot loading process. This allows yabridge to be updated independently of these copied chainloading libraries. As such, it is no longer possible for yabridge to be out of sync after an update. If you use a distro packaged version of yabridge, then that means yabridge can now be updated safely without requiring any action from your side.
  • Added support for the effBeginLoadBank and effBeginLoadProgram VST2 opcodes for loading state as a program or a program bank.

Changed

  • Almost the entirety of yabridge's backend has been rewritten to get rid of all dependencies on the Boost libraries. As a consequence, the runtime dependency on Boost.Filesystem has also been removed. This makes packaging yabridge for distros easier, and it makes the packages more reliable by removing the need for yabridge to be rebuilt whenever Boost gets updated. Additionally, it also makes compiling slightly faster and the binaries are slightly smaller.
  • The functionality for the yabridge-group binaries has been merged into the yabridge-host binaries to reduce duplication.
  • When the user does not have the permissions to lock the shared audio buffers into memory, yabridge will now retry mapping the memory without locking it instead of immediately terminating the process. An annoying desktop notification will still be shown every time you load a plugin until you fix this however.
  • Yabridge now prints the path to the libyabridge-{vst2,vst3}.so library that's being used on startup. This tells you where the chainloader is loading the library file from. Because you can never have too much information, right?
  • The with-bitbridge, with-vst3, and with-winedbg build options have been renamed to bitbridge, vst3, and winedbg.
  • effProcessEvents VST2 calls are now filtered out from the log when YABRIDGE_DEBUG_LEVEL is set to 1.

Removed

  • Removed the with-static-boost build option since there's no longer a dependency on Boost.Filesystem.
  • Removed the yabridge-group binaries as they are now part of the yabridge-host binaries. This saves precious megabytes.

Fixed

  • Fixed manually changing channel counts with supported VST3 plugins in REAPER not working.
  • Fixed an obscure issue with VST3 plugins crashing in Ardour on Arch/Manjaro because of Ardour's misreported parameter queue lengths.
  • Fixed yabridge throwing...
Read more

3.8.1

08 Mar 21:36
Compare
Choose a tag to compare

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Changed

  • Change the low RLIMIT_RTTIME warning to mention setting up realtime priviliges instead of changing PipeWire's config now that PipeWire MRs !1118 and !1120 have been merged and PipeWire can use regular realtime scheduling without imposing any resource limits out of the box.
  • Prevented yabridge's ad-hoc socket acceptors from inheriting realtime scheduling when spawned from audio threads. In practice this should not have caused any noticeable effects as these threads are sleeping all the time except for under very specific circumstances.

Fixed

  • Fixed the REAPER-specific editor_force_dnd option not working correctly when using the Track -> Insert virtual instrument on new track... option. When using this option REAPER will first embed the plugin in an offscreen plugin window and it will only then create the actual FX window and embed the other window in it.
  • Fixed the VST3 version of IK Multimedia's T-RackS 5 producing silent output when doing offline rendering. This could happen when exporting or bouncing audio in Bitwig Studio 4.1+, Ardour and in REAPER. These plugins apparently need to process audio from the main GUI thread when in offline rendering mode. If you try to process audio from the...audio thread, then they will produce silence and hang afterwards (which a fix in yabridge 3.7.0 previously addressed).
  • Fixed crashes when opening plugin editors under Crostini on ChromeOS due to non-standard X11 implementations.
  • Worked around a bug in the RandARP VST2 plugin where the plugin would report that its editor window is 0 by 0 pixels.
  • Fixed building under Wine 7.2 and up because of changes to the definitions of Wine's numerical types.

yabridgectl

  • yabridgectl status no longer mentions anything about installation methods if you're using the regular, copy-based installation method. This is a follow-up to the changes made in yabridgectl 3.8.0.

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, AV Linux MXE 2021, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. If you need a build of yabridge for use with 32-bit plugin hosts, then you can find those on the automated builds page.

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.

3.8.0

15 Jan 15:20
Compare
Choose a tag to compare

Yet Another mostly incremental release just in time for the quarterly release pact. There are mostly a couple of minor changes and fixes to improve the interactions with specific plugins, as well as a number of small improvements to yabridgectl. One other thing worth mentioning is that yabridge and yabridgectl are now packaged in Arch's official repositories btw. So if you're on Arch or Manjaro and you were using one of the AUR packages before, then you may want to switch to these new packages instead.

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Added support for VST3 plugins interacting directly with the host's context menu items. Most plugins that use VST3's context menu support let the host handle drawing the actual menu, but it's also possible for plugins to incorporate the host's menu items into their own custom context menu. So far this feature has only been tested with Surge XT's Windows VST3 version since very few if any other plugins do this right now, but other plugins may start doing this as well in the future.

Changed

  • Added support for Wine 6.23's new fixed winedbg command line argument handling.
  • Changed the build and cross-compilation definitions to allow repository-packaged CMake build configurations to be used for the bitsery and function2 dependencies.

Fixed

  • Fixed Waves V13 VST3 plugins crashing when opening the GUI. These plugins thought it would be a great idea to randomly dereference null pointers if the window they're embedded in is already visible. A day's worth of debugging well spent. Even after this, the V13 plugins are a bit unstable under Wine in general, and they will likely crash when reopening the editor a couple of times or when removing them. So as always, if you can avoid Waves, that would be for the best.
  • Fixed sluggish UIs in Output's Thermal and likely a handful of other JUCE-based plugins with a lot of parameters. These plugins would emit hundreds to thousands of events when the GUI changes. Yabridge now detects this, and relaxes the throttling we have in place to prevent certain other plugins from getting stuck in infinite loops.
  • Fixed DrumCore 3 crashing when trying to drag grooves from the plugin to other applications. This happened because of an integer underflow in that plugin, causing the number of reported drag-and-drop formats to be magnitudes higher than yabridge's indicated maximum.
  • Fixed Wine version detection in the build configuration.
  • Fixed VST3 connection point proxies not being disconnected properly. The code path for this is not being used for any of the current Linux VST3 hosts, so this won't have caused any issues.
  • Rewritten the VST3 object handling to prevent some theoretical data races when the host inserts or removes plug instances while other instances of that plugin are processing audio.

yabridgectl

  • Yabridgectl's help text received some shiny new colors.
  • Disallowed adding individual files or symlinks to individual files with yabridgectl add. Yabridgectl was never intended to be used that way and while it does sort of work, it will lead to a number of surprises down the line.
  • Deprecated support for the symlink-based installation method in yabridgectl and removed all remaining mentions of it from the documentation. This feature has for all intents and purposes already been made obselete in yabridge 2.1.0, but the option still remained available. Enabling this option would lead to a lot of surprises because of the way Linux's dynamic linker works. And with modern file systems supporting reflinks and yabridge falling back to searching for binaries in ~/.local/share/yabridge, there's zero reason to use this feature anymore. Yabridgectl will now print a warning upon syncing when the symlink installation method has been enabled, and the feature will be removed completely in yabridge 4.0.
  • Blacklisted symlinks and symlinked directories are now handled correctly when syncing.

Packaging notes

  • The tomlplusplus wrap dependency has been updated to version 3.0.1 because of breaking API changes in version 3.0.
  • We now target VST3 SDK version 3.7.4 with git tag v3.7.4_build_25-patched.
  • Yabridgectl now uses Rust 2021 and requires rustc 1.56 or newer to build.

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, AV Linux MXE 2021, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. If you need a build of yabridge for use with 32-bit plugin hosts, then you can find those on the automated builds page.

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.

3.7.0

21 Nov 15:20
Compare
Choose a tag to compare

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Added an environment variable for changing the directory yabridge stores its sockets and other temporary files in. This is only useful when running the Wine process under a separate namespace. If you don't know what this means, then you probably don't need this!

Changed

  • Added a workaround for a new bug in Wine 6.20 that would cause compilation to fail by redefining common variable names used in the standard library. This issue has since been fixed in Wine 6.21 and up.

Fixed

  • Fixed the VST3 version of IK Multimedia's T-RackS 5 causing offline rendering to stall indefinitely. This could happen when exporting or bouncing audio in Bitwig Studio 4.1, Ardour and in REAPER. Those plugins deadlock when they receives timer events while doing offline audio processing, so we now prevent that from happening.
  • The socket endpoints used by plugin group host processes to accept new connections now get removed when those processes shut down. Previously this would leave behind a file in the temporary directory.

Packaging notes

  • All Meson wraps now use wrap-git instead of downloading tarballs from GitHub. Previously the bitsery and function2 wraps would use source tarballs.
  • The meson.build patch overlays for the bitsery and function2 wraps are no longer stored in tarballs committed to yabridge's repository. Instead, they are now regular directories in the subprojects/packagefiles directory. This means that building yabridge with these wraps now requires Meson 0.55 or later because of the use of patch_directory.
  • The bitsery wrap dependency was updated to version 5.2.2.
  • The function2 wrap dependency was updated to version 4.2.0.
  • The tomlplusplus wrap dependency was updated to slightly after version 2.5.0 because of an issue with their meson.build file that breaks compatibility with Meson 0.60.0 on older versions.

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, AV Linux MXE 2021, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. If you need a build of yabridge for use with 32-bit plugin hosts, then you can find those on the automated builds page.

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.

3.6.0

15 Oct 08:40
Compare
Choose a tag to compare

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Yabridge will now also show annoying desktop notifications when encountering low RLIMIT_RTTIME and RLIMIT_MEMLOCK values. This can happen on systems that have not yet been configured for pro audio work or with using an out of the box PipeWire configuration. If these issues are not fixed, then certain plugins may crash during initialization. Since these configuration issues may not immediately cause any obvious problems, it's better to be upfront about it so they can't cause mysterious issues later on. We would already print warnings about this to the terminal, but those are easily missed when starting a DAW from the GUI.
  • Added a new editor_coordinate_hack compatibility option to replace editor_double_embed. This can be useful with buggy plugins that have their editor GUIs misaligned after resizing the window. These plugins tend to draw their GUI based on (top level) window's absolute screen coordinates instead of their own relative position within the parent window. Some known plugins that can benefit from this are PSPaudioware E27 and Soundtoys Crystallizer.

Removed

  • The editor_double_embed option added in yabridge 1.4.0 has been removed as the editor_coordinate_hack option supersedes it.

Changed

  • The Wine plugin host applications now print their version information before the Usage: string when invoked without any command line arguments.
  • VST3 Data (SysEx) events now use the same small buffer optimization yabridge already used for VST2 SysEx events. This avoids allocations when a VST3 plugin sends or receives a small SysEx event.

Fixed

  • Worked around a bug in Boost.Process that would cause yabridge to crash with an locale::facet::_S_create_c_locale name not valid exception when (part of) the current locale is invalid. This could happen on Arch Linux if you skipped part of the Arch installation process.
  • Fixed New Sonic Arts' Vice plugin freezing when loading the plugin. This happened because the plugin interacted with the GUI and tried to spawn new threads when the host changes the sample rate or block size from the audio thread. These things are now done from the main GUI thread, so please let me know if there are any new loading issues with other VST2 plugins after this update.
  • Fixed the drag-and-drop implementation not sending an XdndStatus message on the very first tick. This fixes drag-and-drop from the Samplab plugin which has a broken drag-and-drop implementation and only starts the operation after the left mouse button has already been released.
  • Fixed the drag-and-drop implementation not properly handling errors caused by the pointer being grabbed. This would only happen with Samplab.
  • Fixed sub 100 millisecond drag-and-drop operations being ignored by certain hosts, like Bitwig Studio. This would only happen with Samplab. The XDND implementation now has a warmup phase to prevent this from happening.

yabridgectl

  • yabridgectl rm and yabridgectl blacklist rm now accept relative paths.

Packaging notes

  • We now target VST3 SDK version 3.7.3 with git tag v3.7.3_build_20-patched.
  • Because of an update to clap, the minimum rustc version required to build yabridgectl is now 1.54.

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, AV Linux MXE 2021, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. If you need a build of yabridge for use with 32-bit plugin hosts, then you can find those on the automated builds page.

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.

3.5.2

08 Aug 13:55
Compare
Choose a tag to compare

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Added support for VST2 plugins sending and receiving SysEx events. Certain MIDI controllers like the Arturia MiniLab Mk II output SysEx events when changing between octaves, and some hosts like REAPER forwards these events directly to the plugin. Before this change this might cause crashes with plugins that try to handle SysEx events, like the D16 Group plugins.

Fixed

  • Fixed a regression from yabridge 3.5.1 where certain VST3 plugins wouldn't resize to their correct size when opening the editor. This affected Kontakt, and it was caused by reverting just a little bit too much code in the regression fix from the previous release.
  • Fixed D16 Group plugins crashing when the host tries to send SysEx events.

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, AV Linux MXE 2021, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. If you need a build of yabridge for use with 32-bit plugin hosts, then you can find those on the automated builds page.

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.

3.5.1

31 Jul 19:37
Compare
Choose a tag to compare

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • You can now directly focus the plugin's editor instead of allowing the host to process keyboard events by holding down the Shift key while entering a plugin's GUI with your mouse. Certain hosts like Bitwig Studio normally still respond to common key presses like Space for play/pause while interacting with a plugin. That in turn can make it impossible to type a space character in those hosts, which may become a problem when searching for or naming presets. With this feature you can temporarily override this behaviour and allow all keyboard input to go directly to Wine. This can also be useful for Voxengo plugins, which don't grab input focus in their settings and license dialogs.

Changed

  • Added more tracing for the input focus handling when using the +editor YABRIDGE_DEBUG_LEVEL flag.
  • Yabridge will now handle X11 events from within the Win32 message loop. What this means is that X11 events are now handled even when the plugin is blocking the GUI thread, which can potentially increase responsiveness and help with graphical issues in certain situations (although at the moment there aren't any known situations where the old approach caused any issues).

Fixed

  • Reverted the workaround for the Nimble Kick plugin freezing added in yabridge 3.5.0. This could cause VST3 plugins in Bitwig Studio and Ardour to have frozen, nonfunctional editors when using multiple instances of a plugin unless you opened every plugin instance's editor. Since the plugin would also cause the native Windows version of Bitwig to crash, we will thus simply revert this change.
  • Fixed a regression from yabridge 3.5.0 where clicking inside of a plugin GUI while the window is already open in the background would not give keyboard focus to the plugin.
  • Changed how input focus releasing works by more selectively filtering out mouse pointer leave events where the pointer is still hovering over a Wine window instead of ignoring an entire wider class of events. This should fix some edge cases where input focus would not be given back to the host, or where dropdown menus could close immediately when hovering over and them leaving them with your mouse. The first case would in practice only happen when using a touchscreen or drawing tablet, since it would require the mouse to instantly move from the plugin GUI to another window without first going over the window's borders.
  • Similarly, the filter in yabridge 3.5.0's Wine->X11 drag-and-drop implementation for distinguishing between Wine windows and other windows (so that we won't interfere with Wine's own internal drag-and-drop mechanism) has also been made more specific. Before this change we might use our own XDND-based drag-and-drop implementation when dragging files from a plugin to a standalone Wine application running within the same Wine prefix.

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, AV Linux MXE 2021, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. If you need a build of yabridge for use with 32-bit plugin hosts, then you can find those on the automated builds page.

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.

3.5.0

23 Jul 14:45
Compare
Choose a tag to compare

This is mostly a bug fix update. I was going to do a quick 3.4.1 patch with a couple of fixes for regressions people had reported for yabridge 3.4.0, but then I got reports that with certain setups (I wasn't able to replicate it), Ardour might resize plugin editor windows to an incorrect size when using Ardour 6.8 in combination with an older version of XFCE. So I decided to take this opportunity to rewrite the editor embedding implementation to make sure that hosts that somehow ignore the editor size reported by the plugin can never guess the wrong size by themselves. And we also need to get to yabridge 3.11 for Workgroups somehow, right? This change should fix rare editor size issues with Ardour, a similar issue with Carla 2.3.1 (older and newer versions aren't affected), and also fixes another Ardour issue where resizing a VST3 editor past its original size might leave behind gray borders. I haven't been able to find any regressions during my testing in any of the VST2 and VST3 hosts listed in the readme, but please let me know if you do run into any new issues after these changes!

The other changes are mostly bug fixes and small quality of life improvements, like extra debugging options for GUI related issues, and additional warnings in case the system is configured in a way that might cause yabridge to crash.

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Added a warning on startup if yabridge may not be able to lock enough shared memory for its audio processing. If you have not yet set up realtime priviliges and memory locking limits for your user, then yabridge may not be able to map enough shared memory for processing audio with plugins that have a lot of inputs or outputs channels.
  • When this shared memory mapping fails because of a low value being set for RLIMIT_MEMLOCK, yabridge will now print a more specific error message telling you about the issue and how to fix it.
  • Added a an optional +editor flag to the YABRIDGE_DEBUG_LEVEL environment variable that causes debug tracing information about the plugin editor window to be printed. This can be useful for diagnosing DAW or window manager specific issues.

Changed

  • The way editor embedding works has been rewritten. Yabridge now inserts a wrapper window between the host's parent window and the embedded Wine window instead of embedding the Wine window directly into the host. This should get rid of all rare edge cases where the host would ignore the window size reported by the plugin and would instead try to detect the plugin's size on its own by intercepting configuration events sent to the Wine window. This could cause the editor window to grow to fit the entire screen in certain hosts under very specific circumstances.
  • We now support version 3 and 4 of the XDND specification for the Wine->X11 drag-and-drop support. Before this yabridge assumed every application supported version 5 from 2002, but JUCE based hosts only support XDND version 3.

Fixed

  • Fixed crashes or freezes when a plugin uses the Windows drag-and-drop system to transfer arbitrary, vendor specific data. This prevents Reaktor from freezing when editing a patch after upgrading to yabridge 3.4.0.
  • Fixed yabridge thinking that the Wine plugin host process has died when the user doesn't have permissions to access the Wine process's memory. This fixes a seemingly very rare regression from yabridge 3.4.0 where the Wine plugin host application would immediately be seen as dead when using AppArmor, preventing yabridge from starting.
  • Fixed a regression from yabridge 3.4.0 where plugins with zero input and output audio channels like FrozenPlain Obelisk would result in a crash.
  • Fixed a regression from yabridge 3.4.0 where JUCE-based VST3 plugins might cause Ardour or Mixbus to freeze in very specific circumstances.
  • As mentioned above, it's now no longer possible for hosts to wrongly detect the editor window size. This fixes a rare issue with Ardour on older XFCE versions where the editor window would extend to cover the entire screen. A similar issue also exists with Carla 2.3.1.
  • This same change also fixes VST3 editors in Ardour not rendering past their original size when resizing them from the plugin (as opposed to resizing the actual window).
  • Worked around a REAPER bug that would cause REAPER to not process any keyboard input when the FX window is active but the mouse cursor is positioned outside of the window. We now use the same validation used in xprop and xwininfo to find the host's window instead of always taking the topmost window.
  • Fixed Wine->X11 drag-and-drop in Tracktion Waveform. Waveform only supports an old 1998 version of the XDND specification, so it was ignoring our messages since we assumed every application would support the most recent XDND version from 2002.
  • Worked around a race condition in Nimble Kick, which would trigger a stack overflow when loading the plugin if it wasn't already activated.
  • Potentially fixed an obscure issue where the editor would not render at all when using multiple displays and the rightmost display was set as the primary display. This issue appears to be very rare, and I haven't gotten any response back when I asked the people affected by this to test a potential fix, so I'm just including it in yabridge anyways in case it helps. If anyone was affected by this, please let me know if this update makes any difference!

yabridgectl

  • yabridgectl status now also lists the paths to the yabridge-host.exe and yabridge-host-32.exe binaries that yabridge will end up running. This can be helpful for diagnosing issues with complex setups.

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, AV Linux MXE 2021, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. If you need a build of yabridge for use with 32-bit plugin hosts, then you can find those on the automated builds page.

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.

3.4.0

15 Jul 14:14
Compare
Choose a tag to compare

I'm very excited to finally be able to share this new yabridge release with all of you! In terms of changes this has been the largest update since yabridge 3.0.0. Usability improvements were the main focus of this update, but this release also includes another round of optimizations to reduce yabridge's DSP load overhead even further. The most important change there is that the audio processing implementation has been completely rewritten to use a hybrid approach of a shared memory audio buffer combined with yabridge's usual socket-based message passing. This reduces the amount of additional work needed to process a buffer of audio significantly while still maintaining all of the benefits of yabridge's flexible communication design.

On the usability front, the main standout feature here is support for drag-and-drop from a Windows plugin running under yabridge to a native application, such as your DAW. This is the first time that this has been possible under Wine, and it should make using plugins that can generate audio or MIDI much more enjoyable. Another improvement worth mentioning is that yabridge will now actively prevent plugins from hiding the mouse cursor in incorrect ways. This prevents the cursor from permanently disappearing at random when using JUCE based plugins without breaking any functionality where the mouse cursor is supposed to be hidden, like when dragging knobs.

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Added support for drag-and-drop from Windows plugins running under yabridge to native applications, such as your DAW. This makes it much more convenient to use plugins like Scaler 2 that generate audio or MIDI files. Because of the way this is implemented this feature will work with any Wine version.
  • When a plugin fails to load or when the Wine plugin host process fails to start, yabridge will now show you the error in a desktop notification instead of only printing it to the logger. This will make it much faster to quickly diagnose issues if you weren't already running your DAW from a terminal. These notifications require libnotify and its notify-send application to be installed.
  • Similarly, yabridge will show you a warning and a desktop notification with a reminder to rerun yabridgctl sync when it detects that there's been a version mismatch between the plugin and the used Wine plugin host application.
  • Added support for building 32-bit versions of the yabridge libraries, allowing you to use both 32-bit and 64-bit Windows VST2 and VST3 plugins under 32-bit Linux plugin hosts. This should not be needed in any normal situation since Desktop Linux has been 64-bit only for a while now, but it could be useful in some very specific situations. Building on an actual 32-bit system will also work, in which case the 64-bit Wine plugin host applications simply won't be built.
  • Added the deprecated pre-VST2.4 main entry point for VST2 plugins. This allows the above mentioned 32-bit version of yabridge to be used in EnergyXT, allowing you to use both 32-bit and 64-bit Windows VST2 plugins there.
  • Added an environment variable to disable the watchdog timer. This is only needed when running the Wine process under a separate namespace. If you don't know that you need this, then you probably don't need this!

Changed

  • The audio processing implementation for both VST2 and VST3 plugins has been completely rewritten to use both shared memory and message passing to cut down the number of expensive memory copies to a minimum. This reduces the DSP load overhead of audio processing even further.
  • Respect $XDG_DATA_HOME as a fallback when looking for yabridge's plugin host binaries instead of hardcoding this to ~/.local/share/yabridge. This matches the existing behaviour in yabridgectl.
  • Optimized the management of VST3 plugin instances to reduce the overhead when using many instances of a single VST3 plugin.
  • Slightly optimized the function call dispatch for VST2 plugins.
  • Prevented some more potential unnecessary memory operations during yabridge's communication. The underlying serialization library was recreating some objects even when this wasn't needed, which could result in unnecessary memory allocations under certain circumstances. This is related to the similar issue that was fixed in yabridge 3.3.0. A fix for this issue has also been upstreamed to the library.

Fixed

  • Fixed mouse cursors disappearing when interacting with some plugin GUIs. This often happened with JUCE based plugins, such as Sonic Academy's Kick 2 and Anaglyph. While this is technically a workaround for a bad interaction between JUCE and Wine, it should make these plugins much more pleasant to use.
  • Fixed Waves VST3 plugins not being able to initialize correctly. These plugins would at runtime change their query interface to support more VST3 interfaces, including the mandatory edit controller interface. Yabridge now requeries the supported interfaces at a later stage to work around this.
  • Fixed VST2 plugins in Ardour not receiving all transport information, breaking host sync and LFOs in certain plugins. This was a regression from yabridge 3.2.0.
  • Fixed input focus handling being broken REAPER after reopning a closed FX window. Now moving the mouse cursor outside of the plugin's GUI will always release input focus, even after closing the window.
  • Fixed Insert Piz Here's midiLooper crashing in REAPER when the plugin tries to use REAPER's host function API. This currently isn't supported by yabridge. We now explicitly ignore these requests.
  • Worked around a rare thread safety issue in MeldaProduction VST3 plugins where the plugin would deadlock when the host asks for the editor's size while plugin is also being initialized form the audio thread at the same time.
  • Fixed JUCE VST3 plugins like Tokyo Dawn Records' SlickEQ M causing the host to freeze when they send a parameter change from the audio thread using the wrong VST3 API while the plugin is also trying to resize the window from the GUI thread at the same time. This would happen in SlickEQ M when reopning the Smart Ops panel after having used it once. To fix this, yabridge's Wine-side VST3 mutual recursion mechanism now only operates when invoked from the GUI thread.
  • Fixed yabridge's logging seeking the STDERR stream to position 0 every time it writes a log message. This would be noticeable when piping the host's STDERR stream to a file and YABRIDGE_DEBUG_LEVEL wasn't set.
  • When printing the Wine version during initialization, the Wine process used for this is now run under the same environment that the Wine plugin host process will be run under. This means that if you use a custom WINELOADER script to use different Wine versions depending on the prefix, the wine version: line in the initialization message will now always match the version of Wine the plugin is going to be run under.
  • Fixed the plugin-side watchdog timer that allows a yabridge plugin to terminate when the Wine plugin host application fails to start treating zombie processes as still running, active processes. This could cause plugins to hang during scanning if the Wine process crashed in a very specific and likely impossible way.
  • If a VST3 plugin returns a null pointer from IEditController::createView(), then this will now be propagated correctly on the plugin side.
  • Fixed VST2 speaker arrangement configurations returned by the plugin not being serialized correctly. Very few plugins and hosts seem to actually use these, so it should not have caused any issues.

yabridgectl

  • Added support for setting up merged VST3 bundles when using a 32-bit version of libyabridge-vst3.so.
  • Fixed the post-installation setup checks when the default Wine prefix over at ~/.wine was created with WINEARCH=win32 set. This would otherwise result in an 00cc:err:process:exec_process error when running yabridgectl sync because yabridgectl would try to run the 64-bit yabridge-host.exe in that prefix. Yabridgectl now detects the architecture of the default prefix first and then runs the proper Wine plugin host application for that prefix.
  • Copies of libyabridge-vst2.so and libyabridge-vst3.so are now reflinked when supported by the file system. This speeds up the file coyping process while also reducing the amount of disk space used for yabridge when using Btrfs or XFS.
  • If pruning causes a directory to be empty, then the empty directory will now also be removed. This avoids having your plugin directories littered with empty directories.
  • Fixed incorrect new and total plugin counts. These counts are now always correct, even when using multiple versions of the same VST3 plugin or when multiple plugin directories overlap because of the use of symlinks.
  • Aside from pruning only unmanaged VST3 bundles in ~/.vst3/yabridge, yabridge will now also prompt you to prune leftover files from within a managed VST3 bundle. This makes it easy to switch from the 64-bit version of a plugin to the 32-bit version, or from a 64-bit version of yabridge to the 32-bit version. I don't know why you would want to do either of those things, but now you can!
  • Yabridgectl now prints a more descriptive error message instead of panicing if running $WINELOADER --version during yabridgectl's post-setup verification checks does not result in any output. This is only relevant when using a custom WINELOADER script that modifies Wine's output.

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, AV Linux MXE 2021, or any ...

Read more

3.3.1

09 Jun 14:42
Compare
Choose a tag to compare

If you need any help setting up yabridge or if you just want to keep up to date with new releases and important Wine related announcements, then feel free to join the Discord.

Added

  • Added thread names to all worker threads created by yabridge. This makes it easier to debug and profile yabridge.

Fixed

  • Fixed the IPlugView::canResize() cache added in yabridge 3.2.0 sometimes not being initialized properly, preventing host-driven resizes in certain situations. This was mostly noticeable in Ardour.
  • Fixed mouse clicks in VST2 editors in Tracktion Waveform being offset vertically by a small amount because of the way Waveform embeds VST2 editors.
  • Fixed Shattered Glass Audio plugins crashing when opening the plugin editor because those plugins don't initialize Microsoft COM before trying to use it. We now always initialize the Microsoft COM library unconditionally, instead of doing it only when a plugin fails to initialize without it.
  • Fixed incorrect version strings being reported by yabridge when building from a tarball that has been extracted inside of an unrelated git repository. This could happen when building the yabridge AUR package with certain AUR helpers.
  • Fixed the log message for the cached IPlugView::canResize() VST3 function calls implemented in yabridge 3.2.0.

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, AV Linux MXE 2021, 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.