Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Validation

What was run, with which tools, and what came out. The results are a snapshot: they say what was true on the date given, not that every later change was checked the same way. Re-run cargo xtask validate <plugin> for your own plugin and version.

macOS (2026-10-24 and 2026-10-25; macOS 26.6, Apple silicon)

CheckResult
cargo test (parameters, queue, state, presets, MIDI learn, ADSR; CLAP interface: pedal, bend, mod wheel, envelope, presets, an old session sample-exact, random playing, no allocation in process; controller: session chunk, presets with JSON and text data, request routing, mark_dirty off the main thread, parameter gestures, web view size in the session; sub-block song position; preset metadata read, written and kept on overwrite, saved through /__apf/preset/save, reported to CLAP indexers; 250 factory and 250 user presets of 6 KB listed under 20 ms)pass
clap-validator 0.4.1 (with the deadlock fix below)38 passed, 0 failed, 6 skipped; the preset-discovery tests pass, also with 250 extra user presets (list presets: 256, with features and descriptions)
apf-host on the built .clap: render and web view round trip (page to host to page); claimed shortcuts reach the page, other keys reach the host with their key-up and modifier changespass
Steinberg VST3 validator (SDK 3.8.0)47 passed, 0 failed
vst3-state-check (demo synth, and a larger modular synth built on APF): seven restore orders, web view closed against openedpass; the demo synth bit-identical to the saved session (largest sample difference 0); the modular synth within 0.22 dB per band, and like its same-timed twins; --inject-stale fails all eight scenarios (2026-10-25)
auval AUv2 (aumu ApDs MiSm)AU VALIDATION SUCCEEDED
auval AUv3 (aumu ApD3 MiSm)AU VALIDATION SUCCEEDED
REAPER 7.62: CLAP, VST3 and AU loaded, rendered offlineall three identical (-14.8 dBFS RMS)
Logic Pro: AUv2 and AUv3 load, the web view shows, edits reach Logicpass (open points in Known issues)
Logic Pro, AUv3: a project saved before new parameters were added loads with its sound; Smart Controls follow the first eight parameters; factory presets in Logic’s menu; mod wheel, bend and pedal reach the pluginpass (2026-10-22)
au-probe: AUv2 and AUv3 list the factory and user presets, selecting one loads it (also from the sandboxed AUv3)pass
Preset bar with 256 presets in apf-host (WKWebView): menu grouped by type, description as tooltip, the arrows step in that order and loadpass
Tuning demo (controller): clap-validator, apf-host (including a 1 MiB POST body, five resizes, apf.resize), VST3 validator, auval v2 and v3pass
xtask --project: a copy of the demo synth in a workspace outside APF, all formats, all validatorspass
Resizing in REAPER 7.62: CLAP, VST3 and AU windows resized to 1280, 900, 300 (below the minimum) and 1100 wide: the page follows and keeps its minimumpass
Resizing in Logic: AUv3 by the page’s grip (Logic gives AUv3 windows no edge); the size is kept when the window is reopenedpass
Audio input on an instrument (CLAP, VST3, AUv2, AUv3) and as aumf: REAPER renders, auvalpass
Effects (examples 02 and 06): cargo xtask validate with a test signal on the input of vst3-state-check and au-state-check (AUv2 build); --inject-stale and a session that is not restored are caughtpass (2026-10-30)

Hot reload (2026-10-30; macOS 26.6.2, Logic Pro 12.4)

CheckResult
Logic Pro 12.4, AUv3, a larger modular synth on APF with its window open, cargo xtask hot --watch running: a panel title changed in the Rust sourcethe watcher built and published in 3.3 s; the open window showed the new title 128 ms later; changed back in 2.4 s and 100 ms; one extension process throughout
apf-host --hot-test (CLAP): a held chord, the web view open, a copy of the build publishedswapped in 0.2 to 0.3 s while blocks kept playing; the moved parameter kept; the web view open again; sound after the swap
A real DSP change while running: the modular synth’s output at half gain (CLAP in apf-host, AUv3 out of process); example 10’s oscillator fixed to a square wave (CLAP)heard across the swap: −4.8 to −11.3 dBFS (CLAP), −5.1 to −11.2 dBFS (AUv3); −32.3 to −28.8 dBFS (example 10)
au-hot-check: the AUv2 in-process and the installed AUv3 out of process, web view openswapped while rendering, the parameter kept, sound after; the AUv3 loads the builds through its sandbox exception
cargo xtask validate --hot, example 10 and the modular synth: every validator above on the shell bundles, plus the three swap checkspass

