💿 mixapps
mixapps are like mixtapes or mix CDs, but packaged as Progressive Web Apps that you can install for offline use.
demo
worn grooves ↗
(public domain recordings)
key features
- installable mixes that work offline on iOS, Android, Windows, MacOS, and Linux
- support for
mp3,m4a,ogg,flac, andwavaudio formats - highly customizable interface (just add CSS!)
own something and be happy
modern playlists are platform-locked, often require a paid subscription, and decay as licenses expire.
these days, we mostly point to things that we don't control.

mixapps are digital artifacts. immutable objects that can persist on-device, independent of platforms, contracts, and corporate whim.
once you install one, it's yours.
[!IMPORTANT] mixapps make it easy to host audio on the public internet. hosting content you don't have the right to distribute is copyright infringement, even when shared privately with a friend or framed as a gift. fair use and backup exceptions cover personal copies, not public hosting.
before uploading, ensure you have the right to distribute the files you include in
/mix. this can include your own recordings, public-domain works, creative commons releases, or material you've licensed from the rights holder.
quickstart
-
serve it
- run
./serve.pyto start a development server. while the server is running, you can:- add new tracks by moving audio files into the
/mixdirectory, dragging them into the browser window, running./rip.pyto rip tracks from a physical CD, or running./buy.pyto buy tracks on iTunes (both are fine to use locally; check distribution rights before hosting publicly) - reorder tracks by dragging them up or down in the list
- delete tracks with
shift + click
- add new tracks by moving audio files into the
- run
-
build it
- once you're happy with your mix, run
./build.pyand follow the interactive prompts to generatemanifest.jsonandservice-worker.js, which enable PWA installation and offline functionality.
- once you're happy with your mix, run
-
ship it
- upload the entire project directory to any static web host with HTTPS support (GitHub Pages, Neocities, AWS S3, etc.)
-
share it
- once it's hosted, anyone can install your mixapp by opening the URL and following their browser's PWA installation steps:
- iOS (Safari): tap
···→Share→View More→ scroll down to reveal and tapAdd to Home Screen→Add - Android:
- Firefox: tap
⋮→··· More→ Add to Home screen → Add to home screen - Chrome: tap
⋮→ Add to Home screen → Install
- Firefox: tap
- for detailed PWA installation steps for your browser/OS, click here.
- iOS (Safari): tap
- after the initial download and cache, mixapps work completely offline and behave like native applications ⤵

(pictured: integration with iOS lockscreen controls)
- once it's hosted, anyone can install your mixapp by opening the URL and following their browser's PWA installation steps:
customization
add your own custom.css, custom.js, and/or album_art.jpg to /mix to customize your mixapp's appearance and behavior.
licenses
this project is licensed under the GNU General Public License v3.0.
the Basteleur font by Keussel (distributed by Velvetyne) is licensed under the SIL Open Font License, version 1.1.