Try the demo. Export your work before you leave the demo: saving between sessions is not supported there.
PLAYER is a local-first song builder for Strudel. It keeps Strudel code as the source of truth while adding visual tools for editing patterns, arranging sections, browsing sounds, and controlling playback.
The app is built with Next.js, React, CodeMirror, Strudel, and IndexedDB. Songs are saved in the
browser, can be exported as .strudel files, and can be shared through compressed URL hashes.
Disclaimer: PLAYER was made with ample amounts of vibe coding. Expect experimental edges, especially around complex Strudel syntax and browser-specific audio behavior.
- Live Strudel code editing with CodeMirror and active-event highlighting
- Play, stop, seek, loop, BPM, and cycle controls
- Chunk-aware editing for pattern statements
- Step sequencer for drum patterns
- Piano roll for melody patterns
- Effect knobs that update numeric method-chain literals such as
.gain(0.6) - Quick transforms for room, low-pass filter, distortion, speed, and reverse
- Sound browser for built-in Strudel sounds, with preview and insert-at-cursor
- Song timeline generated from evaluated Strudel patterns, not syntax alone
- Arrangement editing for recognized
pickRestartandarrangestructures - Local song library backed by IndexedDB autosave
- Import and export for
.strudel,.js, and.txtsong files - Share links that store compressed song data in the URL hash without a server
PLAYER treats text as the durable format. Visual edits parse the current document, make a constrained change, and write the result back to CodeMirror. When the syntax is outside an editor's safe subset, the app falls back to code editing instead of guessing.
Key areas:
components/editor/- the main editor surface, transport, chunk toolbar, and visual panelscomponents/timeline/- arrangement strip, playhead, ruler, and section editing UIcomponents/step-sequencer/- grid editing for drum patternscomponents/piano-roll/- grid editing for pitched materialcomponents/sound-browser/- searchable sound browser and audition UIlib/strudel/- Strudel engine integration, playback, audition, sound loading, and prebakinglib/chunks/- source parsing and chunk detectionlib/notation/- editable mini-notation model, parser, serializer, pitch, and resize logiclib/timeline/- pattern analysis, period detection, lane attribution, recognition, and editslib/persistence/- local songs, file export/import, and share URL encoding
- Node.js 20 or newer
- pnpm
Install dependencies:
pnpm installRun the development server:
pnpm devThe default Next.js dev server runs at http://localhost:3000.
This repo also includes Makefile shortcuts. If portless is available locally, make run-dev runs
the app at https://player.localhost:1355.
make install
make run-dev
make test
make lint
make buildRun the test suite:
pnpm testRun linting:
pnpm lintBuild for production:
pnpm buildPLAYER is an experimental editor for composing with Strudel. The parsing and visual editing layers are intentionally conservative: supported structures are round-tripped deterministically, and unsupported structures remain editable as code.
PLAYER is released under the GNU Affero General Public License v3.0 or later. See LICENSE.
This app depends on AGPL-licensed Strudel-related packages, including superdough. If you deploy a modified version publicly or make it available over a network, make the corresponding source code available to users as required by the AGPL.