|
5 days ago | |
---|---|---|
assets | 1 year ago | |
containers | 1 year ago | |
crates | 5 days ago | |
.codespellignore | 9 months ago | |
.gitignore | 1 year ago | |
.justfile | 4 months ago | |
.markdownlint-cli2.yaml | 9 months ago | |
.pre-commit-config.yaml | 2 weeks ago | |
.prettierrc.yaml | 6 months ago | |
.rustfmt.toml | 9 months ago | |
Cargo.lock | 1 week ago | |
Cargo.toml | 4 months ago | |
Cross.toml | 1 year ago | |
LICENSE.txt | 1 year ago | |
README.md | 2 months ago | |
ROADMAP.md | 2 months ago |
README.md
Moiré
Moiré will be a new DJ application written in Rust with a DAW-like timeline interface. Refer to the roadmap.
Come say hi on the Zulip chat.
A moiré is "an interference pattern produced by overlaying similar but slightly offset templates".
XKCD comic by Randall Munroe licensed under Creative Commons Attribution-NonCommercial 2.5 License.
Moiré is licensed under the GNU General Public License version 3 or later.
Building & running
Moiré is written in Rust and has few C dependencies.
JACK is required on all operating systems. On Windows and macOS, libjack
does not need to be available at build time, only at runtime. On Linux, Pipewire JACK can be used
instead of JACK1 or JACK2 (pipewire-jack-audio-connection-kit-devel
package on Fedora).
JACK/Pipewire needs to be running before running Moiré.
On Linux, at least one of the x11
or wayland
Cargo features must be enabled. Both are enabled
by default. The x11
feature requires the xcb library (libxcb-devel
package on Fedora).
On Linux, fontconfig is required. Also, an XDG Desktop Portal implementation that supports the
org.freedesktop.portal.FileChooser
D-Bus API needs to be available at runtime. The KDE, GNOME,
and GTK XDG Desktop Portal backends provide this, but the wlroots backend does not. The wlroots
backend can be installed simultaneously with another backend that provides the FileChooser
API.
After these dependencies are installed, building is as simple as:
cargo build
and running is as simple as:
cargo run
Development
Various development tasks are automated using just recipes
that are configured in .justfile
.
Use Cargo for installing the just
command:
cargo install just
Get started by installing (or updating) the dev tools required for the project:
just setup
List the available recipes:
just
Upgrade all dependencies periodically:
just upgrade
Check that all crates can be built independently after modifying dependencies:
just check
Each commit should pass the pre-commit hook checks:
just pre-commit
Goals
- Equally usable as a casual music player application on a phone in a pocket or a full fleged DJ software on a laptop
- Support features common on commercially available contemporary DJ controllers from popular manufacturers
- Eventually support timecode vinyl control
- Eventually crossplatform (Linux, Windows, potentially Android) but focusing on Linux first (desktop and mobile Linux)
- Strive for designs that work for a wide variety of use cases before resorting to adding options
- Actively work to solve problems upstream and collaborate with other projects
- Purely FOSS without proprietary dependencies beyond operating system APIs
- Use FOSS infrastructure as much as practical (exceptions can be made, for example, for building the application on proprietary operating systems)
- Consensus-based decision making and cooperative, nonhierarchical governance. Irreconcilable disagreements will be decided promptly by voting. Details will be worked out as more people join.
Non-goals
- Video playback, mixing, manipulation, or generation. Communication with external video applications over standard protocols would be welcome though.
- Imitating other DJ software verbatim. This is its own application. Proposals will be evaluated on their own merits, not simply because another software does it that way.
- Antifeatures (functionality that acts against the interest of the user), for example DRM. Antifeatures also include interacting with any network services such as music streaming services whose terms of service would require implementing artificial restrictions.