Versions in this module Expand all Collapse all v0 v0.3.3 Nov 4, 2026 Changes in this version + const CallsCap + const EventCollectionRebuilt + const EventLogMaxAge + const EventPlaybackCompleted + const EventPlaybackError + const EventPlaybackFailover + const EventPlaybackPaused + const EventPlaybackResumed + const EventPlaybackStarted + const EventPlaybackStopped + const EventServerHealth + const EventTitleAvailable + const EventViewerAccess + const EventViewerAdded + const KVQuotaBytes + const LogsCap + const MaxFetchBytes + const OutboxCap + const Protocol + const RelayPublicPrefix + const StremioChannelsKey + var AddonCapabilities = []Capability + var ErrAlreadyInstalled = errors.New("plugins: already installed") + var ErrDigestMismatch = errors.New("plugins: artifact digest does not match") + var ErrDisabled = errors.New("plugins: plugin is disabled") + var ErrFetchFailed = errors.New("plugins: request failed") + var ErrNoAddon = errors.New("plugins: this plugin is not bound to an add-on") + var ErrNoAddonLink = errors.New("plugins: this plugin has no add-on link") + var ErrNoRuntime = errors.New("plugins: no runtime registered for this plugin") + var ErrNotFound = errors.New("plugins: not found") + var ErrPermissionDenied = errors.New("plugins: permission denied") + var ErrQuotaExceeded = errors.New("plugins: storage quota exceeded") + var ErrRevoked = errors.New("plugins: plugin was revoked") + var ErrShadow = errors.New("plugins: write recorded in shadow mode") + var ErrStreamUnsupported = errors.New("plugins: runtime does not support streaming") + var ErrUnavailable = errors.New("plugins: host service unavailable") + var KnownEvents = map[string]bool + var ReservedCapabilities = map[Capability]bool + func AddonResult(resp Response) (json.RawMessage, error) + func CollectionPluginID(ctx context.Context) string + func CompareSemVer(a, b string) int + func DeadlineFor(path string) time.Duration + func DescriptorsFor(man Manifest) []extend.Descriptor + func FetchResult(resp FetchResponse) map[string]any + func HotLimits(m Manifest) wasm.Limits + func IsGitHubURL(raw string) bool + func LintCopy(s string, max int) string + func LintSettingsSchema(raw json.RawMessage) error + func NonSecretSettings(settings map[string]any, schema json.RawMessage, declaredSecrets []string) map[string]any + func NormalizeNotify(kind string) string + func NormalizePlayback(kind, state string) string + func ParamFieldsFromList(pluginID string, fields []ListParamField) ([]extend.ParamField, string) + func ParseSemVer(v string) ([3]int, bool) + func PermissionDiff(cur, next Manifest) []string + func PermissionSheet(man Manifest) (lines []string, needsViewers, needsFolders bool) + func PkgDigest(files map[string][]byte) string + func StremioCatalogKey(c StremioCat) string + func StremioInstallID(link string) (id, base string, err error) + func ToolName(plugin, name string) string + type AddonCat struct + ID string + Key string + Name string + Type string + type AddonConfig struct + Configurable bool + Configured bool + Fields []AddonConfigField + Host string + Layer string + Required bool + type AddonConfigChange struct + Link string + Values map[string]any + type AddonConfigField struct + Group string + Key string + Kind string + Label string + Options []AddonConfigOption + Required bool + Set bool + Summary string + Value any + type AddonConfigOption struct + Label string + Value string + type AddonConfigResult struct + Added []string + Name string + Problems []string + Removed []string + Roles []string + Sample string + type AddonFetcher struct + func (f AddonFetcher) Fetch(ctx context.Context, route string, limit int64) ([]byte, error) + type AddonInstall struct + Exclusive bool + Link string + Name string + Offline []string + Roles []Capability + type AddonPreview struct + AlreadyInstalled bool + Catalogs []AddonCat + ConfigureFirst bool + Description string + Host string + ID string + Logo string + Name string + Roles []RoleState + Version string + type Author struct + Name string + URL string + type Backends struct + CatalogGet func(ctx context.Context, id string) (json.RawMessage, error) + CatalogSearch func(ctx context.Context, query string, limit, offset int) (json.RawMessage, error) + CollectionsDelete func(ctx context.Context, doc json.RawMessage) error + CollectionsUpsert func(ctx context.Context, doc json.RawMessage) (previous json.RawMessage, err error) + Notice func(text string) + SetWatchState func(ctx context.Context, viewerID int64, titleID string, watched bool) (previous bool, err error) + ViewerHistory func(ctx context.Context, viewerID int64, limit, offset int) (json.RawMessage, error) + ViewerNames func(ctx context.Context, ids []int64) (json.RawMessage, error) + type CallRecord struct + Created time.Time + Error string + ID int64 + MS int64 + Method string + Plugin string + Request string + Response string + Route string + Status int + type CandidateFacts struct + AudioChannels string + AudioCodecs []string + Cached bool + ClientCaps ClientCaps + Group string + HDR []string + Indexer string + Languages []string + Name string + Protocol string + ReleaseID string + ReleaseType string + Resolution string + Size int64 + SourceClass string + Subtitles []string + Verified bool + VideoCodec string + type Capability string + const CapDebridProvider + const CapEvents + const CapListSource + const CapLiveTV + const CapMarkers + const CapMetadata + const CapNotify + const CapPluginDirectory + const CapRankingStep + const CapRuleCondition + const CapStreamSource + const CapSubtitles + const CapTools + const CapUI + type Catalogue interface + Resolve func(ctx context.Context, idOrURL, version string) (CatalogueArtifact, error) + type CatalogueArtifact struct + Capabilities []Capability + ID string + Kind Kind + Permissions Permissions + SHA256 string + URL string + Version string + type ChannelsMeta struct + Refresh string + Test bool + type ClientCaps struct + Codecs []string + HDR []string + MaxHeight int + type CollectionInputError struct + Message string + func (e *CollectionInputError) Error() string + type CommandMeta struct + Action string + Key string + Label string + type Contributes struct + Channels *ChannelsMeta + Commands []CommandMeta + Directories []DirectoryMeta + Events *EventsMeta + Integration *IntegrationMeta + ListSources []ListSourceMeta + Markers *MarkersMeta + Metadata *MetadataMeta + Notification *NotificationMeta + Pages []PageMeta + RankingSteps []RankingStepMeta + RuleConditions []RuleConditionMeta + Slots []SlotMeta + Source *SourceMeta + Subtitles *SubtitlesMeta + Tools []ToolMeta + type Deps struct + Backends Backends + Bus clusterbus.Bus + CheckPackage func(context.Context, []byte, map[string][]byte) error + DB *sql.DB + FetchClient *http.Client + IsLeader func() bool + Logger *slog.Logger + Notifications *notify.Service + Now func() time.Time + Registry *extend.Registry + Sealer config.FieldSealer + Tools *tools.Catalogue + type Detail struct + AddedPermissions []string + HealthDetail Health + Impact struct{ ... } + Manifest Manifest + Permissions struct{ ... } + Privacy struct{ ... } + type DirectoryEntry struct + Description string + ID string + ManifestURL string + Name string + Unsupported string + Version string + type DirectoryMeta struct + Key string + Label string + type DirectoryResult struct + Entries []DirectoryEntry + type EtherBlock struct + Author Author + Capabilities []Capability + Cluster string + Contributes Contributes + Health HealthDecl + Icon string + Kind Kind + License string + Permissions Permissions + Protocol int + Repo string + Runtime RuntimeDecl + Schedule []ScheduleEntry + Settings json.RawMessage + Stremio bool + Strings map[string]json.RawMessage + Summary string + type Event struct + At time.Time + ID string + Name string + Payload json.RawMessage + ViewerID int64 + type EventsMeta struct + Subscribe []string + type FetchRequest struct + Body []byte + Headers map[string]string + Method string + URL string + type FetchResponse struct + Body []byte + Headers map[string]string + Status int + type FieldError struct + Field string + Message string + type FolderEntry struct + Dir bool + Mtime int64 + Name string + Path string + Size int64 + type Grants struct + Folders []string + LAN bool + Revoked []string + Viewers []int64 + type Health struct + Drops int64 + EgressBytes int64 + Failures []int64 + LastError string + LastOK time.Time + NextRetry time.Time + Observed map[string]int + RankingSkipped int64 + RankingSkippedAt time.Time + Reason string + Restarts int64 + Slow int64 + Status string + type HealthDecl struct + Interval string + type Host interface + CatalogGet func(ctx context.Context, id string) (json.RawMessage, error) + CatalogSearch func(ctx context.Context, query string, limit, offset int) (json.RawMessage, error) + CollectionsUpsert func(ctx context.Context, collection json.RawMessage) error + FoldersList func(ctx context.Context, root, path string) ([]FolderEntry, error) + FoldersStat func(ctx context.Context, root, path string) (FolderEntry, error) + HTTPFetch func(ctx context.Context, req FetchRequest) (FetchResponse, error) + KVDelete func(ctx context.Context, key string) error + KVGet func(ctx context.Context, key string) ([]byte, bool, error) + KVList func(ctx context.Context, prefix string) ([]string, error) + KVPut func(ctx context.Context, key string, value []byte) error + Log func(ctx context.Context, level, msg string, attrs map[string]any) error + NotifyOwner func(ctx context.Context, text string) error + SecretGet func(ctx context.Context, name string) (string, error) + SetWatchState func(ctx context.Context, viewerID int64, titleID string, watched bool) error + Settings func(ctx context.Context) (map[string]any, error) + ViewerGranted func(ctx context.Context) (json.RawMessage, error) + ViewerHistory func(ctx context.Context, viewerID int64, limit, offset int) (json.RawMessage, error) + type HotBudgets struct + PerBatch time.Duration + PerCandidate time.Duration + func EffectiveBudgets(lim wasm.Limits) HotBudgets + type HotOutcome struct + Duration time.Duration + MemoHits int + Slow int + Status string + Trap bool + Units int64 + func (o HotOutcome) Timeout() bool + type HotRuntime interface + Budgets func() HotBudgets + CondMatch func(ctx context.Context, cand CandidateFacts, operator string, ...) (match bool, out HotOutcome, err error) + HasCondMatch func() bool + HasRankKey func() bool + RankBatch func(ctx context.Context, cands []CandidateFacts, config json.RawMessage) (keys []int64, out HotOutcome, err error) + type InstallOptions struct + AcceptAddedPermissions bool + AutoUpdate bool + Grants Grants + Settings map[string]any + Shadow bool + type Installed struct + Files func(path string) ([]byte, bool) + Host Host + ID string + Manifest Manifest + SourceURL string + type IntegrationMeta struct + Adds []string + Category string + Connect string + Logo string + Test bool + type JournalEntry struct + Created time.Time + Detail string + ID int64 + Inverse json.RawMessage + Op string + Plugin string + Shadow bool + Undone bool + type Kind string + const KindExtension + const KindIntegration + const KindLiveTVSource + const KindNotificationChannel + const KindSource + type ListParamField struct + Default any + Help string + Hint string + Key string + Kind string + Label string + Name string + Options []struct{ ... } + Placeholder string + Required bool + func ParseListParamFields(raw json.RawMessage) []ListParamField + type ListSourceMeta struct + Catalog string + Hint string + Key string + Label string + MaxItems int + Params json.RawMessage + Refresh string + type Manager struct + func New(deps Deps) (*Manager, error) + func (m *Manager) Addon(rec Record) stremio.Addon + func (m *Manager) AddonConfig(ctx context.Context, id string) (AddonConfig, error) + func (m *Manager) AddonConfigPage(ctx context.Context, id string) (string, error) + func (m *Manager) AddonFetch(ctx context.Context, id, route string) (Response, error) + func (m *Manager) AddonLink(ctx context.Context, id string) (string, error) + func (m *Manager) AddonLinkConfigPage(link string) (string, error) + func (m *Manager) ApplyUpdate(ctx context.Context, id string, acceptAdded bool) (Record, error) + func (m *Manager) BrowseDirectory(ctx context.Context, plugin, key string) (DirectoryResult, error) + func (m *Manager) Call(ctx context.Context, pluginID string, req Request) (Response, error) + func (m *Manager) CallStream(ctx context.Context, pluginID string, req Request) (Response, io.ReadCloser, error) + func (m *Manager) CheckHealth(ctx context.Context, id string) (Health, error) + func (m *Manager) CheckUpdate(ctx context.Context, id string) (*Preview, bool, error) + func (m *Manager) Configure(ctx context.Context, id string, incoming map[string]any) (map[string]string, error) + func (m *Manager) DeliverOutbox(ctx context.Context, pluginID string) error + func (m *Manager) FetchPickedSubtitle(ctx context.Context, plugin, title, subtitle, token, rawURL string) ([]byte, error) + func (m *Manager) Fetcher(plugin string) AddonFetcher + func (m *Manager) Get(ctx context.Context, id string) (Record, error) + func (m *Manager) GetSettings(ctx context.Context, id string) (map[string]any, json.RawMessage, error) + func (m *Manager) GrantsOf(ctx context.Context, id string) (Grants, error) + func (m *Manager) Handler() http.Handler + func (m *Manager) HealthOf(ctx context.Context, id string) (Health, error) + func (m *Manager) HostFor(pluginID string) Host + func (m *Manager) Hot(ctx context.Context, pluginID string) (HotRuntime, bool) + func (m *Manager) HotReady(pluginID string) (HotRuntime, bool) + func (m *Manager) Install(ctx context.Context, p *Preview, opts InstallOptions) (Record, error) + func (m *Manager) InstallAddon(ctx context.Context, in AddonInstall) (Record, error) + func (m *Manager) Journal(ctx context.Context, id string, limit int, shadowOnly bool) ([]JournalEntry, error) + func (m *Manager) List(ctx context.Context) ([]Record, error) + func (m *Manager) MintSubtitlePick(plugin, title, subtitle string) (string, error) + func (m *Manager) MintSubtitleURLPick(plugin, title, subtitle, rawURL string) (string, error) + func (m *Manager) OnRemove(fn func(ctx context.Context, id string)) + func (m *Manager) OnSync(fn func(ctx context.Context, r Record)) + func (m *Manager) Options(ctx context.Context, id, field string) (json.RawMessage, error) + func (m *Manager) PackageFiles(ctx context.Context, id string) (map[string][]byte, error) + func (m *Manager) PluginSettings(ctx context.Context, pluginID string) (map[string]any, error) + func (m *Manager) PreviewCatalogGet(ctx context.Context, id string) (json.RawMessage, bool, error) + func (m *Manager) PreviewCatalogSearch(ctx context.Context, query string, limit, offset int) (json.RawMessage, bool, error) + func (m *Manager) PreviewFetch(ctx context.Context, network []string, req FetchRequest) (FetchResponse, error) + func (m *Manager) PreviewInstall(ctx context.Context, src Source) (*Preview, error) + func (m *Manager) Publish(ctx context.Context, ev Event) + func (m *Manager) RecordFailure(ctx context.Context, pluginID, reason string) + func (m *Manager) RecordRanking(ctx context.Context, pluginID string, r RankingReport) + func (m *Manager) RecordSlow(ctx context.Context, pluginID string, n int) + func (m *Manager) RegisterRuntime(kind string, f RuntimeFactory) + func (m *Manager) RelayHandler() http.Handler + func (m *Manager) Remove(ctx context.Context, id string, undoFirst bool) error + func (m *Manager) ResolveText(ctx context.Context, plugin, key, locale string) (string, bool) + func (m *Manager) Revoke(ctx context.Context, id, reason string) (bool, error) + func (m *Manager) Rollback(ctx context.Context, id string) (Record, error) + func (m *Manager) Run(ctx context.Context) + func (m *Manager) SaveAddonConfig(ctx context.Context, id string, ch AddonConfigChange) (Record, error) + func (m *Manager) SetCatalogue(c Catalogue) + func (m *Manager) SetEnabled(ctx context.Context, id string, enabled bool) error + func (m *Manager) SetGrants(ctx context.Context, id string, g Grants) error + func (m *Manager) SetRoles(ctx context.Context, id string, off []Capability) (Record, error) + func (m *Manager) SetShadow(ctx context.Context, id string, shadow bool) error + func (m *Manager) SettingsSchema(ctx context.Context, id string) (json.RawMessage, error) + func (m *Manager) Start(ctx context.Context) error + func (m *Manager) StremioResource(ctx context.Context, plugin, resource, typ, id string, extra map[string]string) (Response, error) + func (m *Manager) SubscribeInvalidations() func() + func (m *Manager) Test(ctx context.Context, id string) (TestResult, error) + func (m *Manager) TestAddonConfig(ctx context.Context, id string, ch AddonConfigChange) (AddonConfigResult, error) + func (m *Manager) TextResolver() extend.TextResolver + func (m *Manager) UndoAll(ctx context.Context, pluginID string) (int, error) + func (m *Manager) UndoSince(ctx context.Context, pluginID string, since int64) (int, error) + type Manifest struct + AddonCatalogs []StremioCat + Background string + BehaviorHints stremio.BehaviorHints + Catalogs []StremioCat + Description string + Ether *EtherBlock + ID string + IDPrefixes []string + Logo string + Name string + Resources stremio.Resources + Types []string + Version string + func ParseManifest(raw []byte) (Manifest, error) + func (m *Manifest) UnmarshalJSON(b []byte) error + func (m Manifest) AcceptsResource(name, typ, id string) bool + func (m Manifest) AddonRoles() []Capability + func (m Manifest) CatalogsOfType(typ string) []StremioCat + func (m Manifest) ConfigurationRequired() bool + func (m Manifest) EffectiveEther() *EtherBlock + func (m Manifest) HasCapability(c Capability) bool + func (m Manifest) HasResource(name string) bool + func (m Manifest) IsStremioOnly() bool + func (m Manifest) RuntimeKind() string + func (m Manifest) Serves(name, typ string) bool + func (m Manifest) ServesTV() bool + func (m Manifest) SpeaksStremio() bool + func (m Manifest) Stremio() stremio.Manifest + func (m Manifest) Validate() error + type MarkersMeta struct + Kinds []string + type MetadataMeta struct + Types []string + type NotificationMeta struct + Fields json.RawMessage + Formats []string + MaxLength int + SendTest bool + type PageMeta struct + Group string + Icon string + Key string + Label string + Route string + type PermissionIncreaseError struct + Added []string + func (e *PermissionIncreaseError) Error() string + type Permissions struct + Catalog string + Collections string + Folders string + Network []string + Secrets []string + Viewers ViewerPerms + type Preview struct + AddedPermissions []string + AlreadyInstalled bool + InstalledVersion string + Manifest Manifest + NeedsFolders bool + NeedsViewers bool + PermissionLines []string + StremioOnly bool + Verified bool + type RankingReport struct + Ranked int + Skipped int + Slow int + type RankingStepMeta struct + Budget json.RawMessage + DefaultPosition int + Editor json.RawMessage + Hint string + Key string + Label string + type Record struct + AutoUpdate bool + Enabled bool + ID string + InstalledAt time.Time + Kind string + Manifest Manifest + ManifestRaw json.RawMessage + Name string + PrevVersion string + RolesOff []Capability + Shadow bool + SourceKind string + SourceURL string + UpdateVersion string + UpdatedAt time.Time + Verified bool + Version string + type Request struct + Body json.RawMessage + Headers map[string]string + Locale string + Method string + Path string + PluginID string + Query map[string]string + type Response struct + Body json.RawMessage + Headers map[string]string + Status int + type RoleState struct + On bool + Role Capability + type RuleConditionMeta struct + Editor json.RawMessage + Key string + Label string + Operators []string + type Runtime interface + Call func(ctx context.Context, req Request) (Response, error) + Close func() error + type RuntimeDecl struct + Entry string + Kind string + Module string + type RuntimeFactory func(inst Installed) (Runtime, error) + func HostedRuntimeFactory(eng *wasm.Engine) RuntimeFactory + type ScheduleEntry struct + Call string + Every string + type SlotMeta struct + Action string + Key string + Label string + Route string + Slot string + type Source struct + Files map[string][]byte + ID string + Kind string + LAN bool + Manifest json.RawMessage + Pkg []byte + SHA256 string + URL string + Verified bool + Version string + type SourceMeta struct + Abilities []string + Class string + Limits json.RawMessage + type StremioCat = stremio.Catalog + type StremioExtra = stremio.Extra + type SubtitlesMeta struct + Formats []string + Languages json.RawMessage + type Summary struct + AutoUpdate bool + Capabilities []string + Enabled bool + Health string + HealthReason string + Host string + ID string + Icon string + InstalledAt int64 + Kind string + Name string + PrevVersion string + Roles []RoleState + Shadow bool + SourceKind string + StremioOnly bool + Summary string + UpdateVersion string + Verified bool + Version string + type TestResult struct + Details []string + Message string + OK bool + type ToolMeta struct + Description string + Destructive bool + InputSchema json.RawMessage + Name string + OpenWorld bool + ReadOnly bool + Title string + type ValidationError struct + Fields []FieldError + func (e *ValidationError) Error() string + type ViewerPerms struct + Identity string + WatchHistory string + WriteWatchState string