Bubble Level - A Spirit Level in Your Browser
Lay the phone flat for a bull's-eye level, or hold it against an edge for a bar level. Live degree readings, one-tap calibration, and a hold button to freeze a measurement. No app install, and the reading never leaves your device.
A level that is always in your pocket
The sensors that rotate your screen can also tell you when a surface is flat. This page reads the same orientation stream a native level app uses and draws it as a classic bubble: a bull's-eye vial when the phone lies flat, and a horizontal bar vial when you hold the phone upright against a shelf, frame, or door jamb. The mode switches automatically based on how you are holding the device.
Out of the box, phone sensors are typically accurate to within a degree or two. The calibration button closes most of that gap: set the phone on the flattest surface you have, let the reading settle, and tap Calibrate to store that pose as zero. If you want to check a surface against true level rather than against your table, calibrate on something you trust, like a counter checked with a real spirit level, then measure elsewhere.
Because the whole tool is a single page of local JavaScript, it works with the connection off, which makes it usable in a basement, on a ladder, or anywhere signal is poor. It also means the readings are never transmitted; the bubble is drawn on a canvas on your device and that is the end of the data's journey.
How to use your phone as a level
- Tap "Start the level" and allow the motion prompt if your phone shows one.
- Calibrate on a flat surface. Lay the phone down, wait a moment, tap Calibrate. This zeroes out both the sensor offset and your case's thickness.
- Lay the phone on the surface you want to check. The bubble drifts toward the high side; the readout shows degrees on both axes. Green means within half a degree.
- For walls and frames, hold the phone upright against the edge. The display switches to a bar level automatically.
- Tap Hold to freeze a reading when you cannot see the screen and the surface at the same time.
Features
Two modes, automatic
Bull's-eye level for flat surfaces, bar level for edges and walls. The page switches based on how the phone is held.
One-tap calibration
Zero the level against any reference surface to cancel sensor offset and case wobble.
Hold to freeze
Lock the current reading so you can lift the phone off the surface and still read it.
Offline and private
Runs entirely on-device after first load. Airplane mode is the proof.
Frequently asked questions
How accurate is it?
Typically within one to two degrees uncalibrated, and better after calibrating on a known flat surface. Fine for pictures and shelves; use a real spirit level for structural work.
The bubble is not centered on my table. Is the table crooked?
Possibly, but calibrate first: tap Calibrate while the phone rests on the table, then re-check. If a different surface now reads off-level, the difference is real.
Why does it need a permission tap on iPhone?
Apple requires every website to ask before reading motion sensors. The prompt is Safari's own. The reading is only used to draw the bubble and is never sent anywhere.
Nothing happens after I tap start.
Run the gyroscope test; it diagnoses the exact layer that is blocking data: hardware, permission, or a system setting.
🔎 Verify it yourself: nothing uploads
Open DevTools (F12 → Network) and watch while you use the level — no request ever carries your sensor data. Or simply switch to airplane mode: the level keeps working, because everything happens on your device.