npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@tamga-network/zk

v0.6.0

Published

Cüzdan tarafında sıfır bilgi ispatı (ADR-0032, Longfellow ZK): ISO mdoc belgesi hakkında "şu öğe şu değerdedir" ispatını cihazda üretir (ilk kullanım: 18 yaş üstü). Çekirdek saf TS (React Native uyumlu); /react-native yerel ispatçı (Expo modülü, Rust), /n

Readme

@tamga-network/zk

Wallet-side zero-knowledge proofs for ISO mdoc credentials on Tamga Network (ADR-0032, Longfellow ZK — the system the EU age-verification profile uses). The wallet proves a statement about a credential it holds — "in this credential, age_over_18 is true" — without showing the credential, the issuer's signature or any other element. The issuer's credential is not changed (ZK1). Verification is @tamga-network/verifier/zk.

Any wallet on the network can use this package.

Entry points

| Import | Runs on | What | |---|---|---| | @tamga-network/zk | everywhere (pure TS, React Native safe) | DCQL mso_mdoc_zk query → claims, circuit selection and check against the trust list (ZK2), ZK DeviceResponse (TS13 ZkDocument) | | @tamga-network/zk/react-native | iOS, Android (Expo module TamgaZk) | on-device prover: Rust → static library (iOS) / .so (Android) | | @tamga-network/zk/node | desktop, CI | prover as a child process (tamga-zk-prove): tests, conformance runs, development |

When no prover is available (Expo Go, unsupported phone, module missing) available() returns false and the wallet presents the usual way (ZK5).

Flow

import { presentZk, zkQueryFromDcql, firstCircuitSource } from "@tamga-network/zk";
import { nativeProver } from "@tamga-network/zk/react-native";

const query = zkQueryFromDcql(dcqlCredentialQuery); // format "mso_mdoc_zk"
const response = await presentZk({
  prover: nativeProver,
  circuits: firstCircuitSource(bundledCircuits /* , httpCircuitSource(<circuit host>) */),
  trustedCircuits: lotl.zk_circuits,
  query,
  deviceResponse, // the wallet's usual device-signed DeviceResponse for this session (never sent)
  transcript, // OpenID4VP / DC API SessionTranscript
  issuerX5chain, // issuer leaf (+ chain), DER
  issuerKey, // issuer P-256 key, uncompressed point
});

Circuit files (~300 KB, no personal data) are checked against the SHA-256 in the signed trust list before use, so their source does not change trust: bundle them with the app, or fetch them with httpCircuitSource once a circuit host is published.

The device signature is made the usual way (hardware key, phone lock — WL11); the prover only takes the signed response as input. Nothing leaves the device except the proof.

Building the native parts

| Target | Command | Needs | |---|---|---| | Desktop prover (bin/) | npm run zk:build -w @tamga-network/zk | Rust (rust/rust-toolchain.toml); on Windows the patched upstream clone from tools/zk-circuit | | Android (android/src/main/jniLibs/) | npm run zk:android -w @tamga-network/zk | Android NDK, cargo-ndk | | iOS (ios/TamgaZkProver.xcframework) | npm run zk:ios -w @tamga-network/zk | macOS, Xcode |

Build outputs are not committed; the published package includes them. Packing (scripts/pack-packages.mjs) fails if any of the three Android libraries is missing, and writes their SHA-256 checksums to lib/native-checksums.json.

iOS (for now): the iOS library needs macOS to build and has not been built yet. Until ios/TamgaZkProver.xcframework exists, the module is Android-only: expo-module.config.json lists only "android" and the published package does not contain ios/, so iOS apps build normally and available() returns false there (usual presentation, ZK5). Once the xcframework is built, packing adds ios/ and the "apple" platform automatically. The Rust core (rust/) uses the same pinned upstream commit as the verifier (packages/verifier/zk).

Status

Published on npm as the 0.5.2 test release; the stable 1.0.0 comes when everything is ready. In test releases the API may change. Every release is built from this repository by GitHub Actions and carries npm provenance (verifiable link to the source commit).

License

Apache-2.0