# Sharing your work: from assets/ to the Hub

A `.dsp` is a text file, which makes it the most shareable artifact
in FaustWave.

**Publish** a saved DSP as a Hub item:

- `hub.publish { file_path, kind: "dsp", slug, title, license, visibility,
  description?, tags? }` — reads the file, validates it, uploads it as v1.
  `file_path` takes the patch's ref (`asset:assets/<name>.dsp`, from
  `project.files`) or an absolute OS path for a file outside the project.
  The Hub bundles the source **plus its library dependencies** (an item
  page shows `stdfaust.lib` and friends), so installs are self-contained.
- Start `visibility: "private"` while iterating; flip to `"public"` later
  with `hub.item.update { item_id, visibility }` — no re-upload needed.
- New iterations: `hub.version.upload { item_id, file_path, changelog }`
  posts v2, v3, … with a changelog trail.

**Install** someone's DSP: `hub.install { item_id }` on a `dsp`-kind item
opens it straight into a `.dsp` editor tab, dependencies mounted. From
there it's yours to run, tweak — and `hub.fork` if you want your changes to
live as your own item with provenance back to the original.

Metadata that makes an item useful to strangers (and to the assistant):

- A **description** that says what it sounds like and which channel/notes
  it expects (`"GM drum map, 36=kick …"`, `"expects [midi:chan 2]"`).
- **Tags** for discovery — instrument family, genre, technique.
- A **license** (SPDX id, e.g. `CC0-1.0` for "take it, it is yours", `CC-BY-4.0` if you want credit) — required at publish time.

> 🟦 **DSP + PROJECT**: for a complete demo — instruments, sequencer
> patterns, scenes, mixer setup — publish the whole project instead:
> `project.export` → `hub.publish { kind: "project" }`. The item restores
> as a ready-to-play workspace. Companion `dsp` items still make each
> instrument individually findable and forkable.
