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.