Stripe Terminal React Native SDK (v0.0.1-beta.27) bridges the gap between your React Native app and physical payment hardware. Still in beta, which means plan for shit breaking randomly and Stack Overflow being your best friend.
Why You'd Actually Want This
Instead of building separate payment terminals or dealing with clunky third-party hardware solutions, this SDK lets your React Native app accept physical card payments directly. Your iPhone becomes a payment terminal with Tap to Pay, or you can connect dedicated card readers like the Stripe Reader M2 or BBPOS WisePad 3.
The real win is unified payment processing - online and offline transactions flow through the same Stripe infrastructure, same reporting dashboard, same everything. No more managing separate payment providers for different channels.
The Reality Check
This isn't your typical React Native library integration. You're dealing with:
- Hardware dependencies - Card readers need firmware updates, batteries die, Bluetooth connections drop
- Compliance requirements - PCI DSS scope, EMV certification, payment card industry regulations
- Platform limitations - iOS requires physical device testing, Android permission hell varies by version
- Beta software instability - Recent GitHub issues show connection failures, Bluetooth pairing problems, and random crashes
Current Capabilities (August 2025)
Based on the latest beta release and real-world testing:
Supported Payment Methods:
- EMV chip cards (contact and contactless)
- Magstripe cards (where legally required)
- Apple Pay / Google Pay via NFC
- Tap to Pay on iPhone - Turn any iPhone 8+ into a payment terminal
- Tap to Pay on Android - Newer Android devices with NFC
Supported Card Readers:
- Stripe Reader M2 - Compact Bluetooth reader, 28-hour battery life
- Stripe Reader S700 - WiFi-enabled countertop reader
- BBPOS WisePad 3 - Mobile Bluetooth reader with PIN pad
- BBPOS WisePOS E - Android-powered smart terminal
Real-World Gotchas You'll Hit:
The GitHub issues tell the real story - these are production failures happening right now:
- Issue #993: Bluetooth readers get "stuck in processing" after SDK updates
- Issue #972: Reader discovery fails 95% of the time after app restarts (Android M2 readers)
- Issue #936: React Native 0.77.2+ compatibility breaks, stick with 0.78
- Issue #1003: Card reader firmware updates brick devices during update process
- Connection tokens expire in 10 minutes causing mysterious "authentication failed" errors
- iOS kills Bluetooth connections when apps go to background - no graceful reconnect
Who Should Use This
Good fit:
- Retail apps that need in-person payments
- Food trucks, farmers markets, popup shops
- Field service businesses (repair, delivery, etc.)
- Existing Stripe merchants expanding to physical locations
Not a good fit:
- Apps that rarely need in-person payments
- Teams without hardware debugging experience
- Projects with tight deadlines (beta software = surprises)
- High-volume point-of-sale systems (hardware limitations)
If this sounds like what your app needs, the next section covers the reality of implementation - including what actually works in production and what will have you debugging at 3am.