Floe is a CLAP, VST3 and AU plugin for Windows, macOS, and Linux. It loads and plays sample libraries in the Floe format. Visit floe.audio for more information about the project.
See also our roadmap section on our website, and our FAQ document.
This project is licensed under GPL version 3 or later. See the LICENCES folder for the full licence text. We follow the REUSE recommendations for this repository.
Supported targets are:
- Windows (x86_64)
- macOS (x86_64 and arm64)
- Linux (x86_64)
We do all our building inside our Nix development environment which ensures the correct Zig version and the small number of dependencies are available. We build Windows binaries via cross-compilation. To follow our process:
- Use Linux or macOS
- Install Nix and enable Flakes
- Run
nix developin the root of the project to enter a shell with all dependencies - Run
zig build -Dtargets=native -Dbuild-mode=development. Alternative options instead ofnativeare:linux,windows,mac_arm,mac_x86 - Binaries are created in the zig-out directory
However, it's probably possible to build without Nix, even on Windows. You need to have Zig 0.14.0 installed. Run zig build to build.
Important things to note:
- Building outside the Nix environment is largely untested. You may have problems with macOS SDK versions.
- We don't currently support cross-compiling to Linux. You need to build Linux binaries on a Linux system.
Building on Linux, you will need libraries for curl, x11, OpenGL and GLX (handled automatically in the Nix environment); these are also normally installed by default on your distro. Runtime dependencies are xdg-open and zenity.
Floe is written in C++ and we use Zig for the build system. Eventually, we're considering using Zig for the entire codebase.
We strive for handcrafted, detail-focused, performant code. The goal is to sustainably maintain a long-term codebase that is a joy to work on and results in a reliable, fast, professional product. With that in mind, we chose not to use any framework; just a handful of third-party libraries for specific tasks. We also don't use the C++ standard library, and only sparingly use the C standard library. Instead, we take a hands-on approach to as much as possible: memory management, data structure design and error handling. We have full control to tailor the code to our detail-focused design.
Good developer tools is a priority. Our build system supports clangd by emitting a compile_commands.json file. Additionally, we have good support for stacktraces, valgrind, clang-tidy, clang-format, cppcheck, etc. And because we use only Zig for the build system, we can cross-compile to other platforms and we can wholeheartedly use Clang-specific language extensions and features from the latest C++ language standards.
Thorough continuous testing and deployment is also a priority. We want to provide frequent backwards-compatible updates, and so need a way to ensure we don't break anything.
Some parts of the codebase need some love (I'm looking at you GUI and audio processing). We're working on it.
Floe's website is in the website folder and it's built with Docusaurus. We have 2 release channels: stable and beta. We use Docusaurus' versioning feature to maintain separate documentation for each channel. website/docs contains the beta documentation, and website/versioned_docs/version-stable contains the stable documentation. We use the command just website-promote-beta-to-stable to promote the beta website to stable.
Feel free to use the discussions on GitHub for questions, feedback, and ideas. Report bugs to the Github issue tracker. Also, FrozenPlain has a Floe section on their forum.