First Release
DockWallet v0.0.1 — Initial Release 🎉
DockWallet is a self-hosted, Docker-based digital wallet for managing Apple Wallet passes (.pkpass) — accessible via browser and Android app.
🚀 Features
Pass Management
- Upload
.pkpassfiles via file picker, drag & drop, or URL import - QR code scanner for importing passes directly from booking confirmations
- Supports all Apple Wallet pass types: Boarding Pass, Event Ticket, Coupon, Store Card, Generic
- Automatic extraction of pass colors, logos, strip images and background images from the
.pkpassarchive - Barcode rendering for all formats: QR Code, PDF417, Code128, Aztec
- Pass signature verification (Apple PKCS#7)
- Automatic detection of voided and expired passes
Pass Display
- Compact ticket-style grid view with authentic pass colors
- Boarding passes shown as realistic paper tickets with perforation line and IATA route display
- Generic passes (parking, cinema cards, loyalty cards, event tickets) shown in native Apple/Google Wallet style with logo, strip image and field grid
- Detail overlay with sidebar showing back fields, metadata and signature status
- Separate sections for upcoming and expired/voided passes
Multi-User & Authentication
- JWT-based login with username/email + password
- Multi-factor authentication (TOTP)
- Passkey support (WebAuthn / FIDO2)
- Email verification and password reset flows
- Account deletion with token confirmation
Admin Dashboard
- User management: create, edit, delete users
- Toggle active status, admin role, reset MFA and passkeys
- System status panel showing Frontend version, Backend version and uptime
- Docker Hub update detection via backend proxy (compares image push date with container start time)
Infrastructure
- Single
docker compose updeployment - PostgreSQL database with UUID primary keys throughout
- Nginx-served frontend with API reverse proxy
- Automatic database migrations on startup
- Docker images:
cheinisch/dockwallet-frontendandcheinisch/dockwallet-backend
🐳 Quick Start
curl -o docker-compose.yml https://raw.githubusercontent.com/cheinisch/dockwallet/main/docker-compose.yml
docker compose up -d
Open http://your-server:8080 and log in with:
- Username:
admin - Password:
changeme
⚠️ Change the default admin password immediately after first login.
📋 Requirements
- Docker & Docker Compose
- A server with port 8080 available (configurable)
🗄️ Tech Stack
| Component | Technology |
|---|---|
| Backend | Node.js 22, Express, PostgreSQL |
| Frontend | React 18, Vite, Tailwind CSS |
| Auth | JWT, bcrypt, TOTP (otplib), WebAuthn |
| Barcodes | qrcode, bwip-js |
| Infrastructure | Docker, Nginx, PostgreSQL 16 |
⚠️ Known Limitations
- Pass signature verification checks for Apple issuer presence in the PKCS#7 structure but does not perform full cryptographic chain validation — passes with valid Apple signatures may show as unverified if the certificate chain cannot be resolved
- Android sync app is functional but not yet included in this release
- No push notifications for pass updates
🔄 Upgrading
docker compose pull && docker compose up -d
The admin dashboard will notify you when a new image is available on Docker Hub.