About this project

Diffuse is a music player that connects to cloud and distributed storage. It is built as a collection of framework-agnostic custom DOM elements (web components) that let developers assemble an audio player, process and browse audio metadata, list audio files and streams from various sources, APIs and servers, and define how user data is saved or synced. Key parts of the project: - Custom elements: reusable web components for building players, metadata handling, source listing and user-data persistence. - HTML loader: loads "interfaces" from the local user-data cache, the default Diffuse set, HTTP(S) URLs, or AT Protocol URIs. Interfaces receive optional "features" called facets, also loaded from the local cache. - The foundation: a default configuration of the custom elements used across the default facets. Elements can communicate across tabs and frames via a `group` attribute. - Lexicons: data schemas in the form of atproto lexicons, stored in the `lexicons` directory. The goal is cooperative, malleable software. More details are on the project website. Developer usage: the library can be consumed either through the deployed instance (elements link to JavaScript files) or via the JavaScript package on JSR. Custom elements are used like any other DOM element, either in HTML or by instantiating a class. An example shows loading the queue engine element via a script tag or importing it and appending it to the document body with a `group` attribute. Building from source requires Deno. Commands include generating type definitions, building, and serving. The stack includes Deno, web components, web workers (shared and service workers), signals (currently alien-signals, with hope for the TC39 proposal), lit-html, music-metadata, Lume and ESBuild.