Skip to content
DeviceBench

Free vibration and motion sensor test

Vibration test that says why nothing buzzed

Tap a pattern and the page calls the browser’s vibration function, then tells you which of three things happened: there was no such function to call, the pattern was queued, or the browser refused it. Below that the accelerometer, gyroscope and compass print live figures as you tilt and shake the device — on an iPhone only after you grant motion access from a tap, which is exactly why so many sensor pages look broken there. No browser is ever told whether a motor really turned, so a queued pattern you cannot feel means the request left the tab and stopped somewhere the web cannot see.

  • 100% free
  • No signup
  • 3 buzz patterns
  • Accelerometer, gyro, compass
  • iOS prompt handled

Vibration motor

Reading what this browser exposes before saying anything about the motor.

Accelerometer, gyroscope and compass

Checking which of these events this device answers.

Readings are throttled to 20 a second so the digits stay readable; the hardware rate above is what the sensor is actually doing underneath. A barometer, an ambient light sensor, a proximity sensor, a thermometer and a step counter are all present in a modern phone and none of them is readable from a web page, so their absence here is the platform rather than your hardware.

How to test vibration and the motion sensors

Buzz first, grant access second, and move the device last — in that order, because each step rules out a different silence.

  1. Buzz the motor and read which of three answers you got

    Hold the phone loosely in your palm — a desk absorbs a weak motor and makes a working one feel dead — then press a pattern. The line underneath resolves into one of three states: the browser has no vibration function to call, it queued your pattern, or it refused. Only the second one is ambiguous, and deliberately so: nothing tells a web page whether the motor actually turned, so a queued pattern you cannot feel narrows the fault to silent mode, a battery saver, the system's own vibration switch, or the hardware.

  2. Let the sensors in, once, from the button

    On an iPhone or iPad a panel appears asking you to allow motion access, and it exists because Apple will only honor the request when it comes from a tap you made. Press it and answer the system prompt. If you have refused before, the page cannot ask again — the answer is remembered per site — so the way back is Settings, then Safari, then Motion & Orientation Access, followed by a reload of this tab.

  3. Tilt, then spin, then shake, and compare what moved

    Tilt slowly and the bubble and the three orientation angles should follow smoothly with no jumps; spin on the spot and the compass needle should sweep rather than stick. Then shake hard and watch peak shake and peak spin climb. With the device flat and still, gravity should settle within about 0.2 of 9.81 m/s², and a reading that sits stubbornly outside that band on a level surface is a calibration offset rather than movement.

Technical specifications

Vibration callnavigator.vibrate(), which returns whether the browser queued the pattern and is never told whether a motor moved — the page reports the queue result, not a hardware confirmation
Buzz patterns offeredA single 200 ms pulse, a 120 / 80 / 120 / 80 / 120 ms triple, and one continuous second; Chromium clamps any single vibration to 10 seconds and cancels an active pattern the moment the tab is hidden
Orientation anglesalpha 0 to 360 for heading, beta -180 to 180 front to back, gamma -90 to 90 side to side, from deviceorientation, with the absolute flag shown because a relative heading is not north
Motion valuesAcceleration in m/s² with gravity removed, the same axes including gravity, and rotation in degrees per second, from devicemotion; the gravity-removed set is empty on a device with no gyroscope
Reading rateDisplay is throttled to 20 updates a second; DeviceMotionEvent.interval reports the hardware cadence underneath, typically 16.7 ms on Android
iOS permissionDeviceMotionEvent.requestPermission() called inside a tap and over HTTPS, as iOS 13 and later require; a refusal is remembered per site until Settings › Safari › Motion & Orientation Access is changed
Sensors with no web APIBarometer, ambient light, proximity, device temperature, step counter and heart rate return nothing to any page; raw magnetometer readings need a Chrome flag, and geolocation is disabled site-wide in the response headers
Data keptNone — each reading replaces the last one on screen and the peaks live in this tab until you reset or reload

Frequently asked questions

I pressed a buzz pattern and the phone did nothing.

Start with the line the page printed, because it splits the causes for you. If it says the browser has no vibration function, no setting will help — that is Safari on iPhone and iPad, and every desktop browser. If it says the pattern was queued, the request reached the platform and stopped somewhere below it: silent or do-not-disturb mode on many Android builds, a battery saver that suspends haptics, the system-wide vibration toggle, or an aging motor. If it says refused, the browser itself declined, which it does for a hidden tab and for a page it does not consider interacted with yet.

Why does no website ever vibrate on an iPhone?

Because WebKit has never shipped the Vibration API, and that is a deliberate position rather than a gap waiting to be filled. The Taptic Engine on an iPhone is driven through system frameworks that are not exposed to web content at all, so a page has no call to make — which is why the equivalent tools in the App Store are apps rather than bookmarks. Everything else on this page works normally on iOS once you have granted motion access.

The page says the sensors are permitted but every number stays empty.

