Skip to content

Release notes

p0nce edited this page Feb 6, 2024 · 199 revisions

Release notes

  • Dplug v14.2 (5th Dec 2023) Supported LDC >= 1.28 and <= 1.36

    • NEW The macOS Compatibility Advice page has been introduced. This is a summing up of the various constraints for optimal customer coverage.
    • NEW dplug-build can use a different compiler for x86_64 builds with the --compiler-x86_64 flag.
      That allows mixed compilers in Universal Builds.
  • Dplug v14.1 (21th Nov 2023) Supported LDC >= 1.28 and <= 1.34

    • NEW Option futurePBREmissive has been introduced. This allows better graphics in PBR. See Options for details.
    • NEW Support for the FL Studio plug-in format (aka FLP).
      • Currently a x86_64-only, Windows-only format.
      • NSIS installer can install and uninstall a plug-in inside FLStudio install directory.
      • See Distort and Clip It examples for how to use the FLP format.
        In short:
        1. Add "dplug:flp" in your "dependencies" in dub.json
        2. Add a new configuration whose name begin with "FLP" with the version identifier "FLP"
        3. Update your dplug-build to the latest, use dplug-build -c <confname> to build a FLP bundle.
      • Some read: FLP Implementation Notes.
    • NEW canvas.fillRule(FillRule.evenOdd); and canvas.fillRule(FillRule.nonZero); (default).
    • NEW canvas.globalCompositeOperation = CompositeOperation.{sourceOver|add|subtract|lighter|lighten|darken};.
      Default blend mode is sourceOver, also the fastest and only option available before. Other blend modes won't skip holes in paths.
  • Dplug v14.0 (1st Nov 2023) Supported LDC >= 1.28 and <= 1.34 1.28 strongly recommended to avoid Issue #801

    • NEW Updated notarization method to use notarytool.
    • NEW Option futureVST3MIDICC has been introduced. This allows proper support of MIDI CC, Channel Pressure and Pitch Bend messages in VST3. See Options for details.
    • NEW Option futureBinState has been introduced. It allows saving arbitrary state in sessions, with a lot of caveats. See Options for details.
    • NEW Vec!T allocation scheme smarter, more like std::vector. New methods .capacity and .shrinkToFit for Vec!T.
    • BREAKING dplug:host API had to change to be nothrow @nogc like the rest of Dplug. See this commit for details.
      Only dplug:host users are affected.
    • BREAKING Parsing or emitting bytes with dplug.core.binrange is now done with error codes rather than throwing exceptions. Dplug is now free of exceptions (except in tools/). Ancient signatures will fail to compile, but won't silently fail.
    • BREAKING All deprecated things removed, such as:
      • Rare dplug.graphics.draw functions have been removed.
      • dplug.dsp.smooth has been removed.
      • Runtime Sections has been removed, it never really worked anyway.
      • dplug.core.stackallocator has been removed, it wasn't used anywhere.

