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, andEVENT_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
MembershipGeneratorhandles the classic one-card-per-user case. craft make wallet-pass-generatorscaffolds 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
.pkpassgeneration viaeo/passbookwith 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_passestable serving both platforms
Automatic Updates
UpdateUserPassesJobregenerates 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-Sincepass 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
WalletBehavioron User elements:hasWalletPasses,getPass(),getPasses(),hasPass()craft.walletTwig variable withPassQuerybuilder plusappleWalletUrl()andgoogleWalletUrl()helpersPassQuerywith eager loading:with(['source', 'user'])delegates batch loading to the generator- GraphQL:
walletPassesandhasWalletPasseson theUsertype, gated bywallet.passes:read WalletPassesfield 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-Sincepass fetches, APNsBadDeviceTokencleanup - 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_*andWALLET_GOOGLE_*prefixes - Craft Cloud / serverless ready via base64-encoded credentials (
WALLET_APPLE_P12_BASE64,WALLET_GOOGLE_SERVICE_ACCOUNT_JSON_BASE64) config/wallet/wallet.phpstarter file copied on install- Console commands:
wallet/setup/google-classandwallet/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.
To install this plugin, copy the command above to your terminal.
This plugin doesn't have any reviews.



