casset/docs
FeaturesOpen app
docs indexreference
00Overview01Thesis02Architecture03Casset Apps04System reality05Roadmap06Investor brief07Technical brief08Full tech HTML09API reference10Playback11Audio pipeline12Commerce13Base anchoring14Hook system15Music video16Theming17Creator guide18Glossary
LearnQuickstartApp modelSDKStartersReferenceDistribution
Developer platform · 0.1 alpha

Casset Apps

Build apps for artist worlds.

Create a focused interface inside a living Profile World or let a visual experience move with one host-authorized Track. The SDK, fixtures, and starters are real today; production distribution is still curated and internal.

Start the quickstart Download React starter

@casset/apps is repository-local and vendored into each ZIP. It is not published to npm, and there is no public submit flow.

One playback authorityThe song stays in Casset.repository local

Apps receive

  • Bounded artist, theme, catalog, and release data
  • Explicit loading, empty, denied, and unavailable states
  • Synchronized Track seconds and lifecycle
  • Narrow host capability checks

Casset retains

  • Installation, entitlement, and launch authority
  • The global player and canonical audio clock
  • Routes, runtime dispatch, and raw media delivery
  • Disablement, exit, and production integration
manifesthost contextyour interface
01Build02Quickstart03SDK04Agent briefs05Starters06Boundaries
01

Available now

Two runtimes, one product model.

Casset Apps deepen artist identity and the listening ritual. They do not become microsites, replacement players, or generic dashboards.
Profile World appsStage approved identity, atmosphere, catalog, liner notes, and one active release inside an artist-owned surface.available · Profile SurfaceTrack experiencesProject a deterministic visual frame from Casset's synchronized Track context without owning audio or inventing a clock.available · read onlyCatalog utilitiesBuild a bounded listening index or release artifact from the Profile catalog projection and approved host requests.available · bounded dataCampaign and audience viewsThe permission vocabulary exists, but generic public data adapters do not. These families remain explicitly unavailable.unavailable · future adapter
02

Five-minute start

Download, verify, then make it yours.

Each immutable ZIP contains the starter, the exact SDK alpha as a local file dependency, deterministic fixtures, tests, and agent instructions. No Casset credential is required.
1
Unpack

Choose a Profile or Track starter and enter its root folder.

2
Verify

Install dependencies, run tests, and build before changing the contract.

3
Compose

Change the manifest and interface; keep host authority and state handling intact.

Minimal Profile Appshell
curl -LO https://casset.fm/downloads/casset-apps/casset-minimal-profile-app-v0.1.0-alpha.0.zip
unzip casset-minimal-profile-app-v0.1.0-alpha.0.zip
cd casset-minimal-profile-app
pnpm install
pnpm test
pnpm dev
Open the full quickstartCompare all startersOpen the agent briefInspect download checksums
03

SDK and imports

A real package, a declaration, and a narrow host.

The repository-local @casset/apps alpha turns the trusted runtime into a small developer contract. It is vendored into every ZIP as a local file dependency; Casset's server and host remain the only launch authority.
@casset/appsvendored host contract
typescriptcontract checking
vitelocal build
vitestfixture and state tests
reactReact starter only

Manifest

  • Identity and version
  • Profile or Track context
  • Placements and permissions
  • Track kinds when applicable

Context

  • Short-lived launch lifecycle
  • Minimized public DTOs
  • Explicit Profile data states
  • URL-free Track resource references

Host

  • Capability detection
  • Profile-only PLAY_TRACK request
  • Lifecycle subscriptions
  • Fail-closed close and invalid requests
Approved Profile playback requestts
import {
  hasCassetPermission,
  hostSupports,
  isCassetDataReady,
  type CassetAppHost,
} from "@casset/apps"

