Skip to content

Registry

The Registry panel browses the package registry, installs a package into the current song, and publishes one of the song’s modules. Packages in barline are source-distributed single-file TypeScript modules — a preset is a code snippet — so there is no separate distribution pipeline.

  • A searchable package list (by name, tags, description). Each row shows the latest version, the owning org, a builtin tag for the embedded packages, and expanders for the full version history and the source.
  • A publish form for splitting one of your song’s modules out as a package.

The two builtin packages ship with the studio: schranz-essentials (rollingKick, offbeatHats, rumbleLine, ratchetFill, schranzPerc, fullKit) and groove-toolkit (mpcSwing, pushPull, accentEvery, ghostLayer).

Installing a package creates <name>.ts in this song’s files — the same Yjs create operation as the MCP install_package tool and the editor’s new-file action. It never overwrites; main.ts is reserved. The editor sees the new file live and the song hot-reloads. You then import it:

import { rollingKick } from "./schranz-essentials";

A package’s code may import only @barline/core — enforced by the studio’s compile shim — which is what keeps packages portable and the dependency direction clean.

A package name belongs to the org that first publishes it (shown as a badge). Publishing is membership-gated: the form offers the orgs you belong to, and only the owning org may ship further versions of a name. You can pin and install any historical version from a row’s version expander.

This is the ecosystem surface designed for — and the artist/org model from auth — made concrete: every public song is a demo, and every reusable idea can become a one-file package others install with a click or via install_package.