npm / wavesurfer.js
wavesurfer.js
What changed in wavesurfer.js 8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-28.
3 new APIs and options2 performance3 behavior and defaults10 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initwavesurfer.js 818 changes
New APIs and options 3
Regions can opt out of label stacking with avoidOverlapping.
The Spectrogram plugin adds setOptions to change options without re-creating the plugin.
Adds the Praat-style dynamic compression option to Spectrogram.
Performance 2
Region visibility is checked in one pass per scroll, zoom or resize.
Timeline notches are measured in a single layout pass instead of one pass per notch.
Behavior and default changes 3
The renderer views the audio under each canvas instead of copying it.
A top timeline gets its own space above the waveform.
Reverts the default mediaRecorderTimeslice value to undefined.
Fixes and other changes 10
Auto-center smoothing stays up with the cursor when updates are slower than 60 a second.
An explicit noverlap value of 0 is honored as no overlap.
Labels of regions scrolled into view are stacked in one pass.
One consistent scroll event is emitted per scroll.
Windowed segments are recomputed once zoomed more than 2…
Digital silence is judged before pre-emphasis when calculating autoGain.
The continuous waveform is aligned with elapsed time.
Drawing and dragging remain stable when zoomed.
Fetching falls back to arrayBuffer() when response.blob() fails.
The waveform continuously auto-scrolls while the playhead is dragged near the container edge.