MARKETPLACE
PLUGINS
QR CODE SCANNER NATIVE + WEB
QR Code Scanner Native + Web logo

QR Code Scanner Native + Web

Published September 2026
   •    Updated this week

Plugin details

QR and barcode scanner for native mobile and web apps.
Scan a wide range of QR codes and barcode formats directly from your camera, with the same functionality across web and native mobile.

Choose between two scanning modes: Once for single scans or Continuous for repeated scanning. Switch between the front and back camera, and customize the scanning area with four frame shapes: Square, Rectangle, Wide or None. You can also choose from three different frame styles.

Customize the scanner to match your brand by setting your own frame color, and optionally enable a laser-style scanning line for a clearer visual scanning experience.

The plugin also lets you scan QR codes and barcodes directly from images and uploaded files — useful for scanning tickets, product labels, invoices, documents, screenshots, saved QR codes and other images without using the camera.

────────────────────────────────
🎬 DEMO
────────────────────────────────

Mobile demo: https://plugins-demo-2.bubbleapps.io/version-test/api/1.1/mobile/preview?debug_mode=true&preview_view=Home
Desktop demo: https://plugins-demo-2.bubbleapps.io/version-test

Editor mobile: https://bubble.io/page?id=plugins-demo-2&test_plugin=1789243412579x878764742705676300_current&tab=Design&name=Home&type=page&elements=bTGOw
Editor Desktop: https://bubble.io/page?id=plugins-demo-2&test_plugin=1789243412579x878764742705676300_current&tab=Design&name=index&type=page&elements=bTGRj

────────────────────────────────
📱 💻 ONE PLUGIN, TWO PLATFORMS
────────────────────────────────

  • QR Scanner for Bubble native mobile apps, on the device's own camera.
  • QR Scanner (web) for your web pages, on the browser's camera.
  • 17 fields, 10 states, 8 events and 10 actions — identical names on both. Build the workflow once and it runs on either.
  • Same design on both, drawn by the plugin rather than by the phone, so iOS, Android and a desktop browser all look like your app instead of three different apps.

────────────────────────────────
🔍 WHAT IT READS
────────────────────────────────

Everything the device can read, all the time. There is no format list to fill in, and that is deliberate: a scanner that has to be told what to look for does nothing at all the first time somebody holds up the wrong kind of label, and nothing on screen can explain why.

  • QR codes 🔳 — plus Data Matrix, PDF417 and Aztec.
  • Retail barcodes 🛒 — EAN-13, EAN-8, UPC-A, UPC-E.
  • Logistics and industrial 📦 — Code 128, Code 39, Code 93, ITF, Codabar.

────────────────────────────────
🎯 IN THE PAGE, OR OVER THE WHOLE SCREEN
────────────────────────────────

  • It is the camera in your page, at exactly the size you drew the element, with the corners you gave it. The picture is rounded with it, so nothing pokes out.
  • Open Fullscreen lifts that same camera over the whole screen when a workflow asks for it, and closes on the first scan. One camera, one decoder, one set of states, whichever way it is showing. This is the shape a ticket check-in wants.
  • The camera does not open itself. Auto start is off until you turn it on, so your app can explain why it needs a camera before the system asks — and you only get to ask once.

────────────────────────────────
🎨 HOW IT LOOKS
────────────────────────────────

  • One colour, and everything follows. The frame, the sweeping line, the active buttons and the Scan again button all come from your accent colour.
  • Four windows. Square for QR codes, Rectangle a little wider, Wide for the letterbox shape a barcode wants, or None for the plain camera.
  • Corner brackets, a full frame, or no frame at all — and the dimming outside the window curves with it, so the picture never shows a square corner behind a rounded one.
  • The window is a guide, not a crop. The decoder always reads the whole picture, so a code held slightly off centre is still found. Scanners that crop feel broken and cannot tell you why.
  • A sweeping line with a speed you set. It is the only thing on screen that says the camera is alive when there is nothing in front of it, and one checkbox turns it off if you want the scanner completely still.
  • A green flash and a buzz when a code is read, so a scan is obvious without anyone watching a corner of the screen.

────────────────────────────────
⚡ BUILT FOR A REAL QUEUE
────────────────────────────────

  • It does not flood your workflows. A camera reports the same code dozens of times a second. Once mode stops on the first one; Continuous mode ignores the same code for as many seconds as you say. Without that, one ticket held in front of a phone is thirty check-ins.
  • Once mode closes the loop for you. After a scan the camera stops and a panel says the code was read, with a button that starts it again. No workflow needed to get back to scanning.
  • Stopping really stops. The camera is handed back to the system rather than left paused, so the next screen that needs it gets it.
  • A refused camera is a screen, not a dead rectangle 🚫 — a plain explanation and a button that opens the phone's settings.
  • Torch and zoom 🔦 for a dark warehouse or a small printed label, and a flip button for a code held up to the person instead of by them.

