One unified pass schema. Two outputs: a signed .pkpass for iOS and a Google Wallet save-link JWT for Android. Zero node:* imports, Web Crypto only.
const pass = Pass.eventTicket({ /* ... */ }).build()
await pass.sign(apple) // .pkpass bytes
await pass.toGoogleSaveLink(google, { origins: [...] }) // pay.google.com URLStatus: pre-1.0 alpha. API may change based on real-world feedback.
👉 Full docs, quickstart, and API reference: packages/passmint/README.md
- Edge-native. Runs on Cloudflare Workers, Vercel Edge, Deno, Bun, Supabase Edge, Netlify Edge, and Node 20+ without polyfills.
- Web Crypto only. No
node-forge, nonode:crypto, noBuffer. JustUint8Array,crypto.subtle,TextEncoder. - One schema, two wallets. A single
Passbuilds both an Apple.pkpassand a Google save-link JWT. - ~21 KB gzipped. Strict TypeScript, Valibot discriminated unions per pass style, typed error hierarchy.
| Package | Status | Description |
|---|---|---|
passmint |
pre-alpha | Core library. Edge-runtime compatible. |
packages/passmint/ the library
examples/node/ Node examples for Apple + Google
.changeset/ changeset-driven release notes
.github/workflows/ CI (lint/type-check/test/bundle-guard/publint/attw/size)
+ release workflow (changesets → npm with provenance)
Prerequisites: Node 20+, pnpm 9+, and openssl on PATH (tests shell out to it for round-trip verification).
pnpm install
pnpm build # tsdown ESM build
pnpm test # vitest (Node pool)
pnpm lint # biome
pnpm type-check # tsc --noEmitcd packages/passmint
pnpm test:workers # smoke tests inside real workerd via vitest-pool-workers
pnpm bundle-guard # fails if dist/ contains any `node:*` import
pnpm publint # catches common publish mistakes
pnpm attw # @arethetypeswrong/cli, esm-only profile
pnpm size # size-limit gateReleases are driven by changesets:
- Add a changeset describing your change:
pnpm changeset - Push. CI runs all gates.
- Once merged to
main, the release workflow opens (or updates) a "Version Packages" PR. - Merge that PR and the workflow publishes to npm with provenance via OIDC.
MIT