# Diffuse **Construct your audio player by composing web components.** Diffuse provides a range of custom elements: audio input, data output, metadata & artwork processing, audio playback, a queue system, and much more. It is also aimed at consumers, providing themes and facets, preconfigured component compositions; while simultaneously trying to be [malleable software](https://www.inkandswitch.com/essay/malleable-software/). More information on the [website](https://elements.diffuse.sh/latest/). ## Developer usage You can either consume the Diffuse library via the [deployed instance](https://elements.diffuse.sh/latest/) (the listed elements link to Javascript files) or the [Javascript package](https://jsr.io/@toko/diffuse). From there you can use the custom elements as with any other custom DOM element, by writing HTML or creating a `Class` instance. ```html ``` ```js import QueueEngine from "@toko/diffuse/components/engine/queue/element.js" const queue = new QueueEngine() queue.setAttribute("group", "facets") document.body.append(queue) ```` ## Build it yourself Install [Deno](https://docs.deno.com/runtime/getting_started/installation/). ```shell deno run gen:defs:types deno run build # or deno run serve ``` Diffuse is built with: - [Deno](https://deno.com) - Web components (custom elements) - Web workers (also: shared + service workers) - Signals (currently [alien-signals](https://github.com/stackblitz/alien-signals), but hopefully [TC39](https://github.com/tc39/proposal-signals) in the future) - [`lit-html`](https://lit.dev/docs/libraries/standalone-templates/) - [`music-metadata`](https://github.com/Borewit/music-metadata) - [Lume](https://lume.land) & [ESBuild](https://esbuild.github.io)