# react-native-shake

> React Native shake event detector

Latest version **6.11.0** (published 2026-10-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install react-native-shake
pnpm add react-native-shake
yarn add react-native-shake
bun add react-native-shake
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 6.11.0 |
| Published | 2026-10-23 |
| First published | 2017-06-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 55.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 318 |
| Author | Quan Pham |
| Maintainers | clipsub |
| Keywords | react-native, ios, android |

## Links

- npm: https://www.npmjs.com/package/react-native-shake
- Repository: https://github.com/Doko-Demo-Doa/react-native-shake
- Homepage: https://github.com/Doko-Demo-Doa/react-native-shake#readme
- Issues: https://github.com/Doko-Demo-Doa/react-native-shake/issues
- npm.io page: https://npm.io/package/react-native-shake

## Alternatives

- [@sindresorhus/slugify](https://npm.io/package/@sindresorhus/slugify.md) — 3.7M weekly downloads
- [solid-js](https://npm.io/package/solid-js.md) — 2.7M weekly downloads
- [expo-glass-effect](https://npm.io/package/expo-glass-effect.md) — 2.5M weekly downloads
- [nanoassert](https://npm.io/package/nanoassert.md) — 780.8K weekly downloads
- [@ffmpeg/ffmpeg](https://npm.io/package/@ffmpeg/ffmpeg.md) — 529.5K weekly downloads

## Recent versions

- 6.11.0 (latest) — 2026-10-23
- 6.10.0 — 2026-07-17
- 6.9.5 — 2026-06-19
- 6.8.5 — 2026-04-04
- 6.8.4 — 2026-04-04
- 6.8.3 — 2026-01-22
- 6.8.2 — 2026-01-11
- 6.8.1 — 2025-10-15
- 6.8.0 — 2025-10-15
- 6.7.8 — 2025-06-29
- 6.7.7 — 2025-06-10
- 6.7.6 — 2025-06-10
- 6.7.5 — 2025-06-10
- 6.7.4 — 2025-06-09
- 6.7.3 — 2025-06-09
- … 44 more at https://npm.io/package/react-native-shake/versions

## 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.

[![npm version](https://img.shields.io/npm/v/react-native-shake?style=for-the-badge&color=blue)](https://www.npmjs.com/package/react-native-shake)
[![Monthly downloads](https://img.shields.io/npm/dm/react-native-shake?style=for-the-badge)](https://www.npmjs.com/package/react-native-shake)
[![New Architecture](https://img.shields.io/badge/New%20Architecture-Ready-purple?style=for-the-badge)](https://reactnative.dev/docs/the-new-architecture/landing-page)
[![TypeScript](https://img.shields.io/badge/TypeScript-Supported-blue?style=for-the-badge)](https://www.typescriptlang.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](LICENSE)

If this project helps you, consider buying me a pizza 🍕

[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/dokodemodoa)

---

## 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

```sh
npm install react-native-shake
```

or

```sh
yarn add react-native-shake
```

### iOS Setup

Run pod install after installing the package:

```bash
cd ios && pod install
```

### Android Setup

No additional configuration required. The library links automatically via autolinking (React Native 0.60+).

---

## Usage

### Basic Usage (v5.x.x and higher)

```tsx
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

```tsx
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.

```tsx
const subscription = RNShake.addListener(() => {
  console.log('Device shaken!');
});

// Later, to unsubscribe:
subscription.remove();
```

### `RNShake.removeAllListeners()`

Removes all active shake event listeners.

```tsx
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.

```tsx
RNShake.configure(1.8); // require a harder shake
```

---

## TypeScript Support

This package includes full TypeScript definitions. Import and use it directly with type safety:

```tsx
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](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.

---

## License

MIT

---
_Source: https://npm.io/package/react-native-shake · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
