A retro computing themed node graph front-end for
cdp-wasm engine. Also
serves as the UI for cdp-plugin
and cdp-extension.
Based on the algorithms and documentation of the Composer's Desktop Project.
Embeds the FAUST compiler for custom DSP nodes.
All runtime dependencies are committed under vendor/, so a bare clone can
build and run the app with no install step:
npm run build # assembles the site into dist/pages/ from vendor/
npx serve dist/pages # or any static file servernpm run serve runs the app in place with a live dev server. It reads from
node_modules/, so it needs npm install first — which requires the sibling
file: package ../cdp-wasm checked out alongside this repo, and a GitHub
Packages read token for @cdp-wasm-suite/cdp-sampler (see .npmrc).
npm install
npm run serve # http://localhost:8000/ (pass a port: node serve.mjs 3000)The app registers 14 WebMCP
tools on document.modelContext, so a browser-side AI agent can co-author the
patch with you on the same live canvas: inspect the graph and the ~250-effect
catalog, add/cable/edit nodes incrementally, load audio and render — while you
watch, tweak and undo. See src/core/webmcp-tools.js for the tool list.
Status: behind chrome://flags/#enable-webmcp-testing (Chrome 146+); a Chrome
origin trial runs from 149 (token placeholder in index.html); expected to
ship around Chrome 157. Standalone browser/PWA only — never registered inside
the plugin/extension WebViews.
External MCP clients can drive the same tools without native WebMCP through
the window.__webmcp debug surface — e.g. Claude Code with
chrome-devtools-mcp:
evaluate_script(async () => await window.__webmcp.call('get_patch', {})).
Tools only ever return patch structure and audio metadata (duration,
channels, sample rate) — never audio bytes.
npm run bundle assembles a self-contained embeddable build in dist/bundle/
(from node_modules/ when the siblings are installed, else from the committed
vendor/ snapshot). That directory is published as
@cdp-wasm-suite/cdp-web
on GitHub Packages by .github/workflows/publish.yml (on release, or run it
manually) — bump version in package.json first. The engine lives at
vendor/ inside the package (npm strips node_modules/ when packing) and all
runtime references are rewritten to match.
cdp-plugin (via
scripts/fetch-web-dist.sh) and
cdp-extension (as a regular
npm dependency) consume this package instead of vendoring built assets.
Installing from GitHub Packages needs a token with read:packages, even for
public packages.
Each keeps its own license; none of them are covered by this repo's AGPL.
cdp-wasm— LGPL-2.1-or-later. The*.wasmmodules are compiled from CDP8, © 1983–2023 Trevor Wishart, Richard Dobson, Martin Atkins and Composers Desktop Project Ltd; the Emscripten loader glue is MIT and the JS API/catalog is MIT. Seevendor/cdp-wasm/wasm/LICENSE(note that its "repository root LICENSE" reference points at the cdp-wasm repo, not this one).@cdp-wasm-suite/cdp-sampler— LGPL-2.1-or-later.@grame/faustwasm— LGPL, © GRAME-CNCM.monaco-editor— MIT.
AGPL-3.0-or-later — see LICENSE.
Copyright Oliver Larkin 2026.
The AGPL covers this repository's own work: index.html, src/, scripts/,
recipes/, and the design assets. If you run a modified cdp-web over a network,
§13 requires you to offer your users the corresponding source of your version —
the About dialog carries the source link that satisfies this, so keep it working
and pointed at your fork if you publish one.
The vendored components above are separate works under their own (LGPL/MIT)
terms and are used as libraries, not merged into the AGPL'd code. They stay
independently replaceable in vendor/, which is what LGPL §6 / §4 requires. The
AGPL applies to the combined distribution; it does not and cannot relicense
them.
Fonts under fonts/ and the CDP documentation that manual.json is generated
from carry their own terms — see fonts/atari-st-LICENSE.txt and
composersdesktop.com.
EXCEPTIONS.md records the standing grants made on that basis.
