RunTheTests
/

GATT Service Browser

Walk a Bluetooth device's service tree — read-only, and without touching a single value.

How this talks to your device

You pick a device from the browser's chooser, the page connects, and it walks the GATT tree: every primary service, every characteristic within it, and what each characteristic supports — read, write, notify, indicate and the rest. Standard services and characteristics are named from the Bluetooth SIG's assigned numbers, which are extracted properly from the full 128-bit UUID rather than by matching a prefix, so a vendor UUID that happens to begin with familiar digits is not mislabelled. Nothing is read and nothing is written. A characteristic read can change state on some peripherals, and a tool that quietly pokes every readable characteristic on hardware it does not understand is not a browsing tool. The properties are listed so you can see what is possible; doing it belongs to a tool built for that specific device.

What the results mean

Standard service
A service with a Bluetooth SIG assigned number, so its behaviour and packet layouts are published. Battery, Device Information and Heart Rate are the common ones.
Vendor-specific service
A UUID outside the SIG's base range. Only the manufacturer knows what it does, and this page shows the UUID rather than guessing.
Properties
What a characteristic supports. Notify is the interesting one — it means the device pushes updates rather than waiting to be polled, which is how live sensor readings work.
Connected but no services
The device is using services this page never requested. Web Bluetooth requires a page to declare what it wants in advance, so a fully proprietary device legitimately appears empty.

Common problems and fixes

The tree is empty after connecting
The device's services are vendor-specific and were not among those requested. There is no general fix from a browser — a page cannot ask for a UUID it does not know. The manufacturer's own app can, because it was written knowing them.
A service appears with no characteristics under it
The service exists but refused enumeration, which some devices do for services requiring authentication. It is listed as present because it is present — dropping it would be less accurate than showing it empty.
The device disconnects immediately
Many peripherals drop a connection that does not begin the exchange they expect within a second or two. That is the device's own timeout rather than a browser problem, and it means this tool cannot browse that device.
You need to read an actual value
This tool will not do it deliberately. Reading is a state-changing operation on some hardware, and the safe path is a tool built for your specific device. What this gives you is the map: which services exist and which characteristics support what.

Frequently asked questions

Why not just read every characteristic and show the values?

Because a read is not always free. On some peripherals reading a characteristic acknowledges an alert, advances a state machine or wakes hardware, and a generic browsing tool has no way to know which. Enumerating structure is safe on anything; reading everything is not, and the risk falls on the visitor's device rather than on us.

Why do I have to pick the device every time?

Web Bluetooth requires a user gesture and an explicit choice for each new session by design, so that a page cannot silently reconnect to hardware. Browsers that support the permitted-devices API can shorten this on repeat visits, but the first choice is always yours.

What is a GATT service, in plain terms?

A grouping of related values a device exposes. The Battery service holds a battery level; the Heart Rate service holds a measurement characteristic and a sensor location. Standard ones have published layouts so any client can read them — which is why a heart-rate strap works with software its manufacturer never heard of.

Can I use this to reverse-engineer a device?

It will show you the map — which services and characteristics exist and what operations they support — and that is genuinely where such work starts. It will not read or write values, so the next step needs a tool built for that purpose, on hardware you own.

More in Device