Not verified for hot reload: VST3 in a host (the shell passes the VST3 validator and the state check; its swap runs the same way as the CLAP’s), REAPER, Windows and Linux.

Not verified on macOS: a controller’s own knobs, wheels and pedal played by hand in Logic; Bitwig (remote controls); mark_dirty lighting Logic’s or REAPER’s “changed” mark by a controller edit (checked only through the CLAP interface); an aumf and an input-taking aumu in Logic; Logic resizing an AUv2 web view by its window edge (see Known issues). The standalone app has an open problem: do not leave it running unattended.

Windows (2026-10-25; Windows 11, x64, 125 % scale, REAPER 7.83)

CheckResult
cargo test --workspacepass
apf-host --gui-test on the CLAP of the demo synth, the tuning demo and a larger modular synth: render, page-host-page round trip with a 1 MiB POST, Ctrl+D and Backspace into the page, an unclaimed Ctrl+S on to the host’s window, apf.maximize, five resizespass
REAPER 7.83: VST3 and CLAP scanned and loaded, offline render, project saved and reloaded (state restored without opening the web view, renders equal to -98 dB), web view opens, resizes, closes; the space bar over the web view plays in REAPERpass
cargo xtask bundle and install from Git Bash, PowerShell and cmdpass
cargo xtask validate on a larger modular synth: clap-validator 0.4.1 (37 passed, 0 failed, 7 skipped), apf-host, Steinberg VST3 validator (47 passed), vst3-state-checkpass

Not verified on Windows: the standalone, other hosts (Cubase, Bitwig, Ableton Live), a second monitor with another scale, ARM64.

Audio input on an instrument, and MIDI-controlled effects

AudioLayout { main_input: 2, main_output: 2, note_input: true } gives a stereo input next to the notes in every format; the output starts as a copy of the input, and the plugin adds its voices to it. Checked on 2026-10-24 with a copy of the demo synth that adds its voices to the input: CLAP and VST3 show two input pins in REAPER, the AUv2 and AUv3 an input bus (auval: 2-2 channels). A 220 Hz tone reaches the output unchanged (gain 1.000) with the chord on top.

With au-type = "aumf" and audio-effect as the first CLAP feature, the same plugin is a MIDI-controlled effect: auval passes it as aumf (v2 and v3), and REAPER loads it as an effect that takes MIDI. How Logic routes audio into an aumu that has an input (its side-chain menu, by Apple’s documentation) and how it lists an aumf is not checked.

The tools

clap-validator is built from source, tag 0.4.1, with one fix. As released it deadlocks on the second preset of a preset container (the factory presets inside a plugin are one), so its preset-discovery tests never finish. The patch is scripts/clap-validator-0.4.1-preset-deadlock.patch:

git clone --branch 0.4.1 https://github.com/free-audio/clap-validator && cd clap-validator
git apply ../apf/scripts/clap-validator-0.4.1-preset-deadlock.patch
cargo install --path . --locked      # the results above used Rust 1.95.0: cargo +1.95.0 install ...

cargo xtask validate stops a validator run after five minutes instead of waiting forever.

The VST3 validator and tools/vst3-state-check are built by cargo xtask validate from the VST3 SDK that the wrapper build downloads. By hand (any OS, CMake 3.25 or newer):

cmake -S tools/vst3-state-check -B build/vst3-state-check -DCMAKE_BUILD_TYPE=Release \
      -DVST3_SDK_ROOT=<target dir>/apf-wrapper/cpm-cache/vst3sdk/<hash>
cmake --build build/vst3-state-check --config Release
build/vst3-state-check/vst3-state-check "dist/release/APF Demo Synth.vst3" [--preset NAME | --preset-program N]

auval is Apple’s Audio Unit validator, part of macOS. apf-host is APF’s own small CLAP host (see Testing without a host).