close
Plugin screenshot thumbnail 1/4
Plugin screenshot thumbnail 2/4
Plugin screenshot thumbnail 3/4
Plugin screenshot thumbnail 4/4

Wallet Passes for Craft CMS

Issue branded digital membership and loyalty cards straight from your Craft CMS install to Apple Wallet on iPhone and Google Wallet on Android. Bring your own members. Generate your own passes. Own the data end to end.

Built for the Craft CMS Way

Wallet Passes lives inside Craft. Your members are Craft users. Your passes are generated from Craft data. Pass updates ride on the Craft events you already know: EVENT_AFTER_SAVE on a User, a Commerce order, an element save hook in your own module.

Staff manage members in the control panel they already use. When a member's profile changes, their pass updates silently on their phone. No switching systems. No sync jobs. No duplicate data entry.

Own Your Data

  • Member names, IDs, and membership data stay in your Craft database.
  • You hold the Apple Developer and Google Wallet credentials directly, with no middleman, no data-processing agreements, and no vendor lock-in.
  • If you ever move off the plugin, your credentials and your members go with you.

Branded, Customisable Passes

Passes carry your identity, not someone else's template.

  • Brand colours, logo, strip image, and field labels are all configurable.
  • Sensible defaults that work out of the box.
  • Deeper customisation through three events: EVENT_BUILD_APPLE_PASS, EVENT_BUILD_GOOGLE_PASS_OBJECT, and EVENT_BUILD_GOOGLE_PASS_CLASS.

Extensible Generator System

Start with membership cards. Ship anything after that.

Generators are PHP classes that define a new type of wallet pass: event tickets, gift vouchers, booking confirmations, loyalty rewards, Commerce order receipts. Each one is driven by your own Craft data.

  • Built-in MembershipGenerator handles the classic one-card-per-user case.
  • craft make wallet-pass-generator scaffolds a new generator in one command.
  • Register custom generators from any plugin or module via RegisterGeneratorsEvent.
  • Every generator is listed in its own Settings > Generators screen in the CP.

Pass Generation

  • Apple Wallet .pkpass generation via eo/passbook with P12 certificate signing
  • Google Wallet pass objects via the REST API with JWT-based "Add to Wallet" URLs
  • QR code on every pass containing the member's unique ID, ready for any standard scanner
  • Unified pass model with a single wallet_passes table serving both platforms

Automatic Updates

  • UpdateUserPassesJob regenerates passes when user data changes
  • JSON diff detection so updates only fire when something meaningful has changed
  • Apple: silent APNs HTTP/2 push, device pull-back, If-Modified-Since pass fetches
  • Google: direct REST API sync to every device on the member's account

Control Panel

  • Wallet Passes navigation section with passes index and per-user pass cards
  • Settings > Config: Apple Wallet, Google Wallet, and overview tabs for credentials, design, and assets
  • Settings > Generators: every registered generator listed with its metadata
  • Wallet Passes tab on the user edit screen, with each generator rendering its own section
  • Per-pass action menus: Add to Wallet, Copy URL, Delete
  • Device registration and lifecycle visible on every pass card

Developer Integration

  • WalletBehavior on User elements: hasWalletPasses, getPass(), getPasses(), hasPass()
  • craft.wallet Twig variable with PassQuery builder plus appleWalletUrl() and googleWalletUrl() helpers
  • PassQuery with eager loading: with(['source', 'user']) delegates batch loading to the generator
  • GraphQL: walletPasses and hasWalletPasses on the User type, gated by wallet.passes:read
  • WalletPasses field type for marking entries or products as wallet-eligible
  • ExtendablePass classes for Apple semantic tags (EventTicket, StoreCard, Coupon) without forking eo/passbook

Webhooks, Handled

  • Apple Wallet webhook protocol: device registration, unregistration, If-Modified-Since pass fetches, APNs BadDeviceToken cleanup
  • Google Wallet webhook protocol: full ECv2SigningOnly signature verification with cached Google signing keys
  • Both wired up automatically on install

Permissions

  • View, create, and delete your own passes
  • View, create, and delete other users' passes, with granular permissions per action

Configuration

  • Environment variables under WALLET_APPLE_* and WALLET_GOOGLE_* prefixes
  • Craft Cloud / serverless ready via base64-encoded credentials (WALLET_APPLE_P12_BASE64, WALLET_GOOGLE_SERVICE_ACCOUNT_JSON_BASE64)
  • config/wallet/wallet.php starter file copied on install
  • Console commands: wallet/setup/google-class and wallet/setup/env-base64
  • Three dedicated Monolog log targets with 14-day rotation

Who It's For

Venues and organisations that already manage their members in Craft CMS and want a branded membership card on every member's phone:

  • RSL and sporting clubs
  • Golf clubs and surf clubs
  • Gyms, studios, and co-working spaces
  • Wine clubs and loyalty programs
  • Hotels and hospitality groups
  • Event organisers using Craft Commerce or Verbb Events
  • Any site issuing membership, tickets, or loyalty cards from Craft data

Documentation

Full setup guides, generator tutorials, and API reference at plugins.newism.com.au/wallet.

Standard

Plus $149/year after one year.

Installation Instructions

To install this plugin, copy the command above to your terminal.

Reviews

This plugin doesn't have any reviews.

Active Installs
1
Version
1.0.0
License
Craft
Compatibility
Craft 5
Tested on Craft Cloud
Supports GraphQL
Last release
April 15, 2026
Activity (30 days)
0
Closed Issues
0
Open Issues
0
Merged PRs
0
Open PRs