Licensing for Desktop Applications
Protect your Windows, macOS, and Linux applications with offline-capable, hardware-bound license validation.
Why offline validation matters for desktop apps
Your users don't always have internet access. Corporate firewalls, air-gapped environments, and unreliable connections are realities you need to handle.
- No startup delay
Validation happens locally in milliseconds, not network round-trips
- Works behind firewalls
No need to whitelist domains or punch holes in corporate networks
- Always available
Your app works even when our servers are down (not that they will be)
use licenz_core::{LicenseVerifier, License};
fn validate_on_startup() -> Result<(), LicenseError> {
// Public key embedded at compile time
let verifier = LicenseVerifier::new(PUBLIC_KEY)?
.with_hardware_binding();
// Load license from user's data directory
let license_path = dirs::data_dir()
.unwrap()
.join("MyApp/license.key");
let license = License::from_file(&license_path)?;
// Validate offline - no network call
let claims = verifier.verify(&license)?;
// Check expiration
if claims.is_expired() {
return Err(LicenseError::Expired);
}
// Enable features based on license
if claims.features.contains("pro") {
enable_pro_features();
}
Ok(())
} Hardware binding prevents license sharing
Lock licenses to specific machines using hardware fingerprints
CPU ID
Processor serial number
MAC Address
Network adapter ID
Disk Serial
Storage device ID
Custom
Your own fingerprint
Handling hardware changes
We use fuzzy matching to handle minor hardware changes (like adding RAM or replacing a network card). The license remains valid as long as the majority of hardware identifiers match. For major changes (new motherboard), users can request a license transfer through your customer portal.
Seamless trial to paid conversion
Common desktop app licensing patterns, all supported
Time-limited trial
Generate a 14-day trial license with full features. The expiration is cryptographically signed - users can't extend it by changing their system clock.
Feature-limited trial
Issue a perpetual license that only enables basic features. Pro features are unlocked when they purchase and activate a full license.
Subscription model
Issue monthly licenses that auto-renew. Your app checks for a new license file periodically, or prompts when the current one expires.
Perpetual with maintenance
One-time purchase for the current version. Include a maintenance expiry date - updates are free until then, after which they need to renew or keep using the old version.
Cross-platform support
Our Rust library compiles natively to all major desktop platforms
Windows
macOS
Linux
Ready to protect your desktop app?
Start your free trial today. No credit card required.