export async function playFirstTrack(host: CassetAppHost) {
  const { context } = host.getSnapshot()
  if (context.kind !== "PROFILE_SURFACE") return
  if (!isCassetDataReady(context.catalog)) return
  if (!hasCassetPermission(context, "playback.control")) return
  if (!hostSupports(host, "PROFILE_PLAY_TRACK")) return

  const track = context.catalog.data.tracks[0]
  if (track) await host.request({ type: "PLAY_TRACK", trackId: track.id })
}
casset-app.jsonjson
{
  "schema": "casset.app-manifest.v1",
  "id": "studio.afterglow-room",
  "slug": "afterglow-room",
  "name": "Afterglow Room",
  "shortDescription": "A quiet release room inside the Profile World.",
  "description": "Stages an approved release and requests playback through Casset.",
  "developer": { "name": "Your studio" },
  "version": "0.1.0",
  "icon": "/icon.svg",
  "screenshots": [],
  "category": "IDENTITY",
  "context": "PROFILE_SURFACE",
  "placements": ["ARTIST_APP_ROUTE"],
  "permissions": [
    "artist.profile.read",
    "artist.theme.read",
    "catalog.tracks.read",
    "playback.read",
    "playback.control"
  ],
  "supportedFanAccess": ["FREE"],
  "compatibility": { "mobile": true, "desktop": true, "pwa": true },
  "trackApplicability": null
}

@casset/apps is not published to npm. The starter ZIPs include the exact pre-release source and install it through a local file: dependency, so the imports above are real without implying an open package or marketplace.

04

Agent-ready Markdown

Give Codex or Claude a bounded creative brief.

Every starter includes AGENTS.md, CLAUDE.md, PROMPT.md, and a README. The system instructions hold the runtime boundary; the prompt below is where you describe the emotional interface you want to make.

AGENTS.md

  • Canonical Casset doctrine
  • Files the agent may change
  • Runtime authority rules
  • Required validation commands

CLAUDE.md

  • The same host boundary
  • Sparse-state expectations
  • Mobile and reduced-motion rules
  • No second player or private data

PROMPT.md

  • A reusable task brief
  • Creative intent and interaction
  • Acceptance criteria
  • Test and build handoff
PROMPT.mdmarkdown
# Build brief for Codex or Claude Code

## Objective
Turn the artist's active release into a quiet afterglow room inside
the existing Profile World.

## Use
- The vendored `@casset/apps` package
- The provided fixture and host lifecycle
- The starter's existing test and build commands

## Preserve
- Casset owns artist identity, authorization, playback, and exit
- Request playback through the host; never mount an `<audio>` element
- Handle loading, empty, unavailable, and permission-denied states
- Keep the interface calm, mobile-first, and artist-specific

## Verify
- `pnpm test`
- `pnpm build`
05

Runnable projects

Begin at the right level of abstraction.

All three starters consume the same package. Their visual language is intentionally restrained; the bundled prompts tell Codex and Claude Code to create an original App rather than clone the sample.
Minimal Profile AppDependency-light TypeScript and DOM. Exercises ready, loading, empty, unavailable, and permission-denied catalog states.ZIP · minimalReact Profile AppTyped React surface with lifecycle updates, release data, responsive composition, and host-approved Track requests.ZIP · intermediateTrack ExperienceRead-only canonical playback projection, deterministic visual phases, lifecycle cleanup, and one local interaction.ZIP · advancedStarter guideChoose a kit, copy an agent prompt, inspect every included file, and follow the supported local workflow.Docs · agent ready
06

Truth before scale

A real SDK is not an open marketplace.

The package and downloads are usable. Third-party accounts, arbitrary production bundle execution, credentials, submission, signing, resource brokering, and public installation have not shipped.

Use now

  • Repository-local @casset/apps
  • Three standalone starter ZIPs
  • Strict parsers and fixtures
  • Trusted production Track contract

Casset only

  • Registry and runtime keys
  • Installation and entitlement truth
  • Playback stores and MediaFooter
  • Raw media and server authorization

Not shipped

  • npm publication
  • Public submit or review API
  • Arbitrary bundle isolation
  • Live revocation and resource delivery
Current distributionBuild against the truth that exists today.Read distribution status
Go deeperQuickstartSDKAgent briefsStartersReferenceDistribution
© Casset 2026
Trust & PrivacyTerms