Tools aside, the main Dplug libraries are now devoid of exceptions (no more throw mallocNew!Exception), and are now fully nothrow @nogc. In the light of portability, please try to not throw exceptions yourself.


  • Dplug v13.8 (23th Oct 2023) Supported LDC >= 1.28 and <= 1.34 1.28 strongly recommended to avoid Issue #801

    • NEW notarytool-based notarization that replaces the legacy deprecated notarization with altool. The old notarization method is still available with a new dplug-build --legacy-notarization flag, but this method will be deprecated on 1st Nov 2023 by Apple. Please update your dplug-build to use the newer method.
  • Dplug v13.7 (21th June 2023) Supported LDC >= 1.28 and <= 1.34

    • NEW UIImageKnob now supports another format for textured PBR knobs. The legacy format continues to exist for now, but the newer one should allow easier authoring and more efficient draw, for nicer knobs. See imageknob.d for details.
  • Dplug v13.6 (26th May 2023) Supported LDC >= 1.28 and <= 1.32

    • NEW dplug-build now supports both dub.json and dub.sdl recipe files for your plug-in projects.
  • Dplug v13.5 (30th Mar 2023) Supported LDC >= 1.28 and <= 1.31

    • NEW Support for programmatic .QB voxel export of the PBR buffers and final render. This allows to get a 3D model of your PBR plug-in, out of the 2D G-buffers. See the distort example for usage example. Programmatic PNG screenshot also possible.
  • Dplug v13.4 (6th Jan 2023) Supported LDC >= 1.28 and <= 1.31

    • NEW Support for LDC 1.31. With the new DUB it embeds, you cannot build plugins DLL just with dub on Windows anymore. For this use case, use a newer dplug-build which will set the right DFLAGS. You also need to remove "$schema" and "comment" from dub.json.

    • NEW Support for QOIX file format. dplug:graphics is now relying on gamut package. Only used for file loading, for now.

    • NEW Ability for widgets to signal they should not be drawn in parallel with other widgets. Allows them to invoke the graphics threadpool in onDrawRaw/onDrawPBR, see commit for details. For example, the PBR backgrounds are now resized in parallel.

    • The graphics threadpool now has 3 threads maximum, instead of 2 maximum. This improves visual latency at the cost of total CPU usage.

    • NEW dplug-build can build and package plugins from any directory now with the new --root flag.
      You don't need to be in the same directory anymore!

      Example: $ dplug-build --root /my/path/to/product builds the plug-in in /my/path/to/product.

      However, you will need to update your paths passed to the linker in dub.json as you'll see:
      ld: can't open -exported_symbols_list file: source/module-vst2.lst
      In that case, replace that path by: "$PACKAGE_DIR/source/module-vst2.lst" in your dub.json.
      Those pathes exist for symbol stripping (important for binary size). See examples in doubt.

  • Dplug v13.3 (14th Dec 2022)

    • NEW Fixed Z Order API: The setZOrder() call is being replaced by the equivalent .zOrder property.

      myUIElement.zOrder = 9; // Equivalent to myUIElement.setZOrder(9); both syntax available for now
      • .zOrder is now available from Wren.
      • setDirtyWhole is called, if the Z order of a widget changes.

      Reminder: Z order defines priority for being drawn on top, receiving mouse clicks, etc. . The higher, the higher the priority.
      (Warning: This priority is only parent-local for mouse. Also Raw widget are always on top of PBR widgets regardless of Z.)
      All UIElement start their life with a zOrder of value 0.
      When Z order is left unspecified, widgets are drawn in addChild order.

  • Dplug v13.2 (12th Dec 2022)

    • NEW Dplug now support infinite plugin tail sizes, and float.infinity is the new default return value for tailSizeInSeconds().
      It is the only correct value for synths, and effects that can generate sound. The previous default of 2 seconds was a trap.
      As said in the Plug-in Launch Checklist, it is highly advised to choose a deliberate value for your tailSizeInSecond() override.
  • Dplug v13.1 (6th Dec 2022)

    • NEW Dplug can now profile its UI performance and output a JSON in Trace Event Format. The implementation uses thread-locals for less synchronization. Follow this tutorial to know how to use Dplug_ProfileUI.
  • Dplug v13.0 (24th Oct 2022) Supported LDC >= 1.28 and <= 1.30, recommended to go v13.0.4+ directly

    • NEW macOS Ventura support. Plug-ins made with Dplug v12 will, for the time being, work on Ventura, but this received one additional "future-proof" fix with AU validation.

    • NEW AAX Universal Binary 2 support. You can now produce AAX UB2 with a x86_64 dplug-build and EDEN SDK 5.6+.

      • BREAKING It is unclear if this M1-compatible EDEN works in earlier Protools or Rosetta Protools.
      • If Protools has scanning problems, remove the AAX from /Library/Application\ Support/Avid/Audio/Plug-Ins and reinstall it.
    • BREAKING UIElement.onMouseClick returns a Click enum instead of a bool.

      /// Result of `onMouseClick`, was the mouse click handled?
      enum Click
      {
          handled,   /// click handled, no drag.
          startDrag, /// click handled AND it start new drag. (previously: true)
          unhandled  /// click not handeld, pass it around.   (previously: false)
      }

      To keep the exact same behaviour:

      • replace return true; by return Click.startDrag; in your own widgets onMouseOver callback.
      • replace return false; by return Click.unhandled; in your own widgets onMouseOver callback.
      • Do not use Click.handled when just porting to v13, this may break existing widget logic since onStartDrag/onStopDrag won't be called.
        Prefer safe mechanical translation with Click.startDrag and Click.unhandled only, for now.
    • NEW and BREAKING IParameterListener has changed to be able to display parameter hints without clicking.

      override void onBeginParameterHover(Parameter sender){}   // This parameter is newly hovered by mouse (mouseOver).
      override void onEndParameterHover(Parameter sender){}     // This parameter stopped being hovered by mouse (mouseOver).

      This breaks ALL widgets implementing IParameterListener directly.

      Additionally, widgets that want to tell a parameter can be modified MAY implement this with balanced calls to:

      Parameter.beginParamHover()
      Parameter.endParamHover()

      This is similar to beginParamEdit/endParamEdit but for parameter hovering.
      Typically the best place for this is onMouseEnter/onMouseExit, such as:

      override void onMouseEnter()
      {
          _param.beginParamHover();
      }
      override void onMouseExit()
      {
          _param.endParamHover();
      }

      But you can do it later, depending on your hover display needs. (Using the futureMouseDrag option is recommended in this case, to avoid the "mouseover" element changing while dragging.)

      However if you do not plan to ever use onBeginParameterHover/onEndParameterHover for displaying parameters values in your plug-in, this stuff is not useful.

    • BREAKING Option futureVST2Chunks is now default. Use legacyVST2Chunks version identifier to revert to the old behaviour. Please read Options for details. This breaks user sessions, BE CAREFUL.

    • BREAKING Option futureZOrder is now default. Use legacyZOrder version identifier to revert to the old behaviour. Please read Options for details.

    • BREAKING No more need to build a FFT if your plugin doesn't use one. Everything related to FFT is now in dplug:fft.

      • dplug:dsp doesn't depend upon dplug:fft anymore, but dplug:fft now depends upon dplug:dsp.
      • minimumPhaseImpulse and tempBufferSizeForMinPhase moved to dplug:fft, since it uses a FFT to do so.
      • fft.d moved to dplug:fft
      • FIR!T.makeMinimumPhase() has been removed
    • BREAKING Option legacyMouseOver removed. Read Options for details.

    • BREAKING Option legacyBlinnPhong removed. Read Options for details.

    • Name BuiltinComplex!T is deprecated, import std.complex and use name Complex!T, which is the same.

    • Parameter dragging is likely to be smoother thanks to the #718 fix.

    • A bit sharper and faster image resizing, with "Magic Kernel Sharp 2013 86%" kernel instead of Lanczos3. This improves the quality of resized things, especially PBR and at 0.5x size.


  • Dplug v12.8 (4th Oct 2022)

    • NEW Support for codesigning "in the cloud" on Windows, including choosing the timestamp server URL. New plugin.json keys:
      • "developerIdentity-windows" selects a certificate from its name, overrides "keyFile-windows". (only when cloud signing)
      • "certThumbprint-windows" selects certificate from its footprint, overrides "keyFile-windows". (only for AAX when cloud signing)
      • "timestampServerURL-windows" uses a given RFC3161 timestamp server URL. (recommended)
    • Better behaviour of onMouseWheel on macOS: only ever send -1 or 1 as wheel offset, which fares better in an app.
  • Dplug v12.7 (27th May 2022)

    • NEW Read support for the QOI image format. This can be helpful when large transparent PNG are too expensive.
  • Dplug v12.5 (14th Apr 2022)

    • NEW Fixed visibility API, replacing the now-deprecated setVisible call:
    myUIElement.visibility = true; // Make UI sub-tree visible, including dirty rects
    myUIElement.visibility = false; // Make UI sub-tree hidden, including dirty rects

    Now the element is properly redrawn, making it the preferred way to have multiples pages in a plug-in UI.
    All UIElement start their life with a visibility flag set to true.
    Visibility is inherited from parent widget: if a parent is hidden, then the whole UI sub-tree is hidden.
    An invisible widget can't get clicked, hovered, or mouse-wheeled.

  • Dplug v12.4 (8th Feb 2022)

    • NEW MIDI output support (WIP, it works except Audio Unit).
  • Dplug v12.3 (6th Jan 2022)

    • NEW Add a limited form of Wren scripting support. Read Making a Scriptable UI for details. Use v12.8+ for Wren arm64 support.
    • NEW wav-compare can output a spectrogram of an audio difference.
    • double support for the FFT and FFTAnalyzer.
  • Dplug v12.0 (10th Jul 2021) Supported LDC >= 1.24 / Recommended LDC = 1.28

    • BREAKING if you are upgrading to a LDC >= 1.27, you need to change your dub.json plugin files (in order to keep a static D runtime for Windows builds). The line:

      "dflags-windows-ldc": ["-mscrtlib=libcmt"],
      

      needs to be become:

      "dflags-windows-ldc": ["-mscrtlib=libcmt","-fvisibility=hidden", "-link-defaultlib-shared=false"],
      
    • BREAKING Starting with DMDFE 2.097 builtin complex numbers are deprecated in D.
      Dplug now uses std.complex instead. In practice this produces no change in performance nor precision. You must replace your usage of cfloat and cdouble by Complex!float and Complex!double.

    • The dplug:fft package is now replacing the pfft package.

    • BREAKING dplug.graphics.font.fillText is not a template anymore. Now only works with ImageRef!RGBA and a const(char)[].

    • BREAKING Removal of dplug.core.cpuid.d. It wasn't used anywhere, normally you aren't affected. Use package mir-cpuid if you really need that.

    • Lower memory usage, faster PNG and JPEG loading. For a PBR plug-in, backgrounds are now decoded on the fly at each resize.

    • Ability to use a 10-bit PNG as depth in PBBackgroundGUI.

    • Better-looking and faster normals extraction from depth.

    • Anti-aliased specular highlights in PBR.

    • BREAKING pace.json has disappeared in favor of plugin.json.
      This avoid duplication of 3 codesigning keys in both pace.json and plugin.json, when building AAX.
      As plugin.json is included in the plugin binary, it is of the utmost importance you use "!PROMPT" or an envvar for password fields.
      See the AAX Guide for more details.

    • Support for Windows LV2 (32-bit and 64-bit).

    • Lots of resizing fixes (eg: bad size in macOS, bad size in REAPER and Cubase, glitches).

    • BREAKING Option legacyPBRNormals has been removed. You can't have ugly normals anymore. Read Options for details.


  • Dplug v11.0 (12th Mar 2021) Recommended Dplug == 11.0.18. Supported LDC >= 1.24 and <= 1.26

    • NEW Support for plugin resizing. There is a full guide in the Wiki: Making a Resizeable UI.

    • BREAKING gfm:math has been moved to a new subpackage dplug:math. The new package provides only vectors, matrices, and boxes (rectangles). This will help reduce build time and maintenance load, as gfm:math can be abandoned now. You should replace import gfm.math.xxxx; by import dplug.math.xxxx;.

    • BREAKING all "VST" names are now replaced by "VST2" names. This renaming concern everything related to VST 2.4 in Dplug: subpackage name, module identifiers, configurations... To upgrade your plugins:

      1. replace your dependencies upon dplug:vst into dplug:vst2 in your dub.json.
      2. VST 2.4 configurations in your dub.json must now start with a VST2 prefix instead of just a VST prefix.
      3. For convention, module-vst.lst was renamed to module-vst2.lst. Same for module-vst.ver renamed in module-vst2.ver. These file names must be renamed both in your project tree, and in dub.json.
      4. Update your dub.json according to the Dplug VST2 guide for Dplug v11.
      5. Build a newer dplug-build based upon Dplug v11.
    • BREAKING The semantics of UIElement.reflow() method and UIElement.position setter have changed.

      • changing the position with the UIElement.position setter now invalidates graphics buffers and call reflow() to compute children placement.
      • the new goal of the reflow() method is to only position children. It can use the position getter for that.

      Example:

       // What this line does:
       // 1. Update _widget._position field
       // 2. Call `_widget.setDirtyWhole()` on new and former _position
       // 3. Call `_widget.reflow()` to recompute `_widget`'s children position.
       _widget.position = rectangle(20, 20, 60, 60);

      Using the position setter is the preferred method of moving an object. Do not use _position directly.

    • dplug:cocoa and dplug:carbon merged into a new dplug:macos sub-package. Normally you don't have anything to do, as this is an internal Dplug dependency.


  • Dplug v10.0 (27th Oct 2020) Compilers below LDC 1.24 are now unsupported. Recommended Dplug >= 10.0.5.
    • NEW Now supporting macOS Big Sur, and Apple Silicon architecture (arm64).

      1. Use LDC 1.24 (See LDC 1.24 release and installation instructions).
      2. Rebuild the latest dplug-build using a regular $ dub command (dplug-build will stay an x86_64 executable).
      3. Use dplug-build with -a all on a macOS setup that can build for the arm64 architecture (Xcode 12). LV2 and AAX are not supported with the arm64 target. dplug-build will produde Universal Binaries for VST2/VST3/AU, with both arm64 andamd64 binaries.

      Note: Universal Binaries can be loaded by both arm64 and x86_64 hosts, so they are necessary for proper Apple Silicon support.

    • BREAKING macOS 10.11 is now unsupported. The minimum supported macOS version is now 10.12.

    • BREAKING Option futureMouseCursor is now default. Use legacyMouseCursor for previous behaviour. Please read Options for upgrade instructions.

    • BREAKING Option futureAUHighResolutionParameters is now default. Use legacyAUHighResolutionParameters for previous behaviour. Please read Options for upgrade instructions. ATTENTION unless you produce a new, incompatible version of your plug-in you MUST use legacyAUHighResolutionParameters to avoid breaking Logic user sessions.

    • BREAKING Option futurePBRNormals is now default. Use legacyPBRNormals for previous behaviour. Please read Options for upgrade instructions.

    • BREAKING Option futureBlinnPhong is now default. Use legacyBlinnPhong for previous behaviour. Please read Options for upgrade instructions.


  • Dplug v9.3 (20th Sep 2020) Compilers below LDC 1.17 are now unsupported.

    • NEW Now supporting Raspberry Pi as a target.

      1. Checkout the Dplug repository on Raspberry Pi OS. (>= v9.3.1)
      2. Install ldc and dub with sudo apt install ldc and sudo apt install dub.
      3. Build dplug-build with $ dub and add it to your PATH.
      4. Checkout a plug-in and update its dub.json in the following way:
        "dflags-linux-ldc": ["-link-defaultlib-shared=false", "-fvisibility=hidden"],
        becomes:
        "dflags-linux-ldc": ["-link-defaultlib-shared=false"],
        "dflags-linux-x86_64-ldc": ["-fvisibility=hidden"],
      5. Build an ARM32 binary with $ dplug-build -c LV2 or $ dplug-build -c VST
    • Note that intel-intrinsics semantics are emulated for ARM32 and ARM64, at a slight performance cost. Until this issue is resolved, plug-ins operate on ARM at a performance penalty.

  • Dplug v9.2 (28th Apr 2020) Recommended version is >= v9.2.5 when using the Canvas

    • NEW A wild sub-package appears! dplug:canvas provides easy software rendering with a HTML5 Canvas-like API.

      Modern audio plug-ins are feedback-heavy. Until now providing real-time graphs in the Raw layer was difficult and manual. dplug:canvas makes it much easier and faster, in order to have more audio feedback built into the UI.

  • Dplug v9.1 (1st Dec 2019) Recommended version is >= v9.1.8

    • NEW The default Compositor can now be replaced by a custom one, see 5 Tips for Customizing Your Dplug Plug-In UI Style.
    • Faster PBRCompositor performance (-26% CPU usage and less thread launching), first UI opening is 10% quicker
    • Fixed Linux compatibility a version above or equal to v9.1.0 is recommended.
  • Dplug v9.0 (25 Aug 2019): Recommended compiler is LDC 1.17.0

    • NEW Support for macOS 10.15 Catalina, and notarization. See the Notarization Guide for guidelines.

      • dplug-build now support the --notarize switch. You must use --notarize --installer to have macOS 10.15+ compatibility. Naked plug-in builds don't get notarized.
    • BREAKING Plug-ins for Linux are now linked with a static Phobos and DRuntime. See the distort or clipit example and check your dub.json against theirs. This should allow safer redistribution.

    • BREAKING Dplug doesn't support 32-bit builds and Universal Binaries on macOS anymore. Because support is removed since Xcode 10 anyway.

      => Hint: module-au.lst has changed, update it with the one in examples/distort or examples/clipit.

    • BREAKING LDC must be properly configured now on Windows, see Getting Started. This allow to use the linker of your choosing with LDC.

      => We recommend setting a Windows envvar LDC_VSDIR to "non-existing-path".

    • BREAKING Option futureMouseOver is now default. Use legacyMouseOver for previous behaviour. Please read Options for upgrade instructions.

    • Older names for getting parameter values like readFloatParamValue() were deprecated . Use getParam!float instead. Be careful because readParam!EnumType() must be given an enum and gives back that enum type, whereas readEnumParamValue() would return an integer. Same semantics otherwise.

    • BREAKING In your dub.json, replace

          "lflags-windows-ldc": [
              "libcmt.lib",
              "/nodefaultlib:msvcrt.lib",
              "/nodefaultlib:vcruntime.lib"
          ],

      by

         "dflags-windows-ldc": ["-mscrtlib=libcmt"],

      It does the same thing and will let you use all linkers coming with LDC, instead of only Microsoft's link.exe.


  • Dplug v8.4 (28th May 2019)

    • dplug-build --installer support for Windows. See PR #361 for details on how to use it.
  • Dplug v8.3 (12th Mar 2019)

    • LV2 plug-in format support. See any of the examples to see how to use it.
    • dplug-build now accepts configurations starting with "LV2".
    • plug-in entry points can be simplified using mixin(pluginEntryPoints!MyPluginClient); instead of version(VST) blocks.
  • Dplug v8.2 (16th Dec 2018)

    • VST3 plug-in format support. See the distort and clipit example for how to use it.
    • dplug-build now accepts configurations starting with "VST3".

    Please note that you must sign a VST3 Agreement with Steinberg in order to redistribute VST3 plug-ins made with Dplug. Whether Dplug is GPLv3-compatible is unknown.

  • Dplug v8.0 (7th Oct 2018)

    • Changes to dplug-build:

      • New flag --final as a shortcut to --force --combined --build release-nobounds
      • (macOS) intermediate builds are hidden in builds/temp
      • Any --compiler value accepted, like DUB does
      • BREAKING no more support for single lib LDC on Windows. Use the multi-lib LDC (both 32-bit and 64-bit in the same package).
      • BREAKING licensePath in plugin.json must now point to a Markdown .md file or a HTML .html file.
      • (macOS) Ability to build a Mac installer .pkgpackage with the new --installer flag: dplug-build -c VST-FULL -c AU-FULL --installer --final will build an optimized, signed installer for Mac. You need both an Apple Developer ID "Installer" certificate, and an Apple Developer ID "Application" certificate for this.
      • If no configuration is selected, the first one in dub.json is selected (previously: all).
      • Error when specifying a configuration that doesn't exist/with no match.
    • New rendering architecture: Raw and PBR layers, the Raw layer is drawn on top of a cached PBR layer. Practically this change means about 2x less CPU usage from GUI, for everyone.

      Conceptually the updates flow this way: UIElement.onDrawPBR => mipmapping => ICompositor => UIElement.onDrawRaw => channel swap

    • BREAKING if you have custom widgets:

      • UIElement.onDraw is now replaced by onDrawPBR and onDrawRaw depending on which layer you want to draw. Note: that if the PBR layer changes, both onDrawPBR and onDrawRaw will be called since the Raw layer is always on top of the PBR Layer.
      • UIElement now has UIFlags in its constructor to say whether a widget can be animated and where it renders.
    • BREAKING if you previously used 0-physical AND pbr-widgets with manual caching:

      • setDirty now exists in two versions: setDirty(UILayer.guessFromFlags)(default) or setDirty(UILayer.onlyRaw). The latter only exists for PBR widgets that render to both layers, and need a fast render path to the composited RGBA buffer. Most of the time you can still keep using setDirty()
      • removal of the now-useless Physical channel. You can have fast behaviour using setDirty(UILayer.onlyRaw) or using widgets without flagPBR
    • BREAKING if you used color correction from PBRCompositor:

      • Color correction is now a regular UIElement operating on the Raw layer (see examples/distort to implement) Any kind of post-processing effect can be implemented likewise, provided it works on RGBA8 pixels.
    • BREAKING if you used UIBufferedElement

      • UIBufferedElement has been split in UIBufferedElementRaw and UIBufferedElementPBR depending on which layer you want to bufferize. These widgets allows you to simplify redraw logic and avoid the dirtyRects rule.
    • Note that widgets in dplug:flat-widgets and dplug:pbr-widgets have been updated.

    • Less thread launching for graphics, no PBR or Mipmap thread is launched at all if there is nothing to do. Many other graphics optimizations: #270


  • Dplug v7.0 (5th Jul 2018)

    • Starting with v7.1.y, the D runtime can be enabled back in so-called "runtime sections" (see tests/using-runtime, dangerous feature). Still buggy on Linux.

    • BREAKING Dropping compatibility of old compilers. New requirements: LDC >= 1.8 and DMD >= 2.078

    • BREAKING VST2 plugin building now depends on the VST SDK being present on the system. Point a VST2_SDK environment variable to the corresponding VST2_SDK directory in the VST SDK. This requirement trickles down to building dplug:host and related tools.

      Example: export VST2_SDK=/Users/MyName/vstsdk3610_11_06_2018_build_37/VST_SDK/VST2_SDK

    In order to distribute VST2 plug-ins, you MUST sign an agreement with Steinberg.

    • BREAKING Removed deprecated modules dplug.core.alignedbuffer, dplug.pbrwidgets.panel, dplug.dsp.envelope and all symbols marked deprecated in v6. This shouldn't break anything if your plug-in was building without warning in v6.

  • Dplug v6.0 (5th Dec 2017)
    • AAX Native support for Windows and macOS, 32-bit and 64-bit.
    • plugin.json needs an additional category key. See the accepted values in dplug.client.daw. The key CFBundleIdentifierPrefix is now mandatory.
    • plugin.json now has a JSON Schema. Use eg. VSCode to have auto-completion on it.
    • Minimum required Mac OS X version is now 10.8 or later.
    • Minimum required LDC version is now 1.2 or later.
    • The release tool has been renamed to dplug-build. For the architecture switch (-a), it now only accepts -a x86 and -a x86_64 to match what DUB does. -a x32, -a x64 and -a x86-64 are now disallowed options.
    • Much improved Linux stability, with many fixes to x11window.d.
    • New: list of compatible hosts in the Wiki.

  • Dplug v5.0 (22th Aug 2017)

    • Linux VST support (64-bit) with X11 windowing.
    • No more need for module.def (need LDC >= 1.1 on Windows).
    • plugin.json now optionally parsed at compile-time (recommended).
    • PBR widgets seggregated in the new dplug:pbr-widgets subpackage.

    Known bugs: no MIDI input in Cubase and Bitwig, X11 window backend rarely works. Using v6 recommended.


  • Dplug v4.0 (2nd Nov 2016)
    • macOS Sierra support fixed (also works in macOS High Sierra).
    • To allow that, the D runtime is now linked with but disabled. No GC, no TLS, no global ctor/dtor.

  • Dplug v3.0 (9th May 2016):
    • Audio Unit compatibility added, with both Cocoa and Carbon UI. What is still missing from AU: Audio Component API, sandboxing, v3. In other words it's on parity with IPlug but not JUCE.
    • The release tool is now much more friendly to use.
    • Special keys in dub.json are now expected in a plugin.json file next to dub.json. In the future it will be the place of autority for information about a plugin, for now this has to be duplicated in buildPluginInfo() override. An empty plugin.json is OK, defaults are in place. This file is consumed by the release tool.
    • The Wiki became a place to visit.

  • Dplug v2.0 (6th January 2016)
    • release tool now expects a VST or AU configuration, see the distort example for details
    • special dub.json key CFBundleIdentifier became CFBundleIdentifierPrefix, see how distort works to update your plugins dub.json
    • 10.6 compatibility dropped.

  • Dplug v1.0 (26th May 2015)
    • initial release, VST support for 32-bit and 64-bit, Windows and Mac