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.
Open source · iOS 18+
Wand supports a subset of Web Bluetooth and Web NFC.
Getting started
Open your site
Connect your hardware
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.
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.
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;
}
};
- 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.