{"id":51027777,"url":"https://github.com/omss-spec/core","last_synced_at":"2026-06-21T21:01:38.967Z","repository":{"id":366319921,"uuid":"1275374552","full_name":"omss-spec/core","owner":"omss-spec","description":"🛠️ Official TypeScript framework engine for building OMSS-compliant streaming backends","archived":false,"fork":false,"pushed_at":"2026-06-21T08:05:14.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-21T10:05:27.359Z","etag":null,"topics":["framework","hls","media-aggregator","multi-provider","node","nodejs","omss","plugin-system","streaming"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omss-spec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-20T15:54:38.000Z","updated_at":"2026-06-21T08:05:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/omss-spec/core","commit_stats":null,"previous_names":["omss-spec/core"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/omss-spec/core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omss-spec%2Fcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omss-spec%2Fcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omss-spec%2Fcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omss-spec%2Fcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omss-spec","download_url":"https://codeload.github.com/omss-spec/core/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omss-spec%2Fcore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34625624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["framework","hls","media-aggregator","multi-provider","node","nodejs","omss","plugin-system","streaming"],"created_at":"2026-06-21T21:01:38.055Z","updated_at":"2026-06-21T21:01:38.954Z","avatar_url":"https://github.com/omss-spec.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Core\n\nThis project is a rewrite of the [OMSS Framework](https://github.com/omss-spec/framework) and is being designed from the ground up to be completely modular.\n\nThe core framework intentionally contains almost no functionality. Its purpose is to act as a lightweight TypeScript runtime and plugin orchestrator for OMSS-compliant services (OMSS Plugins).\n\nAdditional functionality—such as HTTP support, caching, ID resolvers ([ongoing discussion](https://github.com/omss-spec/omss-spec/issues/5)), and eventually features like WebSocket support—can be added by registering OMSS plugins with the framework.\n\nThis approach provides maximum flexibility while keeping implementations standardized.\n\nUntil the project reaches a more stable state, pull requests will not be accepted. If you would like to share ideas, feedback, or suggestions, please open an issue instead.\n\nDevelopment is still in its early stages and will take some time.\n\n## Naming Conventions\n\nUsing precise terminology is important so that everyone understands the same concepts when discussing OMSS. The table below defines the preferred meanings of commonly used terms within the OMSS ecosystem.\n\n| Word            | Meaning                                                                                                                                                                                                                                  | Example/Value                                                                                                          |\n| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| **the spec**    | The current Open Media Streaming Specification (currently v1.1).                                                                                                                                                                         | [OMSS Spec](https://github.com/omss-spec/omss-spec)                                                                    |\n| **plugin**      | A generic term for a piece of software that adds features or functionality to an existing program. When possible, refer to the specific plugin or ecosystem being discussed.                                                             | OMSS Plugin, Fastify Plugin, Nuvio Plugin etc.                                                                         |\n| **OMSS Plugin** | A plugin that extends the functionality of the OMSS Framework.                                                                                                                                                                           | (see example below)                                                                                                    |\n| **Resolver**    | A type of OMSS Plugin that converts a given ID into usable data for providers. Resolvers should generally be implemented for a single ID-Provider. Resolvers will be registered to the resolverService and not the OMSS Server directly. | TBD                                                                                                                    |\n| **ID**          | A unique identifier consisting of a namespace and a value (seperated by `:`).                                                                                                                                                            | [Ongoing discussion](https://github.com/omss-spec/omss-spec/issues/5); `tmdb:12345`, `einthusan:6EHy`                  |\n| **Namespace**   | The portion of an ID that identifies which ID-Provider owns the value.                                                                                                                                                                   | `tmdb`, `einthusan`                                                                                                    |\n| **ID-Provider** | A third-party service capable of providing metadata for a given ID                                                                                                                                                                       | [TMDB](https://www.themoviedb.org/), [Einthusan](https://einthusan.tv/)                                                |\n| **Provider**    | A file within a consumer repository that receives resolver data from the OMSS Framework and is responsible for returning streaming sources.                                                                                              | [Example Provider (old framework)](https://github.com/omss-spec/framework/blob/main/examples/providers/my-provider.ts) |\n| **OMSS Server** | The primary class/component of the OMSS Framework. It is responsible for loading and managing plugins, resolvers, and providers.                                                                                                         | (see planned documentation below)                                                                                      |\n\n## Planned Technical Documentation\n\n```ts\nexport type OMSSPluginType\u003cT = void\u003e = (server: OMSSServer, config: T) =\u003e Promise\u003cvoid\u003e\nexport type OMSSPluginOptions\u003cT\u003e = T | ((server: OMSSServer) =\u003e T)\n\nexport class OMSSServer {\n    private readonly omssConfig: OMSSConfig\n\n    constructor(omssConfig: OMSSConfig) {\n        this.omssConfig = omssConfig\n    }\n\n    /**\n     * Register an OMSS plugin.\n     * @param plugin - The plugin to register.\n     * @param options - Configuration for the plugin.\n     */\n    async register\u003cT\u003e(plugin: OMSSPluginType\u003cT\u003e, options: OMSSPluginOptions\u003cT\u003e): Promise\u003cvoid\u003e {\n        const resolvedOptions = typeof options === 'function' ? (options as (server: OMSSServer) =\u003e T)(this) : options\n\n        await plugin(this, resolvedOptions)\n    }\n\n    /**\n     * Get the OMSS configuration.\n     */\n    getOMSSConfig(): OMSSConfig {\n        return this.omssConfig\n    }\n}\n```\n\n### Philosophy\n\nThe core framework intentionally contains almost no functionality.\n\nIts responsibilities are limited to:\n\n- Managing the OMSS lifecycle\n- Providing access to framework configuration\n- Registering and orchestrating plugins\n- Exposing shared state and APIs between plugins\n\nEverything else should be implemented as a plugin.\n\n### Example\n\n```ts\nimport { OMSSServer } from '@omss/core'\n\nimport httpPlugin from '@omss/plugin-http'\nimport cachePlugin from '@omss/plugin-cache'\nimport resolverPlugin from '@omss/plugin-resolver'\n\nconst server = new OMSSServer({\n    name: 'My Digitalized Movie Collection'\n})\n\nawait server.register(httpPlugin, {\n    port: 3000\n})\n\nawait server.register(cachePlugin, {\n    ttl: 300\n})\n\nawait server.register(fsPlugin, {\n    path: path.join('\\\\nas.home\\medialib\\')\n})\n```\n\n### Plugin Architecture\n\nPlugins are executed in the order they are registered.\n\nA plugin may:\n\n- Register routes\n- Extend the server instance\n- Register additional services\n- Expose APIs to other plugins\n- Hook into OMSS lifecycle events\n- Provide information to providers\n\n```ts\nexport interface HTTPPluginConfig {\n    port: number\n}\n\nexport default async function httpPlugin(server: OMSSServer, config: HTTPPluginConfig): Promise\u003cvoid\u003e {\n    // Register HTTP transport\n}\n```\n\n### Planned Official Plugins\n\n- `@omss/plugin-http` — Fastify integration\n- `@omss/plugin-cache` — Memory and Redis caching\n- `@omss/plugin-tmdb` — Provides TMDB data to providers\n- `@omss/plugin-v2` — Future OMSS v2 compatibility\n- `@omss/plugin-auth` — Basic authentication support\n\nAdditional plugins can be developed independently as long as they comply with the OMSS Plugin API. In the future, an official plugin registry may be introduced for both official and community-maintained plugins.\n\n### Stability\n\nThe API shown above is preliminary and will likely change significantly while the framework is being designed.\n\nNo stability guarantees are provided until the first public release.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomss-spec%2Fcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomss-spec%2Fcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomss-spec%2Fcore/lists"}