This is an implementation report for the [[vibration]] specification, produced in response to the W3C Council recommendation ( Vibration API Council Report, August 2025) that the Working Group document what implementation experience the API currently has.

The Vibration API is implemented in a single browser engine (Blink). Firefox (Gecko) removed support in version 129 (August 6, 2024). WebKit has never shipped the API and formally opposes it.

This document was produced in response to the W3C Council recommendation that the Working Group document the implementation experience of the [[vibration]] specification.

Browser engine support

The following table lists browser engines, not individual browsers. Chromium-based browsers (Chrome, Edge, Opera, Samsung Internet, WebView Android, etc.) all share the Blink engine and are counted as a single implementation.

Browser engine implementation experience for [[vibration]]
Engine Browsers Status Notes
Blink Chrome, Edge, Opera, Samsung Internet, Chrome for Android, WebView Android, and other Chromium-based browsers Implemented Cross-origin iframe restrictions added in Chrome 55. User gesture requirement added in Chrome 60. See Chrome Status.
Gecko Firefox Removed Firefox Desktop: support removed in version 129 (August 6, 2024), Bug 1900037. Firefox for Android: from version 79, the API is present but vibration is disabled — navigator.vibrate() returns true when the window is visible but produces no haptic feedback (see MDN compatibility data, Bug 1653318). Mozilla standards position: open, no position assigned, issue #907.
WebKit Safari (macOS, iOS, iPadOS), all iOS/iPadOS browsers Not implemented Never shipped in Safari or any current WebKit-based browser. Code was present for the discontinued EFL port (2012–2017, see Historical implementation experience), then removed (changeset 216696, Bug 171766). WebKit formal standards position: Oppose, issue #267 (closed 2023-11-14). Concerns: device independence, unclear use cases, portability, annoyance/abuse potential, power consumption, integration infeasibility on Apple platforms.

Historical implementation experience

In addition to the current implementation experience above, the Vibration API has a history of implementation in engines that no longer support it.

WebKit (EFL port, 2012–2017)

Samsung engineer Kihong Kwon landed initial Vibration API support in WebKit in 2012 for the EFL port, which was used on Samsung Tizen devices. The EFL port enabled the feature (ENABLE_VIBRATION PUBLIC ON in Source/cmake/OptionsEfl.cmake) and received bug fixes through 2015.

The EFL port was removed from the WebKit mainline in February 2017. In May 2017, the Vibration API code itself was removed (Bug 171766, changeset 216696). The removal bug states: "Not enabled by any ports. Tests are skipped by all ports. Unmaintained code."

A separate fork, ewebkit/webkit, retains the Vibration API code but has not been updated since July 3, 2017. The Tizen devices that used EFL WebKit are no longer in production.

No Web Platform Test results exist for any EFL WebKit-based browser.

Source code verification (April 2026)

The following was verified by searching and reading the source code of each engine. To reproduce, clone each repository and search for the files and identifiers listed below (e.g., using grep -r or your editor's search).

Gecko (Firefox, 2012–2024)

Firefox supported the Vibration API from version 16 (October 2012) through version 128 (desktop). On Android, vibration was disabled starting in version 79 (July 2020): the API remained present and navigator.vibrate() returned true when the window was visible, but no haptic feedback was produced (Bug 1653318). The feature was not re-enabled due to abuse concerns.

Firefox Desktop removed the API entirely in version 129 (August 6, 2024, Bug 1900037).

Test results

The following tests verify conformance to [[vibration]].

For the latest automated test results, visit wpt.fyi/results/vibration.

Status legend

PASS
The test ran successfully and the implementation conforms to the specification.
FAIL
The test ran and the implementation does not conform to the specification, or the API is not exposed.

Automated test results

Results from wpt.fyi, last verified April 9, 2026. Since Firefox 129 (August 2024), the API is no longer exposed on any Firefox platform (see Historical implementation experience).

Automated WPT results for [[vibration]]
Test Blink (Chrome 149) Gecko (Firefox 151) WebKit (Safari 240 preview)
api-is-present.html PASS (1/1) FAIL (0/1) FAIL (0/1)
idlharness.window.js PASS (16/16) FAIL (13/16) FAIL (13/16)
invalid-values.html PASS (8/8) FAIL (0/8) FAIL (0/8)
silent-ignore.html PASS (1/1) FAIL (0/1) FAIL (0/1)

Manual test results

Manual tests verify that the vibration mechanism is actually triggered on the device. These tests cannot be automated. Tests were conducted on 2024-06-08 (see w3c/vibration#33) against the following browser versions:

Manual WPT results for [[vibration]]
Test Blink (Chrome for Android 125) Gecko (Firefox for Android 126) WebKit (Safari iOS 17.4.1)
cancel-when-hidden-manual.html PASS FAIL FAIL
cancel-with-0-manual.html PASS FAIL FAIL
cancel-with-array-0-manual.html PASS FAIL FAIL
cancel-with-empty-array-manual.html PASS FAIL FAIL
cancel-with-new-manual.html PASS FAIL FAIL
pattern-array-extra-manual.html PASS FAIL FAIL
pattern-array-manual.html PASS FAIL FAIL
pattern-array-with-0-manual.html PASS FAIL FAIL
simple-array-manual.html PASS FAIL FAIL
simple-scalar-manual.html PASS FAIL FAIL

Is each feature of the current specification implemented, and how is this demonstrated?

All features of [[vibration]] are implemented in the Blink engine (Chrome for Android, Chrome desktop, Edge, and other Chromium-based browsers). This is demonstrated through the automated and manual WPT results above. No other engine provides a functional implementation.

Are there independent interoperable implementations of each feature?

No. Only one browser engine (Blink) provides a functional implementation. Firefox removed support in version 129 (August 6, 2024); the API is now disabled on all Firefox platforms, including Android (see Historical implementation experience). WebKit has never shipped the API and formally opposes it.

Are the implementations by different, independent developers?

The Chromium-based implementations (Chrome, Edge, Opera, Samsung Internet, etc.) share the same Blink engine codebase and are not independent of each other. They represent a single implementation.

Are the implementations deployed on production systems?

Yes, in Chromium-based browsers. Not in Firefox (removed) or Safari (never shipped).

Are there reports of difficulties or problems with implementation?

Yes. Chrome introduced cross-origin iframe restrictions (v55) and user gesture requirements (v60) in response to widespread abuse of the API. A manual review of sites calling navigator.vibrate() found usage dominated by notification emulation, ad-related scripts, and patterns now blocked by Chrome's mitigations. Chrome use counter data shows approximately 0.05–0.13% of page loads invoke the API (2022–2026). Firefox disabled the API on Android citing abuse concerns before removing it entirely from Firefox Desktop in v129 (Bug 1900037). WebKit's opposition cites device independence, unclear use cases, power consumption, annoyance/abuse potential, portability, and infeasibility of integration on Apple platforms ( WebKit standards position #267).