browser-haptic
v1.0.13
Published
Lightweight haptic feedback for web apps. Vibration API (Android) + iOS Safari 17.4+ switch fallback. Zero dependencies.
Maintainers
Readme
browser-haptic
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.
Install
npm
npm install browser-hapticbun
bun add browser-hapticpnpm
pnpm add browser-hapticyarn
yarn add browser-hapticUsage
Import 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".
API
| 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.
Playground
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.
Contributing
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.
License
MIT Copyright (c) 2026 Emirhan Kemal Kosem
