> ## Documentation Index
> Fetch the complete documentation index at: https://docs.streamly.watch/llms.txt
> Use this file to discover all available pages before exploring further.

# Addons & Plugins

> Hierarchy, packaging, registries, and catalogs for Streamly streaming addons vs platform plugins.

## Hierarchy (law)

| Surface     | Role                         | Admin                        | Registry                                               |
| ----------- | ---------------------------- | ---------------------------- | ------------------------------------------------------ |
| **Plugins** | Bigger platform integrations | `/admin/plugins`             | `plugins/index.ts` → `@/lib/streamly/plugins/registry` |
| **Addons**  | Streaming sources only       | `/admin/streaming-providers` | `addons/index.ts`                                      |

**Rule:** if the objective is only “add a streaming source,” it is an **addon**. If it is bigger (credentials platform, feature flag, billing, ads network), it is a **plugin**.

| Vendor pattern                      | Addon                | Plugin                   |
| ----------------------------------- | -------------------- | ------------------------ |
| Vimeo                               | Source / embed only  | —                        |
| Mux / Bunny / CF Stream / VdoCipher | Source on titles     | Platform API / signing   |
| OpenAir                             | Live playlist source | Needs `features.live_tv` |

Player, Xtream, media proxy, and billing stay in `lib/streamly/*` / plugins — addons stay thin.

## Package layout

```
addons/<slug>/
  addon.json
  index.ts          # imports icon → hashed /_next/static/media/… URL
  icon.svg|png      # pack-owned (NOT public/)
  cover.svg         # optional

plugins/<slug>/
  plugin.json
  index.ts
  icon.svg          # in the pack (not public/)
```

### Asset rules

1. Icons live **inside** the pack folder.
2. `index.ts` sets `iconSrc: packAssetSrc(icon)`.
3. If a brand is owned by a plugin, addons may `import icon from "@/plugins/<slug>/icon.svg"` (no duplicates in `public/`).
4. Register every pack in the folder `index.ts` — admin Discover reads the registry, not hard-coded UI lists.
5. Keep stable IDs (`addon.*`, `payments.*`, `video.*`, …) — rename only with a migration.

## Built-in addons (15)

`addon.openair`, `addon.demo-hls`, `addon.vimeo`, `addon.mux`, `addon.bunny-stream`, `addon.cloudflare-stream`, `addon.vdocipher`, `addon.vidsrc`, `addon.videasy`, `addon.vidlink`, `addon.vidfast`, `addon.vidrock`, `addon.vidzee`, `addon.vidnest`, `addon.vidstorm`.

Live pack install APIs (when needed) live under `app/api/v1/live/<pack>/` and import from `@/addons/<slug>`. Compat shims: `@/lib/streamly/openair-free`, `@/lib/streamly/famelack-live`.

## Built-in plugins (16)

See [Plugins](/admin-dashboard/plugins) for wired vs wire-next status. Prefer real runtime (checkout / webhook / upload / inject) before exposing incomplete Discover UX as “done.”

## Related

* [Addons](/admin-dashboard/addons)
* [Plugins](/admin-dashboard/plugins)
* [Themes Package System](/technical/themes-package-system)
