Skip to content

Plug in launch checklist

p0nce edited this page Aug 1, 2024 · 28 revisions

Pre-launch list

There are many things to do before releasing a brand new plug-in. Here is an example list to help being organized.

UX

  • Have you used your own plug-in extensively?
  • Has your plug-in useful presets? (See Adding Presets)
  • Have you tuned parameters range?
  • Are the non-trivial points explained somewhere? (manual, tutorials, videos...)

Visuals

  • Is the feedback helpful or distracting?
  • Have you checked on various screens and different lighting conditions?

QA

  • Did you test your plug-in in a real song?
  • Did you send the plug-in to QAs?
  • Would the plug-in be useful to you? To the QAs?
  • Did you implement a tailSizeInSeconds override yet? Don't leave the default one!
    Caution, as it is very easy to grossly underestimate this value.
  • Have you checked reported latency with the latency-check tool?
  • Does your plug-in work in a sampling-rate as low as 11050 Hz? This is important for auvaltool validation.
  • If you were using live-reload, have you disable Wren live-reload (with filesystem path) for release?
  • (for an effect plug-in) Does your plugin support 1-1 or 1-2? Else Logic users may have trouble finding it to instantiate.
  • (for a new plug-in) Are you using all the newest futureXXX Options? This will help maintenance later. (See Options)
  • Typical failure point: Not working in macOS 10.12 to 10.14
  • Typical failure point: Crashing when augmenting buffer size from 64 to higher.
  • Typical failure point: Not launching on Linux
  • Typical failure point: Not launching on Rosetta
  • Typical failure point: Not launching on arm64
  • Typical failure point: Not launching on Windows 32-bit (if needed)

Performance

  • Have you profiled and optimized your plug-in DSP?
  • Have you profiled and optimized your plug-in UI?
  • Does your plug-in detect silence to speed up things in DSP? (Warning: this is usually very hard to implement correctly)
  • Have you tuned maxFramesInProcess() return value? (512 is often a good start)
    It changes CPU usage, and memory usage. You can use process or bench to find your favourite value. In VST3, allows to modulate parameters faster.
  • Are you sure that no PBR widget is updated on its PBR layer at 60 FPS?
    • you can use Raw widgets for fast animation instead (consider dplug:canvas)
    • or widgets that renders to both Raw and PBR layers, but only update the Raw layers with setDirty(UILayer.rawOnly)

PR

  • Have you written a KVR PR?
  • Have you written a newsletter entry?
  • Have you written a blog entry?
  • Have you made a launch video?
  • Have you made sound examples?

Legal

  • Have you reproduced copyright notices that must be redistributed in a binary redistribution? (those can go in the user manual or licence)
  • (VST2) Do you have the Steinberg Agreement to release VST2?
  • (VST3) Do you have the Steinberg Agreement to release VST3?
  • (AAX) Do you have the Avid and PACE authorizaton to release AAX?
  • Do you have a CommonMark licence file for inclusion as "licensePath"?
    • Note that dplug-build allows the following macros in license files: $VENDORNAME, $PLUGINNAME, $PUBLICVERSION, $CURRENTYEAR.