Hierarchy (law)
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.
Player, Xtream, media proxy, and billing stay in
lib/streamly/* / plugins — addons stay thin.
Package layout
Asset rules
- Icons live inside the pack folder.
index.tssetsiconSrc: packAssetSrc(icon).- If a brand is owned by a plugin, addons may
import icon from "@/plugins/<slug>/icon.svg"(no duplicates inpublic/). - Register every pack in the folder
index.ts— admin Discover reads the registry, not hard-coded UI lists. - 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.