GitHub - getpassmint/passmint: Issue Apple Wallet and Google Wallet passes from any edge runtime. Zero Node built-ins, Web Crypto only. · GitHub
/" data-turbo-transient="true" />
Skip to content
Type / to search
Sign in<br>Sign upAppearance settings
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
Uh oh!
There was an error while loading. Please reload this page.
getpassmint
passmint
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>119 Commits<br>119 Commits
.changeset
.changeset
.github
.github
assets
assets
docs
docs
examples/node
examples/node
packages/passmint
packages/passmint
.gitignore
.gitignore
LICENSE
LICENSE
README.md
README.md
SECURITY.md
SECURITY.md
biome.json
biome.json
package.json
package.json
pnpm-lock.yaml
pnpm-lock.yaml
pnpm-workspace.yaml
pnpm-workspace.yaml
tsconfig.base.json
tsconfig.base.json
turbo.json
turbo.json
View all files
Repository files navigation
passmint
Issue Apple Wallet and Google Wallet passes from any edge runtime.
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<br>await pass.toGoogleSaveLink(google, { origins: [...] }) // pay.google.com URL
Status: pre-1.0 alpha. API may change based on real-world feedback.
👉 Full docs, quickstart, and API reference: packages/passmint/README.md
Why passmint
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, no node:crypto, no Buffer. Just Uint8Array, crypto.subtle, TextEncoder.
One schema, two wallets. A single Pass builds both an Apple .pkpass and a Google save-link JWT.
~21 KB gzipped. Strict TypeScript, Valibot discriminated unions per pass style, typed error hierarchy.
Packages
Package<br>Status<br>Description
passmint<br>pre-alpha<br>Core library. Edge-runtime compatible.
Repository layout
packages/passmint/ the library<br>examples/node/ Node examples for Apple + Google<br>.changeset/ changeset-driven release notes<br>.github/workflows/ CI (lint/type-check/test/bundle-guard/publint/attw/size)<br>+ release workflow (changesets → npm with provenance)
Development
Prerequisites: Node 20+, pnpm 9+, and openssl on PATH (tests shell out to it for round-trip verification).
pnpm install<br>pnpm build # tsdown ESM build<br>pnpm test # vitest (Node pool)<br>pnpm lint # biome<br>pnpm type-check # tsc --noEmit
Package-specific checks
cd packages/passmint
pnpm test:workers # smoke tests inside real workerd via vitest-pool-workers<br>pnpm bundle-guard # fails if dist/ contains any `node:*` import<br>pnpm publint # catches common publish mistakes<br>pnpm attw # @arethetypeswrong/cli, esm-only profile<br>pnpm size # size-limit gate
Releasing
Releases 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.
License
MIT
About<br>Issue Apple Wallet and Google Wallet passes from any edge runtime. Zero Node built-ins, Web Crypto only.<br>passmint.com<br>Topics<br>applegoogleiospasskitwallet<br>Resources<br>Readme<br>MIT license<br>Security policy<br>Security policy<br>Activity<br>Custom properties<br>Stars<br>0 stars<br>Watchers<br>0 watching<br>Forks<br>0 forks<br>Report repository
Releases
Packages
Contributors
Languages
You can’t perform that action at this time.