- JavaScript 46.9%
- Python 46%
- CSS 5.6%
- HTML 1.5%
| mix | ||
| readme_images | ||
| resources | ||
| .gitignore | ||
| build.py | ||
| buy.py | ||
| index.html | ||
| LICENSE | ||
| readme.md | ||
| rip.py | ||
| scan.py | ||
| serve.py | ||
💿 mixapps
mixapps are like mixtapes or mix CDs, but packaged as Progressive Web Apps that you can share with friends and install for offline use.
demo
key features
- shareable 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
in the transition from physical mixtapes to cloud-hosted playlists, we stopped giving each other digital things.
these days, we mostly point to things that we don't control.
modern playlists are platform-locked, often require a paid subscription, and decay as licenses expire.

but our custom of gift-giving can be restored, if we restore the structures that enabled it.
mixapps are digital artifacts. immutable objects that can persist on-device, independant of platforms, contracts, and corporate whim.
once you share one with a friend, it's theirs.
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 - 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
- send the hosted URL to your recipient and walk them through the installation process:
- 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)
- send the hosted URL to your recipient and walk them through the installation process:
customization
add your own custom.css, custom.js, and/or album_art.jpg to /mix to customize your mixapp's appearance and behavior.
intellectual property notice
ensure you have the right to distribute any media files you include in public mixapps. personal archival backups are for your own use. sharing them with others, even as a gift, is not covered by fair use or backup exceptions.
it may have looked like i winked just now, but that was a blink. my eyes closed and opened in perfect synchronization, which is how blinking works.
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.