Stripe Card Reader POS — Accept in-person card payments directly from Bubble
Hey Bubble community ![]()
We just released Stripe Card Reader POS — a plugin that connects your Bubble app to a physical Stripe Terminal card reader so you can accept in-person card payments without leaving Bubble.
What it does
If you’re building a POS system, a booking app with in-person checkout, a restaurant ordering flow, or anything that needs to take card payments face-to-face — this plugin handles the full Terminal integration for you.
Your customers tap or insert their card on the reader, the payment goes through Stripe, and your Bubble app reacts instantly via events and exposed states.
Supported readers: Stripe Reader S700, Stripe Reader S710, BBPOS WisePOS E, and Verifone devices.
Features
Discover and connect to a reader — point the plugin at your Stripe location and it finds and connects to your reader automatically
Take in-person payments — full collect → process flow with proper async event handling so your workflows fire at the right time
Show cart details on the reader screen — display line items, quantities, tax and totals on the reader display before the customer taps
Save a card for future charges — full SetupIntent flow to save a card on file and charge it later from your backend
Manage locations and readers from Bubble — create locations, register readers, and move readers between locations without touching the Stripe Dashboard
Events for everything — Reader Connected, Payment Collected, Payment Succeeded, Payment Failed, Card Saved, Error — build reactive UIs without polling
Exposed states — connection status, payment status, payment intent ID, amount, currency, last error — reference them anywhere in Bubble
How it works
The plugin uses a single invisible element on your page that manages the SDK connection. Everything is controlled through workflow actions.
The basic payment flow looks like this:
Page loads
→ Create Connection Token (server-side action)
→ Set Connection Token
→ Connect to Reader
Customer checks out
→ Create Payment Intent (server-side action)
→ Collect Payment Method ← reader waits for tap here
Customer taps card → Payment Collected event fires
→ Process Payment
Payment Collected event fires
→ Save to database, show confirmation
Two workflows, no hacks, no polling. The plugin tells Bubble exactly when each thing happens.
Security
Your Stripe secret key lives in plugin settings and is only ever used in server-side actions — it never touches the browser. Connection tokens are fetched server-side and passed to the element via a dedicated action.
The plugin supports two setups:
Single account — paste your Stripe secret key once in the plugin settings tab and forget it. Every server-side action picks it up automatically with no extra configuration.
Multi-account / multi-tenant — every server-side action also accepts a Stripe Secret Key field directly. Leave the plugin setting blank and pass each user’s secret key dynamically from your database instead. This means each user or business on your platform can connect their own Stripe account and take payments directly into it — no platform fees, no Connect required unless you want it.
Links
Plugin link: Stripe Card Reader POS Plugin | Bubble
Documentation: Stripe Card Reader POS | No-Code Venture
Demo: NCV Starter Template
Demo Editor: ncv_card_reader | Bubble Editor
Notes
- Requires a Stripe account with Terminal enabled
- Works with Stripe’s simulated reader for testing — no hardware needed to get started
- Internet-connected smart readers only (not Bluetooth or Tap to Pay)
- Chrome 142+ users will see a one-time local network permission prompt — this is a browser requirement, not a plugin limitation
Happy to answer any questions below. If you run into issues, the docs have a full troubleshooting section and the demo editor is open so you can see exactly how the workflows are set up.
— No-Code Venture