imvox is a modular runtime built in Rust, scoped specifically for music and media applications. The core idea is to keep it lightweight and flexible, split into three main parts living in a single Cargo workspace.
imvoxcore is the absolute foundation — no_std, with no standard library dependencies. It defines only the basic traits and interfaces a plugin must implement. No logic, no hardcoded behavior — just the contract between the runtime and any loadable module.
imvoxloader handles finding and loading dynamic libraries (.so on Unix, .dylib on macOS, .dll on Windows) at runtime using libloading. It loads a plugin, verifies it conforms to the ABI defined in imvoxcore, and hands it over to the core.
imvoxcli is the command-line interface — parses user input like load /path/to/plugin.so or run, and calls the appropriate loader functions. Future plans include a GUI frontend built with egui.
The philosophy: imvox is not a full application, but a bus or orchestrator. Real functionality comes from independent modules communicating through a shared bus. For example, a framebuffer bus could have one module for text-based interface and another for graphical — keeping the core minimal.
A opm package manager is planned for easy installation and management of module dependencies.