New: Offline-first licensing with cryptographic validation. Learn more
Minor Release | February 1, 2025

v1.1.0 - Python Bindings & Enhanced Hardware Binding

This release adds Python bindings, configurable hardware binding weights, and several quality-of-life improvements.

Added

7 changes
  • Python bindings via PyO3 - `pip install licenz`

  • Configurable hardware binding weights for each component

  • License grace period support for smooth renewals

  • Webhook notifications for license events

  • Batch license generation in the web dashboard

  • License export to CSV/JSON formats

  • ARM64 builds for Apple Silicon and Raspberry Pi

Changed

4 changes
  • Improved error messages with actionable remediation steps

  • Hardware fingerprint algorithm now more resilient to minor changes

  • Web dashboard redesigned with improved navigation

  • API rate limits increased for Enterprise plans

Fixed

4 changes
  • License validation now correctly handles leap seconds

  • Hardware binding no longer fails on VMs with incomplete SMBIOS data

  • CLI `activate` command now properly handles spaces in file paths

  • Web dashboard session timeout now respects user preferences

Security

2 changes
  • Updated cryptographic dependencies to latest versions

  • Added additional entropy sources for key generation on embedded systems

We’re excited to release Licenz v1.1.0, featuring Python bindings and enhanced hardware binding capabilities.

Python Bindings

You can now use Licenz directly from Python:

pip install licenz
from licenz import LicenseVerifier, License

verifier = LicenseVerifier(public_key)
verifier.with_hardware_binding()

license = License.from_file("license.key")
claims = verifier.verify(license)

print(f"Licensed to: {claims.licensee}")
if "enterprise" in claims.features:
    enable_enterprise_features()

The Python bindings use the same Rust core, so you get identical security guarantees with Pythonic ergonomics.

Configurable Hardware Binding

You can now customize hardware binding weights for your specific deployment environment:

let verifier = LicenseVerifier::new(PUBLIC_KEY)?
    .with_hardware_binding(HardwareBindingConfig {
        cpu_weight: 30,
        motherboard_weight: 25,
        disk_weight: 20,
        mac_weight: 15,
        hostname_weight: 10,
        threshold: 70,
    });

This is particularly useful for:

  • VMs where hardware identifiers may be less stable
  • Containers where you might want to bind to host characteristics
  • Industrial environments where components are frequently replaced

License Grace Periods

Enterprise deployments can now configure grace periods for license expiration:

let verifier = LicenseVerifier::new(PUBLIC_KEY)?
    .with_grace_period(Duration::days(7));

During the grace period, licenses continue to work but validation returns a warning, giving users time to renew without disrupting operations.

Upgrade Notes

This is a backward-compatible release. Existing licenses continue to work without modification.

To upgrade:

Rust:

licenz = "1.1.0"

Python:

pip install --upgrade licenz

CLI:

curl -fsSL https://get.licenz.dev | sh

What’s Next

Coming in v1.2.0:

  • Go bindings
  • C/C++ bindings
  • Enhanced webhook payloads
  • License usage analytics

Thank you for your continued feedback and support!

Ready to upgrade?

Get started with the latest version of Licenz today.