That is almost always a machine with no inertial sensors in it, and it is the case a naive test cannot see. Desktop Chrome, Edge and Firefox all define DeviceMotionEvent and DeviceOrientationEvent whether or not any hardware sits behind them, so checking that the API exists returns a confident yes on a tower PC — the events then simply never fire. This page waits three seconds and says so instead of painting zeros. The other cause is an insecure origin: both events are restricted to HTTPS, and the page flags that separately.

I refused the motion prompt by mistake. How do I get it back?

Through iOS settings, not through this page — once a site has been refused, calling requestPermission again returns denied without showing anything. On Safari the switch is Settings, then Safari, then Motion & Orientation Access; turning it off and on again clears the per-site answers, after which reloading this tab produces a fresh prompt. Chrome and Firefox on iOS keep their own copy of the same switch under their own entry in Settings, because they are all running WebKit underneath.

The compass points the wrong way, or drifts as I stand still.

Check the label under the needle first: it says whether the heading is absolute or relative. A relative heading is measured from wherever the page happened to load and is not north at all, which is what an iPhone reports here — Safari puts the true magnetic heading on a WebKit-only property that the standard event does not carry, so a standards-based page can only show you the relative one. On Android an absolute heading is genuine but still magnetic, so a case with a magnetic clasp, a car dashboard mount or a desk with steel in it will pull it several degrees off. Slow drift with the phone motionless is the gyroscope integrating its own bias, and a figure-eight wave recalibrates it.

Gravity reads 9.6 instead of 9.81 with the phone flat. Is the accelerometer broken?

Probably not, but it is measurable and worth knowing. Consumer accelerometers carry a small fixed offset from the factory and a temperature coefficient on top of it, so a tenth or two either side of standard gravity is normal; a persistent half a meter per second squared is a real bias, and it is what makes a phone level app disagree with a spirit level. Genuine variation in gravity across the planet runs from about 9.78 at the equator to 9.83 near the poles, which is smaller than the error of the sensor reading it.

Can a page like this read my step count, my barometer or where I am?

No, and most of those have no web API in any browser. Barometric pressure, ambient light, proximity, device temperature, the step counter and heart rate are all unavailable to web content — ambient light and proximity were actually removed from the platform after researchers showed they leaked more than they were worth. Raw magnetometer values in microtesla sit behind a flag in Chrome and do not exist in Safari or Firefox, which is why the compass here is a fused heading rather than a field strength. Location is a separate permission entirely, and it is switched off for this whole site in its response headers.

About the vibration motor, the two motion events and the gate in front of them

Everything a browser knows about how a device is moving arrives through two events, and they are not two views of one sensor. deviceorientation carries angles that the platform has already fused from the accelerometer, the gyroscope and the magnetometer, which is why it is smooth and why it can be wrong in an interesting way when one of those three is misbehaving. devicemotion is closer to the raw parts: acceleration including gravity is the accelerometer almost unfiltered, rotation rate is the gyroscope, and acceleration with gravity removed is a computed value that needs both. That last one is a free hardware test — if the gravity-removed axes stay empty while the with-gravity ones move, the device has an accelerometer and no gyroscope, which is common on cheap tablets and is the reason a phone-based level works there while a phone-based game does not.

The gate in front of all of it is what makes this page hard to build and easy to get wrong. Since iOS 13 in 2019, Safari delivers neither event until DeviceMotionEvent.requestPermission() has resolved as granted, the call has to originate inside a user gesture, and the page has to be on HTTPS. Nothing is thrown and nothing is logged when those conditions are unmet — the events just never arrive — which is why a great many sensor pages present an iPhone with a permanent grid of zeros. Chrome on Android needs no prompt but still insists on the secure origin. And a desktop browser is the trap on the other side: it defines both event constructors regardless of hardware, so feature detection answers yes on a machine with no inertial sensor anywhere in it, and the only honest test is to wait and report the silence. If you are unsure which browser and which origin you are actually on, the user agent readout answers both in one block.

Vibration is the shortest API on this page and the most misread. It takes a duration or an alternating on-off pattern, it returns a boolean, and that boolean means the pattern was accepted for playback — not that anything moved. There is no completion event, no error and no way to ask how strong the motor is, so a page that claims to grade your haptics is grading its own optimism. Chromium also clamps a single vibration to ten seconds and cancels whatever is playing the instant the tab goes to the background, which is worth knowing before you conclude that a long pattern was cut short by hardware. The rest of what a phone will admit to a web page is thin by design: charge level without any measure of wear on the battery health check, and the panel in front of all of it on the touch screen test, which is the other half of checking a phone you are about to buy or send back.

What happens to the motion readings

Every number on this page is worked out by JavaScript running in the tab you are reading it in. Nothing you type, paste or open is uploaded, logged or kept, which is also why the tools carry on working after you disconnect from the network.

Orientation and acceleration values are rendered as they arrive and then dropped; only two running maxima survive, in this tab’s memory, until you press Reset peaks or reload. The motion permission you grant belongs to this site in your browser’s own settings — this page never sees an identity attached to it and cannot revoke it either.