FIELD / REACT
v0.4.0 · APR 2026
EARLY DEVELOPMENT
MIT · OPEN SOURCE
Audio-first React components

Audio interfaces
without the busywork.

A React component library for waveforms, transports, meters, faders, knobs, scrubbers and timelines. Accessible by default, themed with CSS variables.

Install FieldBrowse componentsv0.4.0 · early development
WAVEFORM/ 48 KHZ · STEREO
INTRO
CHORUS
0:001:213:14
WAVEFORM · 48.0 kHz · 24-bit · STEREO
00:01:21:14 / 00:03:14:00
INTRO
CHORUS
0:00
0:38
1:17
1:56
2:35
3:14
00:01:21
L
R
04 · CHANNEL STRIP
MUTE
REC

02 · Install

One package.
One import.
That's it.

The fastest way to get started is the fieldui meta-package. One install gets you components, hooks, tokens, and a pre-compiled stylesheet. No Tailwind config, no @source directives.

  • Components, hooks, and tokens in one import
  • Pre-compiled CSS · every utility class baked in
  • Works with React 18 and 19
  • Next.js, Vite, Remix, React Router, CRA
$ npm install fieldui
added 1 package, audited 142 packages in 1.8s
found 0 vulnerabilities
$
App.tsxReact · v0.4.0
// Once at your app entry (e.g. main.tsx, layout.tsx)
import "fieldui/styles.css";

// In any component
import { MediaButton, WaveformDisplay } from "fieldui";
import { AudioGraphProvider, useTransport } from "fieldui/core";
import * as tokens from "fieldui/tokens";
Prefer to install packages separately?POWER USER

If you only need one piece — say, the headless hooks for a custom UI, or just the design tokens for a non-React project — install the sub-packages directly. The fieldui meta-package is just a thin convenience wrapper over these three, so mixing imports is safe and won't cause duplication.

$ npm install @fieldui/react @fieldui/core @fieldui/tokens
# @fieldui/react · components + bundled CSS
# @fieldui/core · headless hooks (transport, peaks, regions…)
# @fieldui/tokens · design tokens as a typed JS map + tokens.css
import "@fieldui/react/styles.css";
import { MediaButton } from "@fieldui/react";
import { useTransport } from "@fieldui/core";

03 · Primitives

Eleven primitives.
Designed to fit together.

Every preview below is a live @fieldui/react component. Pixel-sharp, keyboard-friendly, canvas-rendered where it helps.

01
Waveform
canvas · peaks + RMS · progress
02
Transport
play · stop · record · skip
03
Level Meter
safe / warn / clip · peak hold
04
Knob
role=slider · ↑↓ + shift fine
05
Fader
log / linear taper · Radix slider
06
Scrubber
value + max · keyboard scrubbable
07
Timeline
SMPTE · auto major/minor ticks
08
Region
labelled selection · drag to resize
09
Playhead
absolute · animated · syncs
10
01:42:11
Time Display
LCD readout · VT323 face
11
Media Button
square + rectangle · accent / neutral / danger

04 · Why Field

Built for audio.

01

Themed through CSS variables.

Colour, spacing, radius are all CSS custom properties. Override one on any parent and everything below retones, canvas waveforms and meters included.

15 audio-semantic tokens · 4 radius steps
02

Accessible by default.

Knobs are real role=slider with keyboard control. Faders and Scrubbers wrap Radix Slider. Transports are role=toolbar. Focus rings stay legible everywhere.

WCAG 2.2 AA · keyboard-complete
03

Made for how audio works.

Waveforms render to canvas at device pixel ratio. Meters scale in dB. Faders support log and linear taper. Time displays are SMPTE-aware out of the box.

canvas DPR-aware · 60fps with 12k peaks

05 · Design tokens

A small palette, focused on audio.

We don't tokenise everything. Generic UI stays Tailwind slate. Tokens cover what audio needs: peak vs RMS, safe vs warn vs clip, transport vs scrubber, region vs playhead.

--color-audio-waveform-peak
#111110
--color-audio-meter-safe
#5B6E3D
--color-audio-meter-warn
#C8973A
--color-audio-meter-clip
#C85A2A
--color-audio-scrubber
#3A5A8A
--color-button-accent
#C85A2A
RUNTIME · CSS VARS · ZERO RECOMPILE
/* Theme override on any ancestor. */
/* Propagates to canvas children. */

[data-theme="podcast"] {
  --color-audio-meter-safe: var(--moss);
  --color-audio-meter-clip: var(--rust);
  --color-button-accent:    #d97757;
}

/* Per-instance retoning. */
.danger-meter {
  --color-audio-meter-safe: var(--rust);
}
15
audio tokens
4
radius steps
8px
spacing rhythm
DPR
canvas-aware

06 · Composed surface

A whole player,
from the same primitives.

Every primitive on this page is here, working together. No bespoke parts, no escape hatches. Copy it, fork it, retone it.

1Waveform · regions · playheadpeaks · 240 samples · 48.0 kHz
A · INTRO
B · CHORUS
C · OUTRO
0:00
0:30
1:00
1:30
2:00
2:30
3:00
2Transport · scrubber · display
01:21
A
Intro · vox
00:00–00:33 · mono
44.1 kHz -6.2 dB
B
Chorus · bed
01:08–01:52 · stereo
48.0 kHz -3.1 dB
C
Outro · pad
02:31–02:54 · stereo
48.0 kHz -8.7 dB