Developer Docs
Add privacy-preserving ZK verification to any app. Client-side Groth16 proofs — secrets never leave the device.
Choose Your Integration
Three ways to add ZK verification. All proofs are generated client-side — secrets never leave the user's device.
SDK (npm)
Full control. Import into any JS/TS project.
npm install zkrune-sdk snarkjs
import { generateProof, verifyProofRemote }
from 'zkrune-sdk';
const result = await generateProof({
templateId: 'age-verification',
inputs: { birthYear: '1990',
currentYear: '2026', minimumAge: '18' },
});
const { isValid } = await verifyProofRemote({
circuitName: 'age-verification',
proof: result.proof.groth16Proof,
publicSignals: result.proof.publicSignals,
});Widget (script tag)
Drop-in. No bundler needed.
<script src="https://cdn.jsdelivr.net/
npm/zkrune-widget@latest/dist/
zkrune-widget.global.js"></script>
<div id="zk"></div>
<script>
ZkRuneWidget.init({
container: '#zk',
theme: 'dark',
onResult: (r) => console.log(r.verified)
});
</script>Verify API
Server-side verification against trusted keys.
POST https://zkrune.com/api/verify-proof
{
"circuitName": "age-verification",
"proof": { "pi_a": [...], ... },
"publicSignals": ["1"]
}
// Response:
// { "isValid": true, "timing": 2 }Which One Should I Use?
| Criteria | SDK | Widget | Verify API |
|---|---|---|---|
| Bundler required | Yes | No | No |
| Proof generation | Client | Client | N/A (verify only) |
| UI included | No | Yes | No |
| Customization | Full | Theme + config | Full |
| Best for | dApps, custom UI | Blogs, landing pages | Backend verification |
Privacy Infrastructure on Solana
