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

react-native-device-posture

v0.1.3

Published

Shared fold and hinge posture for iOS and Android, available through one provider.

Readme

react-native-device-posture

Cross-platform fold and hinge posture support for React Native devices with a foldable display.

Wrap your app once with FoldStateProvider, then read the same posture state from any screen using useFoldState().

Supported states

Both platforms emit the native listener onFoldStateChange and normalize it into a shared state shape.

| status | Meaning | isFlat | |---|---|---| | unknown | No hinge is available on this device | false | | closed | Device is folded or closed | false | | partiallyOpen | Device is in a mid-fold position | false | | fullyOpen | Device is unfolded flat | true |

isFlat is only true when the device is fully open, which is the state you usually want for a wide dual-screen layout.

iOS reads UIHinge on iOS 27.1 and newer. Android reads Jetpack WindowManager FoldingFeature. Devices without a hinge stay at unknown.

Requires React Native 0.76 or newer with the New Architecture enabled.

Installation

Install from npm:

npm install react-native-device-posture

Then install the iOS pods if you are building for iOS:

cd ios && pod install

Rebuild the native app after installation. A JavaScript reload alone is not enough.

Usage

import {
  FoldStateProvider,
  useFoldState,
  FOLD_STATE_EVENT,
  FOLD_STATUS,
} from 'react-native-device-posture';

function App() {
  return (
    <FoldStateProvider>
      <Root />
    </FoldStateProvider>
  );
}

function Home() {
  const { isFoldSupported, isFlat, status } = useFoldState();
  const isDuoOpen = isFoldSupported && isFlat;

  return isDuoOpen ? <WideHome /> : <PhoneHome />;
}

FOLD_STATE_EVENT is 'onFoldStateChange' on both platforms. The provider subscribes to the native event for you, so screens generally only need to call useFoldState().

useFoldState() throws if it is called outside FoldStateProvider.

API

  • FoldStateProvider: sets up native posture listening and exposes the current fold state to descendants.
  • useFoldState(): reads the current state from context.
  • FOLD_STATE_EVENT: native event name used by both platforms.
  • FOLD_STATUS: status constants such as unknown, closed, partiallyOpen, and fullyOpen.