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

@kyzegs/expo-wallet

v0.2.0

Published

Unified Apple Wallet and Google Wallet API for Expo

Readme

expo-wallet

Unified React Native API for Apple Wallet (iOS / PassKit) and Google Wallet (Android / Google Pay Wallet API), built with the Expo Modules API (Swift + Kotlin).

Networking stays in JavaScript: download .pkpass files with expo-file-system (or your HTTP client), then pass file:// URIs or base64 to iOS. On Android, pass the JWT string from your issuer backend (one JWT can encode multiple passes).

Installation

In an app that uses Expo dev/build clients:

npx expo install expo-wallet

For Android, add Google Play Services Pay to the library (already declared in this package’s android/build.gradle):

implementation("com.google.android.gms:play-services-pay:16.5.0")

(Rebuild the native app after installing the module.)

API

import {
  canAddPass,
  addPass,
  hasPass,
  downloadAndAddPass,
} from 'expo-wallet';
  • canAddPass() — Whether the device can show the native add-pass flow (PKAddPassesViewController / Pay API availability).
  • addPass(options) — Platform-specific options:
    • iOS: options.ios.pass and/or options.ios.passes with localUri (file://...) and/or base64 (raw .pkpass bytes, base64-encoded).
    • Android: options.android.jwt — signed JWT from your Google Wallet issuer backend (supports one or many passes in a single token).
  • hasPass(options)iOS: checks the pass library via PassKit when you provide passTypeIdentifier + serialNumber. Android: not supported on-device; logs a warning and returns false (use the Google Wallet REST API from your backend).
  • downloadAndAddPass(url, androidJwt?) — Optional helper: downloads a remote .pkpass with expo-file-system, then calls addPass. Requires expo-file-system in your app.

iOS: hasPass and entitlements

hasPass uses PKPassLibrary. To query passes your app did not issue, Apple expects the com.apple.developer.pass-type-identifiers entitlement (and correct setup in the developer portal). Without it, behavior may be limited.

Android: checking if a pass exists

There is no supported client-side check in the Pay / Wallet SDK comparable to PKPassLibrary. You must use the Google Wallet REST API (from a secure backend) to inspect object state.

Example app (example/)

The example app is configured with TypeScript path aliases to ../src and expo-file-system for download demos.

  1. From the repo root:

    cd example
    npm install
  2. iOS: set a real HTTPS .pkpass URL (or use your own addPass call with a local file:// URI).

  3. Android: paste a real issuer JWT from your backend (the placeholder string will fail until replaced).

  4. Run:

    npx expo run:ios
    # or
    npx expo run:android

Multiple passes

  • iOS: pass several entries via options.ios.passes, or combine pass + passes (they are merged into one native batch).
  • Android: encode multiple pass objects in one JWT; the native module still calls savePassesJwt once.

Development

npm install
npm run build

License

MIT