For Developers
Deploy a zkApp on Mina that handles licensing for your software. Set your price, payment address, and we generate the smart contract. Terms and conditions, compiled.
📄 Read the Docs · SDK Reference · Listing Requirements · 📊 Vendor Dashboard
Step 1 of 4
This wallet will be the zkApp's admin key — it can update pricing and withdraw funds. Keep it safe.
Step 2 of 5
Your legal identity, billing details, and Terms of Service acceptance are collected in one step and signed with a single wallet signature. Required to meet legal obligations for tax reporting and vendor identification. On devnet, you're approved automatically.
Required. Bound cryptographically to your ToS acceptance signature. Not shown on your public listing.
Step 3 of 5
zkappUri that buyers check against your domain from a Mina explorer (see Trust anchor). Set only once during init. This domain also becomes the origin for the Terms, Privacy, Refund policy, Buy, Renew, Refund, and Verifier URLs below — each of those fields is a path only, so buyers can trust that every SDK endpoint lives at the same origin as your listing.
Shown to buyers before purchase (EU Consumer Rights Directive Art. 6). Terms, Privacy, and the Refund/withdrawal policy govern your product and must point at pages you publish. Enter paths only — the domain comes from App Website above. If you leave both App Website and these fields blank, the marketplace uses the zklicensing.com defaults.
Where the SDK renders buy / renew / refund pages and where the verifier lives. Enter paths only — the domain always comes from App Website above, so buyers can trust that the endpoint origin matches the vendor origin they see in the marketplace listing. If you leave App Website blank, the marketplace falls back to zklicensing.com-hosted buy.html, renew.html, refund.html, and api/verify — those are devnet only, so for mainnet you must set App Website. The marketplace appends ?app=<zkAppAddress>&network=<net> at link time.
Step 4 of 5
Cap how many devices can hold an activation token for the same license at the same time. Defaults to 0 (unlimited); set any positive number to cap. Enforced by the verifier when a device proves ownership; users can log a device out via the SDK, or re-prove to reset all sessions.
Hard cap on how many devices your buyer can bind to a single license — enforced on-chain by the circuit itself, not by your server. Buyers sign every bind/unbind with their passphrase-derived key; nobody else (not you, not the platform) can add or remove a device. Defaults to 0 (binding disabled); max 5 (the on-chain slot array is fixed-width). See Device binding docs for the full non-custodial model and its limits.
Step 5 of 5
Terms and conditions, compiled. Every license deployed on zkLicensing includes the following on-chain protections, enforced by the shared zkApp circuit:
These terms are compiled into the verification key; they apply to every deployment and cannot be toggled per-app.
Sign your App ID to prove you control the vendor address.
Waiting for your zkApp to land on Mina Devnet.
Inclusion typically takes 45 seconds, but can be up to 20 minutes in slow blocks. You can read the integration docs below while you wait — there's nothing more to sign.
buy.html?app=<your zkApp address>). Renewals work the same way against renew.html. See Buying and renewing by zkApp address.
| Tier | Price | Duration |
|---|
packages/sdk/examples/ to try the buy / renew / refund examples.
npm install zklicensing and follow the SDK README.apps.json above into packages/sdk/examples/ as a starting point. See the SDK README. Optional on devnet, mandatory on mainnet.