Audio plugins
License your VST, AU, and CLAP plugins
Lock each license to a machine, so keys cannot be shared across studios. A single check when your plugin opens confirms the license. Works with JUCE, iPlug2, or any framework.
// Validate on plugin instantiation
// Use any HTTP library (cURL, JUCE URL, WinHTTP)
std::string body = R"({
"license_key": ")" + userKey + R"(",
"plugin_slug": "my-synth"
})";
auto response = httpPost(
"https://api.licensr.app/v1/license/validate",
{"Content-Type: application/json",
"Authorization: Bearer " + PLUGIN_API_KEY},
body);
auto json = parse(response);
if (!json["valid"].get<bool>()) {
disableAudioProcessing();
}Works with any audio framework
Why seat-mode for audio plugins
Machine-locked activations
Each seat binds to a unique machine identifier. A producer with 2 studio machines uses 2 of their 3 seats. Sharing the key with a friend hits the cap.
Fast validation, no latency in the audio thread
Call validate once on instantiation (editor open). Cache the result locally. Never call from the real-time audio callback.
Graceful offline handling
Fetch a short-lived, signed license token while online and verify it locally (fully offline, no SDK) against the per-plugin JWKS. Refresh it on a periodic heartbeat; only block once the token expires beyond your chosen TTL.
Branded customer portal
When a producer gets a new machine, they sign in on a branded page with your logo and deactivate the old seat themselves. No support ticket needed.
Subscription or perpetual
Sell monthly or annual subscriptions for ongoing updates, or one-time and lifetime purchases. The license state machine handles both.
Official SDK
Official C++ SDK: zero dependencies, audio-thread safe
CMake FetchContent from github.com/tekunodev/licensr-cpp (pin a release tag when one is published). Async validate/activate on a background worker; Client::snapshot() is the real-time read path that never blocks or allocates. Optional JUCE module ships a ready-made activation UI.
#include <licensr/licensr.h>
licensr::ClientConfig config;
config.api_key = "pk_live_...";
config.plugin_slug = "my-synth";
licensr::Client client(config);
client.validate(userKey, [](auto result) {
if (result.ok() && result.value().valid) {
unlockFullFeatures();
}
});
// Audio thread: never blocks, never allocates
// if (auto s = client.snapshot()) use(s->valid);Ready to license your audio plugin?
Free tier available. Drop in the C++ SDK, or call the REST API directly; same contract either way.

