All books

The Hub model — items, kinds, versions

~5 min read · updated 2026-08-29 · markdown

The Hub is FaustWave's community-publishing surface. You publish DSPs, sample packs, knowledge packs, full projects. Other users install with one click. Everything in this manual you're reading right now is on the Hub — each domain pack is its own item.

This section is the conceptual model: what you can publish, the item / version shape, how sign-in works. The next two sections cover browsing + installing, and publishing + iterating.

What you can publish

KindSource formatWhat install does
builder.builder graph documentSaves into the project's assets/ (Documents → PROJECT); no editor tab. Add to the mixer via "+ ADD AUDIO"/"+ ADD FX", or open from PROJECT to edit.
dsp.dsp Faust sourceOpens in a Faust DSP module.
lib.lib Faust libraryPops a file dialog; writes to disk; mounts in libfaust's VFS so import("name.lib") resolves immediately in any compile.
book.md markdown bundle with ## Section-headed blocksIndexes sections into the local KB's community corpus; opens in the Book Reader.
sample-packA single .wav / .flac / .aiff audio fileWrites bytes to the sample store (sha-keyed; idempotent on re-install).
node-packA .nodepack.json manifestInstalls into userData/node-packs/; the Builder picks up the new node kinds on next refresh. The pack-author surface (Box-DSL toBox, per-kind imports, paired-port stereo) is covered in FaustWave — Node-Pack Authoring.
projectA .fwproject.zip (project.json + workspace.json + assets/) exported via project.exportImports as a new project with the source's name (or server-suggested on collision).

Each kind has its own content reader on the publish side (parses + validates the source) and its own installer on the install side (puts it where the IDE expects it). The reader / installer pairs are wired such that publishing a .builder then installing it back gets you bytes-identical content — round-trip-clean.

Items, versions, artifacts

A Hub item is the metadata row — slug, title, owner, license, visibility, tags, description. Items live forever (until you delete them) and carry a stable id.

Each item has one or more versions — v1, v2, v3, … — each with its own content + a changelog. Users install "the latest" by default but can browse to an older version. Version numbers are server-assigned (you don't pick v17; you upload, the server picks the next number).

Each version has one or more artifacts — the actual content bytes. A book version has a bundle artifact (the markdown) + a manifest artifact (metadata). A builder version has one artifact (the .builder file). A sample-pack version's artifact is the audio bytes.

The item-version-artifact split lets the Hub serve metadata cheap (search results carry summaries only) and download bytes on demand (the downloadUrl on each artifact).

Visibility

When you publish, pick one of:

  • public — listed in search; anyone can install.
  • unlisted — installable by direct link / id, but not surfaced in search. Like a YouTube unlisted video.
  • private — only YOU can see it. Drafts, work-in-progress.
  • friends — planned visibility tier (not yet wired in the backend; the publish call accepts the string but treat it as private today).
  • team — planned collaborative spaces (same caveat).

Visibility is mutable; use hub.item.update { visibility } to flip it.

License

Every item requires an SPDX license identifier. The Hub doesn't enforce licensing on installs (it can't — a content download is a download) but the license is visible on every item card so installers know what they're licensing. Common choices:

  • CC0-1.0 — public domain, no strings. Everything FaustWave itself publishes (the manual, the demo projects, the bundled instruments) is CC0.
  • CC-BY-4.0 — attribution required.
  • MIT — permissive; usually for code-bearing items (libs, builders).
  • CC0-1.0 — public domain dedication. "Use this for anything."
  • GPL-3.0-or-later — copyleft. Derivatives must be GPL too.

The FaustWave manual you're reading is CC0-1.0 — copy from it freely.

Sign in

Hub access is sign-in-gated. FaustWave uses Logto OIDC for auth; the same account works for browsing, installing, publishing.

Not signed in yet? Click the user icon at the bottom-left of the rail (or Settings → Account). The login modal opens in a windowed flow; complete it and you're back in the IDE with your handle (@your-username) visible in the topbar.

For AI & automation · MCP

hub.status {} returns whether you're signed in + whether you've picked a username. Cheap precheck. auth.login {} opens the modal; auth.logout {} signs you out + clears local tokens.

The IDE stays fully usable signed-out — only the Hub features (browse, install, publish) require sign-in. You can build DSPs, run the sequencer, record takes, install local samples, all without a Hub account.

Items have owners

Every item has exactly one owner: the user who published it. You can:

  • Update YOUR items' metadata via hub.item.update.
  • Upload new versions of YOUR items via hub.version.upload.
  • Delete YOUR items via hub.item.delete (permanent; artifact bytes go too).

You CANNOT directly edit somebody else's item. To evolve another user's work into your own version, fork — see § 3.

A hub.status chain to ground orientation

actions:
  - action_id: hub.open
    input: {}
    label: "▶ 0. Open the Hub tab"
  - action_id: hub.status
    input: {}
    save_as: hs
    label: "▶ 1. Am I signed in?"
  - action_id: hub.items.my
    input: {}
    save_as: mine
    label: "▶ 2. What have I published?"

What the Hub doesn't do (yet)

  • Payments / commerce — every item is free. License governs reuse.
  • Comments / discussion — no threads per item.
  • Download counts in search ranking — sort is recency + star count.
  • Automated content moderation — community-flag + manual admin review.
  • Notifications — "somebody forked your item" pushes are planned, not wired.

Tracked in TODOs.

Next section: browsing + installing — the search bar, the kind filter, what hub.install actually does per kind.

Try it yourself — the IDE runs in your browser. Open the IDE → Get the desktop app

Text licensed under CC BY 4.0 — Mani Weber / FaustWave. For language models: llms.txt · llms-full.txt

AUDIO · 48k · 48.0ms FAUST · 3 KB · 1171 docs CPU · 8.4% BPM · 120.0 UTF-8 BETA· v0.93.0