1 unstable release

0.0.0 Mar 23, 2023

#2 in #festival

Used in festival-gui

MIT license



Music player for Windows/macOS/Linux.






For context on these graphs (there are always trade-offs), see cmp/.

Input data:

  • 135 Artists
  • 500 Albums
  • 7000 Songs
  • 170GB total disk space


Frontend Released Description
festival-gui 🔴 egui GUI
festival-web 🔴 WASM version of egui GUI
festivald 🔴 Daemon (mpd-like)
festival-cli 🔴 CLI client that connects to festivald


For a broad overview of Festival's internals, see src/.

Documentation is also available on docs.rs.

The crate festival is being squatted, so instead, Festival's original name, shukusai, is the name used to represent Festival internals.

祝祭/shukusai translated means: Festival.

In documentation:

  • shukusai specifically means Festival's internals
  • Festival means a frontend OR the project as a whole


General Info

You need cargo.

Building in this repo currently means building festival-gui. The produced binary is named festival.

There are 30 unit tests, you may want to run:

cargo test

before attempting a full build.


The pre-compiled Linux binaries are built on Debian 11, you'll need these packages to build:

sudo apt install build-essential cmake libgtk-3-dev

After that, run:

cargo build --release


On macOS, if you want the binary to have an icon, you must install cargo-bundle.

After that, run:

cargo bundle --release

This bundles Festival into Festival.app, the way it comes in the pre-built tars for macOS.


cargo build --release

There is a build.rs file in the repo solely for Windows-specific things:

  1. It sets the icon in File Explorer
  2. It statically links VCRUNTIME140.dll (the binary will not be portable without this)


All of Festival is licensed under the MIT License.

All of the fonts Festival uses:

Font License
Adobe Source Code Pro OFL-1.1
Adobe Source Han Sans OFL-1.1
JuliaMono OFL-1.1
Emoji Icon Font MIT
Noto-Emoji OFL-1.1
Hack MIT
Ubuntu Ubuntu Font License

All of the libraries Festival (directly) uses:

Library Purpose License
anyhow Error handling MIT & Apache-2.0
chrono Time formatting MIT & Apache-2.0
crossbeam_channel Thread message passing MIT & Apache-2.0
disk Saving to disk MIT
egui GUI MIT & Apache-2.0
egui_extras GUI MIT & Apache-2.0
eframe GUI MIT & Apache-2.0
egui-notify GUI MIT
env_logger Logging MIT & Apache-2.0
fast_image_resize Image processing MIT & Apache-2.0
image Image processing MIT
infer File MIME detection MIT
lazy_static Lazy static macro MIT & Apache-2.0
lofty Audio metadata parsing MIT & Apache-2.0
log Logging MIT & Apache-2.0
notify Filesystem watching Artistic License 2.0 & CC Zero 1.0
mime_guess File MIME detection MIT
rand RNG MIT & Apache-2.0
rfd Native file dialog MIT
serde (De)serialization MIT & Apache-2.0
serde_bytes (De)serialization MIT & Apache-2.0
souvlaki Native media controls MIT
strsim String similarity MIT
Symphonia Audio demuxing, decoding MPL-2.0
readable Human readable data MIT
rolock Read only lock MIT
walkdir Recursive PATH walking MIT & Unlicense


~1M SLoC