# wavesurfer.js changelog > Audio waveform visualisation and player built on Web Audio. - Vendor: katspaugh - Category: Frameworks & Libraries - Official site: https://wavesurfer.xyz - Tracked by: What's New (https://whatsnew.fyi/product/wavesurfer-js) - Harvested from: GitHub (katspaugh/wavesurfer.js) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 8.0.0-beta.2 - Date: 2026-07-30 - Version: 8.0.0-beta.2 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/8.0.0-beta.2 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/8.0.0-beta.2 - Labels: Pre-release - **changed** — Refactor plugin API to functional style with scope-owned teardown, porting six plugins to the new system - **changed** — Implement declarative load and viewport handling with per-load Scope, loadPhase/visibleRange signals, pure canvas plan, and FrameScheduler - **changed** — Unify Spectrogram implementation and enforce Scope lint - **fixed** — Fix memory leaks across core and plugins with Scope and signal foundation improvements * 8.0.0-beta.2 * chore: remove internal planning artifacts (docs/ is gitignored) * refactor: Post-refactor cleanup (#4346) * refactor: Spectrogram unification + GC leak harness + Scope lint enforcement (#4344) * docs: add digital ocean referral link * refactor: definePlugin: functional plugin API with scope-owned teardown; six plugins ported (#4342) * Declarative load & viewport: per-load Scope, loadPhase/visibleRange signals, pure canvas plan, FrameScheduler (#4341) * fix: Leak fixes across core and plugins + Scope/signal foundation (#4340) --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/8.0.0-beta.2) ### 7.12.11 - Date: 2026-07-17 - Version: 7.12.11 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.11 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.11 - **fixed** — Avoid closing a closed AudioContext in Decoder - **fixed** — Prune per-region subscriptions from plugin array on remove in regions - **fixed** — Prevent TypeError when Spectrogram plugin is destroyed during active render - **fixed** — Prevent dB-to-color mapping wraparound in Spectrogram high-energy regions - **changed** — Make the main-thread FFT fallback opt-out and re-create failed workers in Spectrogram - **added** — Add Praat-style display pre-emphasis and automatic gain to Spectrogram * 7.12.11 * fix(Decoder): avoid closing a closed AudioContext (#4336) by @mjlbach * fix(regions): prune per-region subscriptions from plugin array on remove (#4339) by @jens-lilt * fix(Spectrogram): prevent TypeError when plugin is destroyed during active render (#4335) by @Copilot * docs: clarify left/right default plotting for stereo audio (#4338) by @Copilot * fix(Spectrogram): prevent dB-to-color mapping wraparound in high-energy regions (#4333) by @Copilot * fix(Spectrogram): make the main-thread FFT fallback opt-out and re-create failed workers (#4331) by @koyukan * feat(Spectrogram): Praat-style display pre-emphasis and automatic gain (#4330) by @koyukan --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.11) ### 7.12.10 - Date: 2026-07-06 - Version: 7.12.10 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.10 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.10 - **added** — Add fftSize option to decouple FFT size from the analysis window in Spectrogram - **fixed** — Reject pending worker promises when the worker errors in Spectrogram - **fixed** — Use the same window alpha defaults in the worker and main thread in Spectrogram * 7.12.10 * feat(Spectrogram): decouple FFT size from the analysis window (fftSize option) (#4329) by @koyukan * fix(Spectrogram): reject pending worker promises when the worker errors (#4328) by @koyukan * fix(Spectrogram): use the same window alpha defaults in the worker and main thread (#4327) by @koyukan --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.10) ### 7.12.9 - Date: 2026-07-06 - Version: 7.12.9 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.9 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.9 - **fixed** — Close ImageBitmap when its canvas is removed before it resolves in Spectrogram - **changed** — Make the web worker FFT timeout configurable in Spectrogram * 7.12.9 * fix(Spectrogram): close ImageBitmap when its canvas is removed before it resolves (#4324) by @koyukan * fix(Spectrogram): make the web worker FFT timeout configurable (#4326) by @koyukan * ci: publish to npm before creating the tag and release --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.9) ### 7.12.8 - Date: 2026-06-12 - Version: 7.12.8 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.8 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.8 - **fixed** — Accept container elements from other realms (iframes) - **fixed** — Prevent multi-touch from permanently blocking drag interactions - **fixed** — Place region labels in the first free row - **fixed** — Stop playback exactly at the requested stop position - **fixed** — Correct typo in blobMimeType handling - **fixed** — Keep the hover line hidden after pointer leave - **fixed** — Comprehensive bug fixes and memory leak fixes from holistic audit - **changed** — Update devDependencies to latest compatible versions * 7.12.8 * fix: accept container elements from other realms (iframes) (#4319) * fix: prevent multi-touch from permanently blocking drag interactions (#4320) * fix(Regions): place labels in the first free row (#4322) by @Copilot * fix: stop playback exactly at the requested stop position (#4318) * fix: correct 'overriden' typo in blobMimeType handling (#4317) * fix(hover): keep the hover line hidden after pointer leave (#4316) by @Copilot * fix: comprehensive bug fixes and memory leak fixes from holistic audit (#4314) * chore: update devDependencies to latest compatible versions (#4313) * Update docs links to the new /docs guide and /docs/api reference * chore: cypress chromium --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.8) ### 7.12.7 - Date: 2026-05-13 - Version: 7.12.7 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.7 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.7 - **fixed** — Hover plugin now uses WaveSurfer duration for hover time formatting - **fixed** — zoom.js example updated to use hideScrollbar - **fixed** — WebAudio plugin sets iOS audio session to playback for silent mode - **fixed** — WebAudio plugin fires finish event consistently on playback end * 7.12.7 * fix(Hover): use WaveSurfer duration for hover time formatting (#4309) by @Copilot * fix: zoom.js example to use hideScrollbar (#4307) by @87113 * fix(WebAudio): set iOS audio session to playback for silent mode (#4306) by @Copilot * fix(webaudio): fire finish event consistently on playback end (#4304) by @Copilot --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.7) ### 7.12.6 - Date: 2026-04-10 - Version: 7.12.6 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.6 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.6 - **fixed** — Spectrogram plugin now respects user-provided container option - **fixed** — Renderer caches container inline padding to avoid reading CSS values on each render - **fixed** — Hover plugin resets the transform on the onPointerLeave event * Bump version from 7.12.5 to 7.12.6 * fix(Spectrogram): respect user-provided container option (#4302) by @Copilot * fix(Renderer): cache container inline padding to avoid reading CSS values on each render (#4298) by @Copilot * fix(Hover plugin): reset the transform on the onPointerLeave​ event (#4237) (3767) by @xiaoliyooo --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.6) ### 7.12.5 - Date: 2026-03-25 - Version: 7.12.5 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.5 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.5 - **fixed** — clamp overlay to the visible range during zoom-out in Minimap - **fixed** — correct playbackRate test expectation and remove beads config - **fixed** — restore zoom-aware smooth auto-centering in Renderer * 7.12.5 * fix(Minimap): clamp overlay to the visible range during zoom-out (#4296) by @Copilot * fix(test): correct playbackRate test expectation, remove beads config * fix(Renderer): restore zoom-aware smooth auto-centering (#4294) by @Copilot --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.5) ### 7.12.4 - Date: 2026-03-16 - Version: 7.12.4 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.4 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.4 * 7.12.4 --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.4) ### 7.12.3 - Date: 2026-03-12 - Version: 7.12.3 - Original notes: https://github.com/katspaugh/wavesurfer.js/releases/tag/7.12.3 - Permalink: https://whatsnew.fyi/product/wavesurfer-js/releases/7.12.3 - **fixed** — re-render lazy regions after setOptions() - **fixed** — preserve high-precision notch positioning in timeline * 7.12.3 * fix(regions): re-render lazy regions after `setOptions()` (#4291) by @Copilot * fix(timeline): preserve high-precision notch positioning (#4290) by @Copilot --- [![npm](https://img.shields.io/npm/v/wavesurfer.js)](https://www.npmjs.com/package/wavesurfer.js/v/7.12.3)