Waveforms and audio levels for React Native. Decode a file once, natively and off the JS thread, then draw it at any size, zoom and style instantly.
- Decode once, render many. One pass produces min, max and RMS per bucket. Changing the bar count, zooming or switching the metric is cheap JS, not another decode.
- Presets or every knob.
waveformPresets.chat,.playerand.editorare tuned for voice messages, scrubbers and precise views. Spread one and override anything. - Fast and bounded. A C++ core on a background thread, chunked decoding with constant memory, progress and
AbortSignalcancellation. - Formats. WAV, FLAC, MP3 and OGG Vorbis everywhere, plus AAC/M4A and whatever else iOS or Android can decode.
- Any source. File paths,
file://URIs,http(s)://URLs (downloaded and cached, with headers) andArrayBuffers. - Bare React Native and Expo, built on Nitro Modules.
Install it in a bare React Native app or an Expo development build by following Installation, then draw your first waveform with the Chat bubbles guide.
| Chat bubbles | Presets, list performance, caching results |
| Players and zoom | Scrubbers, progress, zooming without rescaling |
| Drawing | Views, SVG and Skia paths, min/max envelopes |
| Sources and caching | URLs, headers, ArrayBuffers, cancellation, the download cache |
| Supported formats | Codecs per platform and which decoder handles them |
| How it works · Metrics and scaling | Buckets, RMS vs peak, linear vs dB |
| Migrating from v3 · Troubleshooting | |
| API reference | Every function and option |
apps/rn-cli-example (bare React Native) and apps/expo-example (Expo development build) show the same demo: a chat bubble and a full waveform with every knob. See CONTRIBUTING.md to run them.
Issues and pull requests are welcome. CONTRIBUTING.md covers the monorepo, tests and releases.