Wiki home
Under the hood

Your project folder

Every Patchwerk plugin is a folder of plain files — JSON, Svelte, Cmajor. What each one is, which are safe to edit by hand, and what Patchwerk rewrites for you.

Plugin makers who want to know exactly what is saved on disk and why.

Everything is a file you own

A Patchwerk project is one folder. Open it in any file browser and you can see your entire plugin — no database, no opaque bundle.

my-plugin/
  project.json          plugin identity: name, type, I/O, canvas size, stage
  CLAUDE.md             notes the AI assistant reads and keeps updated
  brief.md              your creative brief — the "why" of the plugin
  parameter-spec.md     the parameter contract: ids, ranges, defaults
  dsp/graph.json        the sound: every node, cable, and modulator
  presets/              saved sounds (.pwpreset files)
  blocks/               custom DSP blocks, if you've made any
  ui/                   your plugin's interface — a real Svelte app
  .gitignore            keeps generated files out of version control

blocks/ only appears once you create a custom block. Each block is its own subfolder with a block.json manifest and a dsp.cmajor source file — real, readable DSP code.

Which files are yours to edit

Everything is plain text, but some files are better edited through the app than by hand.

FileEdit by hand?Notes
brief.md, parameter-spec.mdYes, pleaseThey are for you — the assistant builds from them
CLAUDE.mdYesShared notebook between you and the assistant
blocks/*/dsp.cmajorYesCustom block DSP source
ui/src/Plugin.svelte and ui/src/components/YesSame files the design canvas edits
project.jsonCarefullyValid edits work; the app autosaves over it
dsp/graph.jsonCarefullyUse the graph editor while the project is open
presets/*.pwpresetCarefullyPlain JSON, but easiest to manage in-app
ui/vite-plugins/, ui/src/lib/NoPatchwerk plumbing — overwritten on every open

Note Patchwerk rewrites some files automatically: project.json autosaves shortly after any change, dsp/graph.json persists as you edit the graph, and the plumbing under ui/vite-plugins/ and ui/src/lib/ is restored to stock every time the project opens. Hand edits to those plumbing files will not survive.

Your interface is a real app, not a skin

The ui/ folder is a complete Svelte project with its own package.json. When your project is open, Patchwerk runs it as a live preview inside the design canvas — and three editors share those same source files:

  • the design canvas, when you drag and resize controls,
  • the AI assistant, when you ask for UI changes,
  • you, in the script editor or any external editor.

ui/src/Plugin.svelte is the root of your interface; your own components live in ui/src/components/. Because it is ordinary source code, anything Svelte can render, your plugin can be.

Tip ui/node_modules is always safe to delete. Patchwerk reinstalls dependencies the next time it starts your UI preview.

What happens when a project opens

Opening a project is a short, predictable sequence:

  1. Read the manifest. project.json tells Patchwerk what the plugin is — name, type, I/O, canvas size, and its current stage.
  2. Load the graph. dsp/graph.json becomes the node graph you see and edit.
  3. Load custom blocks. Anything in blocks/ joins the block library.
  4. Start the UI preview. The ui/ app spins up and appears in the design canvas (plumbing files are refreshed to stock first).
  5. Compile. The graph is translated to Cmajor and handed to the audio engine — and you have sound.

So a "project" is never loaded into some hidden state: what you hear and see is always a direct reading of the files above.

Projects are git-friendly by design

Everything meaningful is text: JSON, Markdown, Svelte, Cmajor. A scaffolded project even ships with a .gitignore that excludes the noise — node_modules/, ui/dist/ build output, and regenerated agent context (.patchwerk/, AGENTS.md).

That makes the usual workflows just work:

  • Diff a graph change before committing it.
  • Branch to try a risky redesign of the interface.
  • Revert anything — including edits the AI assistant made.
  • Share a plugin by pushing the folder to a repo; a collaborator opens it like any other project.

How the assistant sees your project

Three Markdown files at the project root are the assistant's working memory:

  • brief.md — what the plugin is for and how it should sound. Vague brief, vague results.
  • parameter-spec.md — the parameter table the graph and UI must satisfy.
  • CLAUDE.md — facts about the project plus running notes the assistant updates over time.

Keep these honest and the assistant builds toward your intent instead of guessing. They are checked into git like everything else, so your plugin's "spec" travels with its code.