npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mmeow223/rnpedometer

v0.2.0

Published

Pedometer package

Readme

@mmeow223/rnpedometer

React Native Pedometer

@mmeow223/rnpedometer is a React Native module that provides access to the pedometer of a mobile device, allowing you to listen for step count updates in real-time

Features

  • Start and stop step counting.
  • Check if step counting is available on the device.
  • Listen for real-time step count updates.
  • Uses the native pedometer APIs for both iOS and Android.

Installation

npm install @mmeow223/rnpedometer

or using Yarn:

yarn add @mmeow223/rnpedometer

iOS Setup

For iOS, ensure that NSMotionUsageDescription is added to your Info.plist file:

<key>NSMotionUsageDescription</key>
<string>We use motion data to count your steps.</string>

Then, run:

cd ios
pod install

Android Setup

For Android, you need to request the ACTIVITY_RECOGNITION permission in AndroidManifest.xml:

<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

Usage

Here's an example implementation of how to use @mmeow223/rnpedometer in your React Native app:

import React, { useEffect, useState } from 'react';
import { Text, View, Button, PermissionsAndroid, Platform } from 'react-native';
import {
  startStepCounterUpdate,
  stopStepCounterUpdate,
  isStepCountingAvailable,
  addStepCountListener,
  removeStepCountListener,
  type StepCountData,
} from '@mmeow223/rnpedometer';

export default function App() {
  const [isAvailable, setIsAvailable] = useState(false);
  const [isTracking, setIsTracking] = useState(false);
  const [steps, setSteps] = useState(0);
  const [totalSteps, setTotalSteps] = useState(0);

  useEffect(() => {
    checkAvailability();

    if (Platform.OS === 'android') {
      requestPermissions();
    }

    return () => {
      if (isTracking) {
        stopTracking();
      }
    };
  }, []);

  const requestPermissions = async () => {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACTIVITY_RECOGNITION
      );
      return granted === PermissionsAndroid.RESULTS.GRANTED;
    } catch (err) {
      console.error('Failed to request permission:', err);
      return false;
    }
  };

  const checkAvailability = async () => {
    try {
      const available = await isStepCountingAvailable();
      setIsAvailable(available);
    } catch (error) {
      console.error('Failed to check pedometer availability:', error);
    }
  };

  const startTracking = async () => {
    try {
      await startStepCounterUpdate();
      setIsTracking(true);

      const subscription = addStepCountListener((data: StepCountData) => {
        setSteps(data.steps);
        setTotalSteps(data.totalSteps);
      });
      return subscription;
    } catch (error) {
      console.error('Failed to start step tracking:', error);
    }
  };

  const stopTracking = async () => {
    try {
      await stopStepCounterUpdate();
      removeStepCountListener();
      setIsTracking(false);
    } catch (error) {
      console.error('Failed to stop step tracking:', error);
    }
  };

  if (!isAvailable) {
    return (
      <View>
        <Text>Step counting is not available on this device</Text>
      </View>
    );
  }

  return (
    <View>
      <Text>Steps this session: {steps}</Text>
      <Text>Total steps: {totalSteps}</Text>
      {!isTracking ? (
        <Button title="Start Tracking" onPress={startTracking} />
      ) : (
        <Button title="Stop Tracking" onPress={stopTracking} />
      )}
    </View>
  );
}

API

startStepCounterUpdate(): Promise<boolean>

Starts step counting and returns a promise resolving to true if successful.

stopStepCounterUpdate(): Promise<boolean>

Stops step counting.

isStepCountingAvailable(): Promise<boolean>

Checks if step counting is available on the device.

addStepCountListener(callback: (event: StepCountData) => void): void

Registers a listener to receive step count updates.

removeStepCountListener(): void

Removes all registered step count listeners.

License

MIT