Skip to content


Repository files navigation

Project logo

A pinboard for audiovisual media

Joybox makes it simple to play media from multiple platforms in the same place. Read the guide for more details.

Open app


The project follows a Universal folder structure and is a large collection of mostly small modules or functions that are put together using Svelte and Rollup. With the exception of a few 'global' or 'magic' things such as the localization function OLSKLocalized, most resources used by a module should be in the same folder or referenced by path name.

Routing, rendering markdown content, and serving pages is done via a Node.js server (usually configured in the controller.js files).

Development Setup

(For a deeper dive, watch the tutorial).

Install Node.js and npm, then:

npm run setup

This should create an .env file if there is none. If you encounter errors referring to this file, you can find missing variables in .env-sample.


Start the Rollup process to build and reload automatically

npm run watch

Start the Node.js server to view in the browser

npm start

It should be accessible at http://localhost:3000.


See Testing logic and interfaces for a tutorial.

Run logic tests

npm test 

Run interface tests

npm test ui

To filter interface test paths by string:

npm test ui match=detail

To filter interface test paths by JavaScript regular expressions:

npm test ui match='/(vitrine|guide)/'


Help me keep creating projects that are public, accessible for free, and open-source.

Become a backer


The code is released under a Hippocratic License, modified to exclude its use for surveillance capitalism and also to require large for-profit entities to purchase a paid license.


Feel free to reach out on Mastodon or Twitter.