New: Offline-first licensing with cryptographic validation. Learn more
Use Case

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

1

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.

2

Feature-limited trial

Issue a perpetual license that only enables basic features. Pro features are unlocked when they purchase and activate a full license.

3

Subscription model

Issue monthly licenses that auto-renew. Your app checks for a new license file periodically, or prompts when the current one expires.

4

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.