You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Roadmap] den effects library — v1.0 → v3.0 master plan
Related: #<parent-issue-number> ([Epic] Foundation for den). This roadmap is created after the foundation epic merges. Individual effects are filed as separate issues via .github/ISSUE_TEMPLATE/add-effect.yml and checked off below.
Purpose
This is the curated master list of effects den commits to implementing — ~58 user-facing classes across 5 phases (v1.0 → v3.0). Each effect lists its target version, reference source (from LICENSE-THIRDPARTY allow-list), key parameters, and implementation notes. New effects are added only via a separate chore(roadmap): propose <effect> issue and maintainer approval.
The goal is parity with the serious-producer workflow: after v2.0, a user can construct a complete mix bus and master chain inside the browser using only @denaudio/effects — comparable in capability (not necessarily flavor) to the FabFilter Pro bundle + iZotope Ozone/Neutron core modules.
Reference: short-name key from LICENSE-THIRDPARTY Tier A/B
Params: top-level AudioParam list
Notes: non-obvious implementation constraints
v1.0 — MVP (~20 user-facing classes across 16 modules): a complete bus chain without leaving the browser
Counting note: We count by TS class (user-facing exports). Modules can ship multiple classes (e.g., high_pass.rs exports HighPass12 + HighPass24 from the same biquad-cascade kernel). Gain ships in Sub D's foundation epic and is not a v1.0 work item.
Goal: after v1.0, a user can route source → HPF → EQ → Comp → Limiter → out with pro-grade fidelity.
Utility
Gain — Gain / gain.rs / utility / ref: rbj+textbook
Notes: 1-pole HPF at ~5 Hz, y[n] = x[n] − x[n−1] + 0.995·y[n−1]. Should be applied implicitly at input of every effect chain; we expose it explicitly too.
Notes: feed-forward, RMS detection (sqrt of 1-pole smoothed square), soft-knee via quadratic interpolation around threshold. No look-ahead in v1.0. sidechain_hp_hz is an INTERNAL high-pass on the detector's RMS signal (not an external sidechain input channel) — the detector ignores energy below this frequency, useful for ducking only mid/high-frequency content. External sidechain (separate input channel) is a v2.0 follow-up.
Notes: PSOLA (Pitch-Synchronous Overlap-Add) is deterministic and avoids phase-vocoder window artifacts. Best for monophonic sources (vocals, leads, single-instrument tracks); polyphonic content will exhibit smearing. Document this caveat in the catalog page.
Notes: partitioned block convolution (uniform partition for v2, non-uniform later). User supplies IR via loadIR(audioBuffer) method (decoded by user via ctx.decodeAudioData). No default IRs bundled with this effect — bundling commercial/copyrighted IRs would breach licensing. Companion package @denaudio/ir-library (v3.0) ships a curated set of CC0/public-domain IRs separately.
ConvolutionIrLibrary — not an effect per se; companion package @denaudio/ir-library with curated CC0 IR files + loader helper.
Requires monorepo addition: this package is NOT in Sub A's initial layout (packages/core, worklet, effects, test-utils, examples). Adding it requires a separate chore(scaffold): add @denaudio/ir-library package issue before this checkbox can land.
Tracking
Counts are TS user-facing classes, not Rust modules (some modules export multiple classes; some classes share a module).
Total at v3.0: ~58 user-facing classes. Dates are aspirational, not contractual. Each checkbox above links to its own implementation issue (filed via the Add-Effect template) as work begins.
How to contribute
Pick an unchecked effect from the list.
Open a new issue using .github/ISSUE_TEMPLATE/add-effect.yml with the effect name/ref from this roadmap.
Follow CONTRIBUTING.md §3.
Upon merge, check the box here.
How to propose a NEW effect (not on the list)
Open an issue titled chore(roadmap): propose <EffectName> with:
Category (from the 9 listed)
Target version (v1.x / v2.x / v3.x)
Reference source (must already be in Tier A/B of LICENSE-THIRDPARTY, or propose its addition first)
Justification (why does this belong in den?)
Maintainer approves → the effect is added here → an Add-Effect issue is filed to implement it.
What we will NOT build (explicit rejects)
Sequencers / MIDI processing — den is effects, not composition.
Synthesizers — arguably overlap, but v1.0–v3.0 are strictly effects. A sibling library @denaudio/synth might exist in the future; out of scope here.
Generic delay lines, buffers, utility signal-flow primitives for users to build their own effects — those belong in @denaudio/core or a future @denaudio/graph. The user-facing library is "effects, ready to use."
Anything GPL-encumbered — see LICENSE-THIRDPARTY.
This roadmap lives at ROADMAP.md in the repo; changes go through PR.
[Roadmap]
deneffects library — v1.0 → v3.0 master planPurpose
This is the curated master list of effects
dencommits to implementing — ~58 user-facing classes across 5 phases (v1.0 → v3.0). Each effect lists its target version, reference source (fromLICENSE-THIRDPARTYallow-list), key parameters, and implementation notes. New effects are added only via a separatechore(roadmap): propose <effect>issue and maintainer approval.The goal is parity with the serious-producer workflow: after v2.0, a user can construct a complete mix bus and master chain inside the browser using only
@denaudio/effects— comparable in capability (not necessarily flavor) to the FabFilter Pro bundle + iZotope Ozone/Neutron core modules.How to read this document
Each effect has:
crates/den-core/src/effects/<snake>.rs)filter | dynamics | saturation | modulation | delay | reverb | pitch | spatial | utility | analysisLICENSE-THIRDPARTYTier A/Bv1.0 — MVP (~20 user-facing classes across 16 modules): a complete bus chain without leaving the browser
Goal: after v1.0, a user can route source → HPF → EQ → Comp → Limiter → out with pro-grade fidelity.
Utility
Gain/gain.rs/ utility / ref:rbj+textbookgain(linear, 0..10, a-rate)PolarityInvert/polarity_invert.rs/ utility / ref:textbookactive(0/1, k-rate)StereoWidth/stereo_width.rs/ spatial / ref:dafxch.6 (Mid/Side)width(0..2, a-rate)Mono/mono.rs/ utility / ref:textbookout = (L+R)/2duplicated. Useful as a bus check.DcFilter/dc_filter.rs/ filter / ref:jos(DC blocker)Filter
HighPass12,HighPass24/high_pass.rs/ filter / ref:rbjfrequency(20..20000 Hz, a-rate, exp),q(0.1..10, a-rate)rbjfrequency,qBandPass/band_pass.rs/ filter / ref:rbjfrequency,qNotch/notch.rs/ filter / ref:rbjfrequency,qLowShelf,HighShelf/shelving.rs/ filter / ref:rbjfrequency,gain_db(-24..+24, a-rate),slope(0.1..2)PeakingEq/peaking_eq.rs/ filter / ref:rbjfrequency,q,gain_dbDynamics
Compressor/compressor.rs/ dynamics / ref:dafxch.4,airwindows/Pressure5threshold_db,ratio,attack_ms,release_ms,knee_db,makeup_db,sidechain_hp_hzsidechain_hp_hzis an INTERNAL high-pass on the detector's RMS signal (not an external sidechain input channel) — the detector ignores energy below this frequency, useful for ducking only mid/high-frequency content. External sidechain (separate input channel) is a v2.0 follow-up.Limiter/limiter.rs/ dynamics / ref:dafxch.4ceiling_db,release_msGate/gate.rs/ dynamics / ref:dafxch.4threshold_db,attack_ms,release_ms,hold_ms,hysteresis_dbSaturation
SoftClip/soft_clip.rs/ saturation / ref:dafxch.4 (tanh waveshaper),airwindows/Louddrive(1..10, a-rate),mix(0..1, a-rate)BitCrusher/bit_crusher.rs/ saturation / ref:dafxch.4bits(1..16, k-rate),sample_rate_reduction(1..64, k-rate)Modulation / Delay
Tremolo/tremolo.rs/ modulation / ref:dafxch.5rate_hz,depth,shape(sine/triangle/square, k-rate enum)DigitalDelay/digital_delay.rs/ delay / ref:dafxch.2time_ms(0..2000),feedback(0..0.98),mix(0..1)mix=0⇒ bypass fast-path.v1.1 — Mix essentials (+10 effects): polished mix chain
ParametricEq8/parametric_eq.rs/ filter / ref:rbj,fundsp/Pro-Q-likeExpander/expander.rs/ dynamics / ref:dafxch.4DeEsser/de_esser.rs/ dynamics / ref:dafxch.4MultibandCompressor3/multiband_compressor.rs/ dynamics / ref:fundsp,dafxHardClip/hard_clip.rs/ saturation / ref:textbookTapeSaturation/tape_saturation.rs/ saturation / ref:airwindows/IronOxide5,dafxch.7TubeSaturation/tube_saturation.rs/ saturation / ref:airwindows/Focus,dafxch.7PingPongDelay/ping_pong_delay.rs/ delay / ref:dafxch.2time_ms(0..2000, k-rate),feedback(0..0.95, a-rate),width(0..1, k-rate; 0=mono delay, 1=full ping-pong),mix(0..1, a-rate)TransientShaper/transient_shaper.rs/ dynamics / ref:airwindows/Slew2attack,sustain(each -24..+24 dB)AutoPan/auto_pan.rs/ modulation / ref:dafxch.5rate_hz,depth,shapev1.2 — Modulation & reverb (+10 effects): space and motion
Chorus/chorus.rs/ modulation / ref:dafxch.5,fundsprate_hz,depth_ms,mix,voices(1..4, k-rate)Flanger/flanger.rs/ modulation / ref:dafxch.5rate_hz,depth_ms,feedback,mixPhaser/phaser.rs/ modulation / ref:dafxch.5,airwindowsrate_hz,depth,stages(4/6/8/12, k-rate enum),feedback,mixVibrato/vibrato.rs/ modulation / ref:dafxch.5RingMod/ring_mod.rs/ modulation / ref:dafxch.5frequency(5..5000 Hz, a-rate),mixPlateReverb/plate_reverb.rs/ reverb / ref:jos/physical,fundspHallReverb/hall_reverb.rs/ reverb / ref:jos/physical(FDN),fundspRoomReverb/room_reverb.rs/ reverb / ref:jos/physical,fundspTapeDelay/tape_delay.rs/ delay / ref:airwindows/TapeDelayDuckingDelay/ducking_delay.rs/ delay / ref:dafxv2.0 — Pitch, advanced mastering (+10 effects)
PitchShifter/pitch_shifter.rs/ pitch / ref:dafxch.8 (PSOLA)shift_semitones(-12..+12, a-rate),mix(0..1, a-rate),formant_preserve(0/1, k-rate)FormantShifter/formant_shifter.rs/ pitch / ref:dafxch.8Harmonizer/harmonizer.rs/ pitch / ref:dafxch.8SpringReverb/spring_reverb.rs/ reverb / ref:jos/physical,airwindowsShimmerReverb/shimmer_reverb.rs/ reverb / ref:jos/physicalConvolutionReverb/convolution_reverb.rs/ reverb / ref:dafxch.9mix(0..1, a-rate),predelay_ms(0..200, k-rate),gain_db(-24..+12, a-rate)loadIR(audioBuffer)method (decoded by user viactx.decodeAudioData). No default IRs bundled with this effect — bundling commercial/copyrighted IRs would breach licensing. Companion package@denaudio/ir-library(v3.0) ships a curated set of CC0/public-domain IRs separately.DynamicEq/dynamic_eq.rs/ filter / ref:dafxch.4 + ch.3LinearPhaseEq/linear_phase_eq.rs/ filter / ref:jos/filters,dafxch.3Exciter/exciter.rs/ saturation / ref:dafxch.7HaasWidener/haas_widener.rs/ spatial / ref:dafxch.6v3.0 — Mastering-grade + analysis (+8 effects)
TruePeakLimiter/true_peak_limiter.rs/ dynamics / ref:dafxch.4,josLoudnessMeter/loudness_meter.rs/ analysis / ref: ITU BS.1770SpectrumAnalyzer/spectrum_analyzer.rs/ analysis / ref:jos/saspStereoImager/stereo_imager.rs/ spatial / ref:dafxch.6MultibandSaturator/multiband_saturator.rs/ saturation / ref:dafxch.7WaveFolder/wave_folder.rs/ saturation / ref:dafxch.7BinauralPan/binaural_pan.rs/ spatial / ref:kemar(MIT Media Lab HRTF dataset, free for commercial/non-commercial use)azimuth_deg(-180..+180, a-rate),elevation_deg(-40..+90, a-rate),mix(0..1, a-rate)vendor-licenses/KEMAR/. Attribution required: "KEMAR HRTF measurements © MIT Media Lab".@denaudio/ir-librarywith curated CC0 IR files + loader helper.packages/core, worklet, effects, test-utils, examples). Adding it requires a separatechore(scaffold): add @denaudio/ir-library packageissue before this checkbox can land.Tracking
Counts are TS user-facing classes, not Rust modules (some modules export multiple classes; some classes share a module).
Total at v3.0: ~58 user-facing classes. Dates are aspirational, not contractual. Each checkbox above links to its own implementation issue (filed via the Add-Effect template) as work begins.
How to contribute
.github/ISSUE_TEMPLATE/add-effect.ymlwith the effect name/ref from this roadmap.How to propose a NEW effect (not on the list)
Open an issue titled
chore(roadmap): propose <EffectName>with:LICENSE-THIRDPARTY, or propose its addition first)den?)Maintainer approves → the effect is added here → an Add-Effect issue is filed to implement it.
What we will NOT build (explicit rejects)
denis effects, not composition.@denaudio/synthmight exist in the future; out of scope here.@denaudio/coreor a future@denaudio/graph. The user-facing library is "effects, ready to use."LICENSE-THIRDPARTY.This roadmap lives at
ROADMAP.mdin the repo; changes go through PR.