Skip to content

Wand Browser for developers

Test your hardware
web app on iPhone

Open your HTTPS site in Wand. Connect to Bluetooth Low Energy devices and read or write NFC tags from JavaScript.

Download on the App Store Join TestFlight View on GitHub

Open source · iOS 18+

Wand supports a subset of Web Bluetooth and Web NFC.

Getting started

Open your site
Connect your hardware

  1. Install Wand on your iPhone

    Keep a BLE device or an NDEF tag nearby. Use a physical iPhone for radio tests; the simulator cannot test either radio.

  2. Open your HTTPS URL

    Load the page you want to test. Your site can use the APIs below without adding a Wand SDK.

    Wand saves recent pages on your device. Reopen them from Home when you return to a test.

  3. Use your site’s connect or scan button

    Choose the Bluetooth device your site can access, or approve an NFC request. Keep Wand open while you test.

Open the developer test page

JavaScript, with hardware

Use familiar APIs

Start a request from a tap on your page. These examples assume matching buttons and a <pre id="output"> element.

Bluetooth Low Energy

Select a device and connect to its GATT server. Discover services, read or write characteristics, and receive notifications.

This example requests the Battery Service. Your peripheral must expose it. Use numeric or full UUIDs for your own services.

Request access with navigator.bluetooth.

Connect to a BLE device

document.querySelector("#connect").onclick = async () => {
  const output = document.querySelector("#output");
  try {
    const device = await navigator.bluetooth.requestDevice({
      filters: [{ services: [0x180f] }]
    });
    await device.gatt.connect();
    output.textContent = "Connected";
  } catch (error) {
    output.textContent = error.message;
  }
};

NFC tags

Read and write NDEF tags using NDEFReader. Hold a tag near your iPhone when the system scan sheet opens.

The example shows the number of records read. Add a write() call to write your own message to a writable tag.

NDEF tags only. iOS scan sessions have a time limit.

Read an NDEF tag

document.querySelector("#scan").onclick = async () => {
  const output = document.querySelector("#output");
  try {
    const reader = new NDEFReader();
    reader.onreading = ({ message }) => {
      output.textContent = `${message.records.length} records`;
    };
    reader.onreadingerror = () => {
      output.textContent = "Could not read this tag";
    };
    await reader.scan();
  } catch (error) {
    output.textContent = error.message;
  }
};

Current support

What works today

Check the API implementation
A top-level HTTPS page
Hardware access works in the main page while Wand is in the foreground. Embedded frames cannot use the bridge.
Permission for the current visit
Reloading or loading a new document ends hardware access. Wand also ends access when it enters the background. You can revoke access in Site controls.
A supported API subset
Check the calls your site uses against the implementation. Wand does not support every Web Bluetooth or Web NFC feature.

Safari on iPhone has no built-in Web Bluetooth or Web NFC support. Wand adds its own native bridge. Apple’s native NFC features, including opening a tag’s URL, do not give a webpage these APIs. See WebKit’s Bluetooth response and NFC position.

Try it with your project

Bring your URL and your hardware

Download on the App Store Join TestFlight