────────────────────────────────
🖼️ SCAN IMAGES AND FILES
────────────────────────────────

  • Scan From Image reads a code from any picture with a URL — one in your database, one a user uploaded.
  • Pick Image To Scan opens the phone's photo library, or the browser's file picker, and reads whatever they choose.
  • Nothing in it? That fires its own event, so "no code in this picture" and "this file is broken" are two different things your app can answer differently.

────────────────────────────────
🌐 THE WEB HALF IS NOT A CUT-DOWN VERSION
────────────────────────────────

  • It uses the browser's own decoder where there is one, and downloads a full decoder where there is not — which is what makes it work in Safari on an iPhone, not only in Chrome. A state tells you which one is running, so a support question has an answer.
  • It looks at two scales. Every other frame decodes the middle of the picture at full resolution, because a whole frame scaled down loses exactly the detail a QR code is made of. A native camera does that search itself; in a browser it has to be spelled out.
  • Buttons the device cannot honour do not appear. A laptop has one camera and no torch, so neither button is drawn there; an Android phone in a browser has both, and there they are.

────────────────────────────────
🔧 FULL WORKFLOW CONTROL
────────────────────────────────

  • 10 states — last code, last format, scan count, is scanning, is fullscreen, camera facing, torch on, permission status, engine, last error.
  • 8 events — code scanned, scanner started, scanner stopped, permission granted, permission denied, scan error, fullscreen closed, no code found.
  • 10 actions — Start Scanner, Stop Scanner, Switch Camera, Toggle Torch, Set Zoom, Open Fullscreen, Close Fullscreen, Scan From Image, Pick Image To Scan, Clear Result.
  • The states are already filled in when the Code scanned event runs, so there is nothing to wait for and nothing to schedule.


Questions or something you need it to do? Get in touch - info@technocode.agency

$30

One time  •  Or  $3/mo

stars   •   0 ratings
1 installs  
This plugin does not collect or track your personal data.

Platform

Web & Native mobile

Contributor details

Technocode logo
Technocode
Joined 2020   •   18 Plugins
View contributor profile

Instructions

1. Add the scanner
Add QR Scanner to a native mobile page or QR Scanner (web) to a web page.

Set the element's size and corner radius directly in the Bubble editor. The scanner automatically fills the element.

2. Start scanning

The scanner does not start automatically by default. Add the Start Scanner action to a button or workflow.

If you want the scanner to start when the element loads, enable auto_start.

3. Choose your scan mode

Use scan_mode to control how scans are handled:

  • Once — stops after the first code is detected and shows the scan result with an option to scan again.
  • Continuous — keeps scanning after a code is detected. Use rescan_delay to control how long the same code is ignored before it can be scanned again.

The scanner automatically detects supported QR codes and barcode formats. No format configuration is required.

4. Customize the scanner

Set accent_color to your brand colour. It controls the scanner frame, scanning line and buttons.

You can also customize:

  • frame_shape — Square, Rectangle, Wide or None.
  • frame_style — choose the style of the scanning frame.
  • scan_line — show or hide the scanning animation.

5. Use the scan result

Create a workflow with When QR Scanner's code scanned.

Inside the workflow, use QR Scanner's last code to access the scanned value. You can use it in searches, database actions, text elements, API calls and other Bubble workflows.

The scanner's states are updated before the code scanned event runs.

6. Scan images

You can also scan codes without using the camera.

  • Pick Image To Scan — opens the device's photo library on native mobile or the file picker on web.
  • Scan From Image — scans an image from a URL, such as an uploaded file or an image stored in your database.

If no code is found in the selected image, the no code found event is triggered.

7. Camera controls

Use the available actions to control the scanner while it is running:

  • Switch Camera — switch between available cameras.
  • Toggle Torch — turn the device's flashlight on or off when supported.
  • Set Zoom — adjust the camera zoom.
  • Open Fullscreen / Close Fullscreen — display the scanner over the entire screen.
  • Stop Scanner — stop the camera when you no longer need it.

Tips

  • Ticket check-in: use Open Fullscreen with scan_mode = Once for a simple scan-and-close workflow.
  • Small barcodes: use Set Zoom to make small labels easier to scan.
  • Screenshots and saved tickets: use Pick Image To Scan or Scan From Image.
  • Leaving the page: use Stop Scanner when the camera is no longer needed.
  • Troubleshooting: enable debug_overlay to see the current permission status, decoder, frame count and read count.
  • One scanner per page. The scanner actions target the last scanner element placed on the page.

Testing

Test the scanner on the device and browser where your app will actually be used. Camera behaviour can vary depending on the device, browser, lighting and available camera hardware.

Mobile camera permission

Before building your native mobile app, make sure your app includes a camera usage description in its mobile settings. On the web, the page must be served over HTTPS.

📄 Full documentation: https://wide-finch-c12.notion.site/QR-Barcode-Scanner-Documentation-3da61f4cca3a8018a43be8facb54f5dc?pvs=73

Types

This plugin can be found under the following types:
Element   •   Event   •   Action

Categories

This plugin can be found under the following categories:

Resources

Support contact
Documentation
Tutorial

Rating and reviews

No reviews yet

This plugin has not received any reviews.
Bubble