Lightweight haptic feedback for JavaScript. Uses the Vibration API where available (e.g. Android). On iOS Safari 17.4+ it uses a hidden input[switch] toggle so the native switch haptic fires. No runtime dependencies.
Try the playground → — live demo, install commands, and code samples for React, Vue, Svelte, Angular, and TypeScript.
npm
npm install browser-hapticbun
bun add browser-hapticpnpm
pnpm add browser-hapticyarn
yarn add browser-hapticImport the default export as Haptic and call its methods:
import Haptic from "browser-haptic";
if (Haptic.isSupported()) {
Haptic.light();
Haptic.success();
Haptic.vibrate([10, 50, 10, 50, 10]);
}React example:
import Haptic from "browser-haptic";
const App = () => {
const supported = Haptic.isSupported();
return (
<button onClick={() => Haptic.heavy()}>
Tap me
</button>
);
};You can also use named imports if you prefer: import { light, success, isSupported } from "browser-haptic".
| Method | Description |
|---|---|
Haptic.isSupported() |
true if feedback is available (Vibration API or DOM for iOS switch fallback) |
Haptic.hasVibration() |
true only when the Vibration API is available (e.g. Android) |
Haptic.vibrate(pattern) |
Trigger feedback: number (ms) or number[] (vibrate/pause sequence) |
Haptic.light() |
Short tap |
Haptic.medium() |
Medium tap |
Haptic.heavy() |
Strong tap |
Haptic.success() |
Double tap |
Haptic.warning() |
Triple tap |
Haptic.error() |
Longer alert pattern |
Type: VibrationPattern = number | number[] (for vibrate()).
On iOS Safari 17.4+, isSupported() is true but hasVibration() is false; the library uses a hidden native switch toggle.
A live demo and docs site is available at playground-neon-gamma.vercel.app. You can try haptic feedback in the browser, copy install commands, and see framework-specific examples (React, Vue, Svelte, Angular, TypeScript). The playground source lives in the playground/ directory of this repo.
Contributions are welcome. To get started:
- Fork the repo and clone it locally.
- Install dependencies:
bun install - Make your changes and run tests:
bun test - Open a pull request with a short description of the change.
For bugs or feature ideas, please open an issue first so we can discuss.
MIT Copyright (c) 2026 Emirhan Kemal Kosem