Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Passbook Bundle Laravel Package

eo/passbook-bundle

Symfony2 bundle that integrates the php-passbook library to generate signed .pkpass files for Apple Wallet. Configure your pass type and team identifiers, certificates, and output path, then create passes from your app.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • This is a Symfony 2.1+ bundle, not a Laravel package. It registers via AppKernel::registerBundles(), assumes Symfony's DI container, service configuration, and FrameworkBundle conventions. It will not drop into a Laravel application in any supported way.
  • The functional substance lives in the sibling library eymengunay/php-passbook. The bundle is a thin DI wrapper that injects .p12/WWDR certificates, passwords, and a pass factory into Symfony services. Any value a Laravel team extracts comes from the underlying library or from treating this repo as a reference implementation of the .pkpass signing pipeline.
  • The domain is narrow and well-bounded: assemble a .pkpass bundle (pass.json + assets + manifest.json + detached PKCS#7 signature), serve with application/vnd.apple.pkpass, and optionally implement Apple's PassKit Web Service endpoints and APNs push for updates. The small surface area is the one point in its favor — the reimplementation cost is finite.

Integration feasibility

  • Low for the bundle, moderate for the library. A Laravel integration is achievable only by (a) requiring eymengunay/php-passbook directly and writing a Laravel service provider, config file, and facade, or (b) porting the signing logic into our own service. Neither path uses this bundle.
  • Composer resolution is a likely blocker. A Symfony 2.1-era package will carry constraints that conflict with modern symfony/* and PHP 8.x; expect --ignore-platform-reqs hacks or a pinned legacy container rather than a clean install.
  • Certificate handling is the genuine integration work: a Pass Type ID .p12 with its password plus Apple's WWDR intermediate. Apple has rotated and retired older WWDR intermediates (G4 valid to 2030; earlier generations expired in 2023), so any certificate assumption baked into a 2018 library needs verification against a current signing chain.

Technical risk

  • Unmaintained since January 2018. No releases in roughly seven years, 10 stars, zero dependents, single maintainer. Bus factor of one, no security response, no compatibility patching. This is the dominant risk and it is not mitigable by us.
  • APNs protocol drift. Apple retired the legacy binary provider protocol in favor of HTTP/2. If the underlying library implements the binary protocol for pass-update pushes, push delivery is dead on arrival. This must be confirmed before any estimate.
  • Silent pass breakage. An expired or wrong certificate does not surface at integration time in a way users see — passes simply stop updating on device. Failures are invisible server-side unless we build explicit alerting.
  • Framework mismatch. Even in a Symfony shop, the bundle targets 2.x/3.x conventions; modern Symfony (6/7) needs the same extraction exercise as Laravel.
  • This is a "reference implementation, not a dependency" candidate.

Key questions

  • Is the deliverable generation only, or does the roadmap require live pass updates (web service + APNs)?
  • What are our actual PHP and framework versions, and is the target Laravel app willing to pin or isolate legacy dependencies?
  • Who owns the .p12 and WWDR certificates — secret storage, rotation schedule, on-call ownership?
  • Do we need Google Wallet parity or multi-wallet abstraction, which this package does not address?
  • Can we accept zero vendor support, no SLA, and a self-maintained fork if we go past prototype?

Integration Approach

Stack fit

  • Direct fit: none. This is a Symfony bundle; the target is Laravel. Adoption must happen at the php-passbook layer or as a from-scratch port behind an internal interface.
  • Recommended seam: define an internal WalletPassGenerator interface (and later WalletUpdateService) in our codebase. The concrete adapter wraps eymengunay/php-passbook (or a maintained alternative) and is swappable without touching product code.
  • Do not attempt to boot the Symfony bundle inside Laravel or lean on framework-bridging hacks. That path multiplies integration effort for no functional gain.

Migration path

  • Phase 0: stand up Apple Developer Pass Type ID, generate .p12, install WWDR G4, verify the signing chain against current Apple guidance.
  • Phase 1: spike behind the internal interface — single pass type, generation only, no live updates, no APNs, no device registration table.
  • Phase 2 (if the spike validates): replace the engine with a maintained library or our own signing service; keep the interface stable.
  • Phase 3 (only if the product signal exists): add the PassKit Web Service endpoints, device registration store, and HTTP/2 APNs push pipeline — all of which this package does not provide.

Compatibility

  • Expect pinned legacy constraints or --ignore-platform-reqs; treat that as a hard signal that the library is not production-grade for a modern Laravel stack.
  • Verify the WWDR certificate chain (G4) before committing; older intermediates are expired.
  • Confirm whether APNs push (if implemented at all) uses binary or HTTP/2; binary is retired by Apple.

Sequencing

  • Certificates and secrets first, not last — they are 60–70% of the effort.
  • Interface design before adapter selection.
  • Generation before updates; updates are a platform commitment, not a feature toggle.
  • Time-box the spike with an explicit kill criterion.

Operational Impact

Maintenance

  • We own the code. No upstream fixes, no security patches, no dependency upgrades. Budget for periodic self-patching and a fork if we ship to production.
  • Certificate rotation is a recurring operational task with a customer-visible failure mode if missed.

Support

  • No vendor support, no SLA, zero dependents to lean on. Internal on-call owns pass delivery and signing failures.
  • Alerting must be built explicitly — signing and expiry failures are silent server-side.

Scaling

  • Generation is cheap and stateless; it scales with request volume, not infrastructure.
  • The real scaling cost is the update pipeline (web service endpoint, device registration store, APNs push fan-out) which this package does not provide and which becomes a platform service with its own SLA.

Failure modes

  • Expired or wrong certificate → passes stop updating silently on user devices.
  • WWDR intermediate expiry → signature validation fails at install/update time.
  • APNs binary protocol deprecation → push-based updates dead.
  • Composer resolution breakage on PHP/framework upgrade → build fails with no upstream remedy.
  • Signing secret leakage → .p12 must be treated as a production secret under managed storage with audited access.

Ramp-up

  • Engineering effort is dominated by Apple account setup, certificate provisioning, and pass asset design — not by the integration code.
  • Start with a time-boxed spike (generation only, single pass type) and a defined kill criterion (e.g., "X% add the pass, Y% redeem in 30 days").
  • Only after that signal should we commit to the update service, APNs push, cert rotation ownership, and any Google Wallet parity work.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log
hsluv/hsluv
seampact/codegen
seampact/hooks
seampact/ir
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table