react-native-shake
v6.10.0
Published
React Native shake event detector
Readme
react-native-shake
A lightweight React Native library that detects shake gestures on both iOS and Android. Built with support for React Native's New Architecture (Turbo Modules).
Works best on real devices — shake detection is limited in simulators/emulators.
If this project helps you, consider buying me a pizza 🍕
Requirements
| | Minimum | | ------------ | --------------------- | | iOS | iOS 13.0+ | | Android | API 21+ (Android 5.0) | | React Native | 0.68+ |
Features
- 📱 Cross-Platform: Works on both iOS and Android
- ⚡ New Architecture: Built with Turbo Module support
- 🔷 TypeScript: Full TypeScript definitions included
- 🪶 Lightweight: Minimal footprint, no heavy dependencies
- 🔔 Simple API: Subscribe and unsubscribe with one call each
Installation
npm install react-native-shakeor
yarn add react-native-shakeiOS Setup
Run pod install after installing the package:
cd ios && pod installAndroid Setup
No additional configuration required. The library links automatically via autolinking (React Native 0.60+).
Usage
Basic Usage (v5.x.x and higher)
import React from 'react';
import RNShake from 'react-native-shake';
export const MyComponent = () => {
React.useEffect(() => {
const subscription = RNShake.addListener(() => {
// Your shake handler here...
});
return () => {
subscription.remove();
};
}, []);
return null;
};Legacy Usage
import RNShake from 'react-native-shake';
// For v4.x.x:
class MyComponent extends React.Component {
componentDidMount() {
RNShake.addListener(() => {
// Your code...
});
}
componentWillUnmount() {
RNShake.removeListener();
}
}
// For v3.x.x and below:
class MyComponent extends React.Component {
componentDidMount() {
RNShake.addEventListener('ShakeEvent', () => {
// Your code...
});
}
componentWillUnmount() {
RNShake.removeEventListener('ShakeEvent');
}
}API
RNShake.addListener(callback)
Registers a listener for the shake event. Returns a subscription object.
| Parameter | Type | Description |
| ---------- | ------------ | ---------------------------------------- |
| callback | () => void | Function called when a shake is detected |
Returns: EmitterSubscription — call .remove() to unsubscribe.
const subscription = RNShake.addListener(() => {
console.log('Device shaken!');
});
// Later, to unsubscribe:
subscription.remove();RNShake.removeAllListeners()
Removes all active shake event listeners.
RNShake.removeAllListeners();RNShake.configure(sensitivity)
Configures how much force is required to trigger a shake event. Android only — has no effect on iOS, which relies on the system's built-in shake gesture.
| Parameter | Type | Description |
| ------------- | -------- | --------------------------------------------------------------------------------- |
| sensitivity | number | Required shake force, as a multiple of Earth's gravity. Lower values trigger more easily. |
Reference points: 0.75 (light), 1.33 (normal, default), 1.8 (heavy) — or pass any custom value.
RNShake.configure(1.8); // require a harder shakeTypeScript Support
This package includes full TypeScript definitions. Import and use it directly with type safety:
import RNShake from 'react-native-shake';
import type { EmitterSubscription } from 'react-native';
const subscription: EmitterSubscription = RNShake.addListener(() => {
console.log('Shake detected!');
});Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
MIT

