2 unstable releases

Uses new Rust 2024

0.3.0 Mar 1, 2025
0.2.2 Feb 7, 2025

#183 in Audio

Download history 122/week @ 2025-02-05 23/week @ 2025-02-12 161/week @ 2025-02-26 11/week @ 2025-03-05

196 downloads per month

MIT license

210KB
4.5K SLoC

clap-clap

CI

A CLAP plugin runtime. Very much WIP. 🚧

Documentation is available at docs.rs.

Goals

  • Provide a dynamical runtime environment to access CLAP API from safe Rust.
  • Follow closely CLAP module structure and terminology.
  • Build a plugin testbed and a debugging platform.

New minor versions, 0.x.0 will be published once a month throughout 2025. The stable version: 1.0.0-beta planned for Sep 2025.

Already implemented extensions:

Example (plugin template)

You can find the source code of a simple plugin template in: ./examples/plugin_template.rs.

To compile the sources, install Rust 1.85.0 or later (for the Rust 2024 edition) and clone the repository:

git clone https://github.com/mira-merkell/clap-clap

Build the example plugin with:

cargo build --example plugin_template --release

and look for the compiled dynamical library in target/release/examples/. The name of the library is OS-specific:

  • Linux: libplugin_template.so
  • Windows: plugin_template.dll
  • macOS: libplugin_template.dylib

Copy the file to where your DAW can find it and rename it to: plugin_template.clap.

Installation

Simply add this library as a dependency of your crate:

cargo add clap-clap

A CLAP plugin is a dynamical library with C ABI and a symbol: clap_entry visible to the host to load the plugin. To compile your plugin with the right ABI, specify the crate type in your Cargo.toml:

# Your crate's Cargo.toml:
[lib]
crate-type = ["cdylib"]

To export the entry symbols, use the provided clap_clap::entry! macro. The macro must be invoked exactly once in the entire plugin code, but you can specify multiple types as arguments. For example, assuming MyPlug and MyPlugToo implement the trait Plugin, you can export them with:

// Your crate's lib.rs:
clap_clap::entry!(MyPlug, MyPlugToo);

This will also build a plugin factory that a CLAP host can use to crate instances of your plugins. The bundle will be a one compiled artefact that you can install as a *.clap file.

Contributing

All contributions are welcome!

Help with writing documentation and examples will be much needed in the summer. Alternatively, if you could set aside a few hours in late 2025 to help with testing sample plugins before the stable release, that would be greatly appreciated. 🎈

Credits and License

Copyright (c) 2025 ⧉⧉⧉

This software is distributed under the MIT License. See LICENSE for more information.

Online repository available at: https://github.com/mira-merkell/clap-clap

Maintainers

Report bugs or submit patches via GitHub Issues.

No runtime deps