Capabilities Reference #
A categorized inventory of what Pulp can do today. Each capability lists its current status, the module that provides it, and pointers to relevant documentation and examples.
Status vocabulary: stable | usable | experimental | partial | planned | unsupported
Plugin Formats #
Pulp wraps a single Processor subclass and exposes it through multiple plugin format adapters.
| Capability | Status | Module | Docs | Examples |
|---|---|---|---|---|
| VST3 effect | usable | format | getting-started | pulp-gain, pulp-effect, pulp-compressor |
| VST3 instrument | usable | format | PulpSynth, PulpDrums | |
| Audio Unit v2 effect | usable | format | getting-started | pulp-gain, pulp-effect |
| Audio Unit v2 instrument | usable | format | PulpSynth | |
| CLAP effect | usable | format | pulp-gain, pulp-effect | |
| CLAP instrument | usable | format | PulpSynth | |
| Standalone app | usable | format | pulp-gain | |
| Headless host | usable | format | testing | |
| AU v3 (macOS + iOS) | usable | format | ||
| LV2 (Linux) | experimental | format | ||
| WAM v2 (Web) | experimental | format | web-plugins | |
| WebCLAP (Web) | experimental | format | ||
| AAX native (optional, macOS/Windows) | experimental | format | aax | pulp-gain |
Key headers: pulp/format/processor.hpp, pulp/format/vst3_adapter.hpp, pulp/format/clap_adapter.hpp, pulp/format/headless.hpp
AAX support is intentionally opt-in. It requires a developer-supplied AAX SDK, is not bundled by Pulp, and is unsupported on Linux and Ubuntu.
Platforms #
| Capability | Status | Module | Notes |
|---|---|---|---|
| macOS (ARM64) | usable | platform | Primary development platform |
| Windows | experimental | platform | WASAPI, Win32 MIDI, NSIS installer, CI |
| Linux | experimental | platform | ALSA, JACK, LV2, .deb packaging, CI |
| iOS | experimental | platform | AVAudioSession, AUv3, UIKit, Metal |
| Web / WASM | experimental | platform | WAMv2, WebCLAP, Emscripten pipeline |
Key headers: pulp/platform/detect.hpp, pulp/platform/native_handle.hpp
Audio I/O #
| Capability | Status | Module | Docs |
|---|---|---|---|
| BufferView (non-owning channel pointer wrapper) | usable | audio | modules |
| Audio device enumeration and streaming (CoreAudio) | usable | audio | |
| Audio file read/write | usable | audio | |
| WASAPI device I/O | experimental | audio | |
| ALSA device I/O | experimental | audio | |
| AVAudioSession (iOS) | experimental | audio |
Key headers: pulp/audio/buffer.hpp, pulp/audio/device.hpp, pulp/audio/audio_file.hpp
MIDI I/O #
| Capability | Status | Module | Docs |
|---|---|---|---|
| MidiEvent / MidiBuffer | usable | midi | modules |
| MIDI device I/O (CoreMIDI) | usable | midi | |
| MIDI file read/write | usable | midi | |
| Win32 MIDI | experimental | midi | |
| ALSA Raw MIDI | experimental | midi |
Key headers: pulp/midi/message.hpp, pulp/midi/buffer.hpp, pulp/midi/device.hpp, pulp/midi/midi_file.hpp
DSP / Signal Processing #
All signal processors live in the signal module. Each is a standalone, stateless-friendly C++ class.
| Capability | Status | Module | Examples |
|---|---|---|---|
| Gain | usable | signal | pulp-gain |
| ADSR envelope | usable | signal | PulpSynth |
| Biquad filter | usable | signal | pulp-effect |
| State-variable filter (SVF) | usable | signal | |
| Ladder filter | usable | signal | PulpSynth |
| Linkwitz-Riley crossover | usable | signal | |
| Oscillator | usable | signal | pulp-tone, PulpSynth |
| Delay line | usable | signal | pulp-effect |
| Chorus | usable | signal | |
| Phaser | usable | signal | |
| Compressor | usable | signal | pulp-compressor |
| Noise gate | usable | signal | |
| Reverb | usable | signal | pulp-effect |
| Waveshaper | usable | signal | |
| Panner | usable | signal | |
| Oversampling | usable | signal | |
| FFT | usable | signal | |
| Windowing functions | usable | signal | |
| SmoothedValue | usable | signal |
Key headers: all under pulp/signal/ -- e.g., pulp/signal/compressor.hpp, pulp/signal/oscillator.hpp
DSP DSLs #
| Capability | Status | Module | Docs | Examples |
|---|---|---|---|---|
| FAUST offline codegen via external compiler + checked-in generated C++ | experimental | dsl | faust guide, pulp-dsl contract | faust-gain, faust-filter, faust-tremolo |
| Cmajor external-toolchain support lane | experimental | dsl | cmajor guide, pulp-dsl contract | cmajor-gain (source-only) |
| JSFX bounded subset support lane | experimental | dsl | jsfx guide, pulp-dsl contract | jsfx-gain, jsfx-tremolo, jsfx-delay (source-only) |
Key headers: pulp/dsl/dsl_processor.hpp, pulp/dsl/faust_processor.hpp
State and Automation #
| Capability | Status | Module | Docs | Examples |
|---|---|---|---|---|
| ParamValue (lock-free atomic float) | stable | state | modules | all |
| ParamInfo (metadata, range, units) | stable | state | all | |
| ParamRange (normalize / denormalize) | stable | state | ||
| StateStore (centralized parameter registry) | stable | state | all | |
| Parameter groups | stable | state | ||
| Binding (reactive UI-parameter link) | stable | state | ||
| Gesture begin/end (host undo grouping) | stable | state | ||
| State serialization / deserialization | stable | state | ||
| CLAP modulation offset | stable | state | ||
| Change listeners | stable | state |
Key headers: pulp/state/parameter.hpp, pulp/state/store.hpp, pulp/state/binding.hpp
View / UI #
Core #
| Capability | Status | Module | Docs |
|---|---|---|---|
| View hierarchy (tree, bounds, hit-testing) | usable | view | modules |
| Flex layout (full CSS Flexbox L1) | usable | view | web-compat |
| Grid layout (CSS Grid L1 — templates, fr, gaps) | usable | view | |
| Theme system (color/dimension tokens, inheritance) | usable | view | design-tokens |
| JS scripting (QuickJS default, V8 and JavaScriptCore available) | usable | view | js-bridge |
| Hot reload | partial | view | Scripted UI live reload is runtime-validated in the standalone macOS lane. Plugin targets can load UI_SCRIPT, but live reload is not yet guaranteed across hosts/platforms. |
| Screenshot capture (headless PNG) | usable | view | |
| Component inspector | usable | view | |
| Animation (FrameClock, ValueAnimation, motion tokens) | usable | view | animation |
| Design export (JSON, SVG) | usable | view | |
| App framework (commands, menus, key bindings) | usable | view | |
Interactive AI design tool (pulp design) |
experimental | view | cli |
Design debug harness (pulp design-debug) |
experimental | view | cli |
Widgets #
| Capability | Status | Module | Notes |
|---|---|---|---|
| Knob, Fader, Toggle, Checkbox, ToggleButton | usable | view | Full interaction + accessibility roles |
| Label (multi-line, text-transform, decoration) | usable | view | |
| TextEditor (selection, clipboard, undo, IME) | usable | view | |
| ComboBox (dropdown, keyboard nav) | usable | view | |
| ListBox (virtualized, scroll, keyboard) | usable | view | |
| ScrollView (smooth scroll, fade bars) | usable | view | |
| Meter (RMS + peak hold), ProgressBar | usable | view | |
| XYPad, WaveformView, SpectrumView | usable | view | |
| ImageView | usable | view | Placeholder rendering |
| TreeView, Tooltip, Panel, Icon | usable | view | |
| CanvasWidget (25 draw commands) | usable | view | custom-rendering |
Web-Compat Layer #
| Capability | Status | Module | Docs |
|---|---|---|---|
| document.createElement / appendChild / remove | usable | view | web-compat |
| element.style (81 CSS properties) | usable | view | web-compat |
| CSS calc() / min() / max() / clamp() | usable | view | |
| CSS unit resolution (em, rem, %, vw, vh) | usable | view | |
| CSS colors (L4: hex, rgb, hsl, 148 named) | usable | view | |
| StyleSheet (class rules, pseudo-classes) | usable | view | |
| Selectors (:nth-child, :not, descendant, child) | usable | view | |
| closest / matches / innerHTML | usable | view | |
| matchMedia (responsive breakpoints) | usable | view | |
| Pointer events (W3C Level 2) | usable | view | js-bridge |
| Gesture events (scale, rotation) | partial | view | macOS trackpad gestures shipped; iOS multi-touch gesture analysis is still incomplete |
Platform Maturity #
| Capability | Status | Platform | Notes |
|---|---|---|---|
| Cursor management (7 styles) | usable | macOS | NSCursor in mouseMoved |
| Tab focus traversal | usable | all | Tab/Shift+Tab cycles focusable views |
| VoiceOver accessibility | usable | macOS | NSAccessibilityElement + AccessRole |
| IME composition (marked text) | usable | macOS | Full NSTextInputClient |
| Right-click context menu | usable | macOS | oncontextmenu + PopupMenu |
| Keyboard shortcuts | usable | all | registerShortcut bridge |
| File dialogs (open, save, folder) | usable | macOS | NSOpenPanel/NSSavePanel |
| Drag and drop | usable | macOS | File + text drop targets |
| Plugin view hosting | usable | macOS | NSView + Metal |
| SDL window host | usable | all | Cross-platform windowing |
Key headers: pulp/view/view.hpp, pulp/view/widgets.hpp, pulp/view/theme.hpp, pulp/view/script_engine.hpp, pulp/view/widget_bridge.hpp
Rendering / GPU #
| Capability | Status | Module | Docs |
|---|---|---|---|
| Dawn/Metal GPU surface | experimental | render | modules |
| Skia Graphite rendering | experimental | render | |
| Dawn/Metal iOS surface | experimental | render | |
| Dawn/D3D12 surface (Windows) | experimental | render | Surface creation implemented, not runtime-validated |
| Dawn/Vulkan surface (Linux) | experimental | render | Surface creation implemented, not runtime-validated |
| CoreGraphics fallback | usable | render | Default render path on macOS |
Key headers: pulp/render/gpu_surface.hpp, pulp/render/skia_surface.hpp
Canvas / 2D Drawing #
| Capability | Status | Module | Docs |
|---|---|---|---|
| Canvas abstraction (paths, fills, strokes, text) | usable | canvas | modules |
| RecordingCanvas (command capture for testing) | usable | canvas | |
| CoreGraphics backend | usable | canvas | |
| Skia backend | experimental | canvas | |
| SVG rendering | experimental | canvas | |
| Effects (shadow, blur, gradients) | usable | canvas |
Key headers: pulp/canvas/canvas.hpp, pulp/canvas/cg_canvas.hpp, pulp/canvas/skia_canvas.hpp, pulp/canvas/svg.hpp, pulp/canvas/effects.hpp
Runtime Primitives #
| Capability | Status | Module | Docs |
|---|---|---|---|
| SeqLock (coherent multi-field reads) | stable | runtime | architecture |
| TripleBuffer (latest-value publication) | stable | runtime | architecture |
| SPSCQueue (single-producer single-consumer FIFO) | stable | runtime | |
| ScopeGuard | stable | runtime | |
| Logging | stable | runtime | |
| Assertions | stable | runtime |
Key headers: pulp/runtime/seqlock.hpp, pulp/runtime/triple_buffer.hpp, pulp/runtime/spsc_queue.hpp, pulp/runtime/log.hpp
Events #
| Capability | Status | Module | Docs |
|---|---|---|---|
| Event loop | usable | events | modules |
| Timers | usable | events |
Key headers: pulp/events/event_loop.hpp, pulp/events/timer.hpp
Platform Services #
| Capability | Status | Module |
|---|---|---|
| OS detection | usable | platform |
| Clipboard access | usable | platform |
| Native file dialogs | usable | platform |
| Popup menus | usable | platform |
| Native window handle | usable | platform |
Key headers: pulp/platform/detect.hpp, pulp/platform/clipboard.hpp, pulp/platform/file_dialog.hpp, pulp/platform/popup_menu.hpp
OSC (Open Sound Control) #
| Capability | Status | Module | Docs |
|---|---|---|---|
| OSC 1.0 message encode/decode | experimental | osc | modules |
| UDP sender | experimental | osc | |
| UDP receiver | experimental | osc |
Key header: pulp/osc/osc.hpp
Agent / Automation #
| Capability | Status | Docs | Notes |
|---|---|---|---|
Repo-level MCP server (pulp-mcp) |
experimental | Project/repo automation server in tools/mcp/pulp_mcp.cpp; not a per-plugin control surface |
|
| Plugin CLI harness pattern | usable | cli | tools/plugin-cli/plugin_cli.hpp; usable for batch/headless workflows, but not auto-generated for every plugin |
| Per-plugin/app MCP control contract | planned | claim-audit-baseline | Active follow-up work rather than a shipped default capability |
Tooling / CLI #
The pulp CLI wraps common development workflows.
| Capability | Status | Docs |
|---|---|---|
pulp build (configure + build) |
usable | cli |
pulp test (run test suite) |
usable | cli |
pulp validate (pluginval, clap-validator, auval, optional AAX validator) |
usable | cli |
pulp status (show project info, build state, source counts) |
usable | cli |
pulp clean (remove build directory) |
usable | cli |
pulp ship sign |
usable | cli |
pulp ship package |
usable | cli |
pulp ship check |
usable | cli |
pulp docs (local docs lookup) |
usable | cli |
pulp create (new project from template) |
usable | cli |
pulp run (launch standalone binary) |
usable | cli |
pulp upgrade (self-update) |
usable | cli |
pulp doctor (check system dependencies) |
usable | cli |
pulp inspect (component inspector) |
usable | cli |
pulp audit (dependency license check) |
usable | cli |
pulp add (add dependency) |
usable | cli |
pulp cache (build cache management) |
usable | cli |
pulp design (interactive AI design tool) |
experimental | cli |
pulp design-debug (design debug harness) |
experimental | cli |
pulp import-design (import from external design tools) |
experimental | cli |
pulp export-tokens (export design tokens) |
experimental | cli |
pulp ci-local (local CI runner — Mac + VM validation) |
experimental | local-ci |
Shipping / Release #
| Capability | Status | Module | Docs |
|---|---|---|---|
| Code signing (macOS) | usable | ship | cli |
| Notarization submit/check/staple | usable | ship | |
| DMG creation | usable | ship | |
| PKG installer creation | usable | ship | |
| Combined multi-format PKG | usable | ship | |
| Entitlements generation | usable | ship | |
| Signing identity listing | usable | ship | |
| Appcast feed generation (Sparkle-compatible) | usable | ship | |
| Appcast XML parsing | usable | ship | |
| Ed25519 update signing | usable | ship | |
| Semantic version comparison | usable | ship | |
| Windows code signing | partial | ship | Stub exists |
| Linux packaging | partial | ship | Stub exists |
Key headers: pulp/ship/codesign.hpp, pulp/ship/appcast.hpp
Processor Interface #
The Processor base class defines what plugin developers implement.
| Capability | Status | Module | Docs | Examples |
|---|---|---|---|---|
| Plugin descriptor (name, category, buses, MIDI flags) | usable | format | getting-started | all |
| Multi-bus I/O (sidechain, aux) | usable | format | pulp-compressor | |
| Effect / Instrument / MidiEffect categories | usable | format | ||
| Transport context (tempo, time sig, position) | usable | format | ||
| Latency reporting | usable | format | ||
| Tail time | usable | format | ||
| Plugin registry (multi-plugin bundles) | usable | format |