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

rnovaui

v1.0.1

Published

Expo React Native UI Library

Readme

My React Native Library

A reusable React Native + Expo component library built with JavaScript.

This library is designed to work with both Expo and React Native CLI projects while avoiding duplicate React instances and the Invalid Hook Call error.


Features

  • ⚡ JavaScript only
  • 📱 Expo compatible
  • ⚛️ React Native compatible
  • 🎨 Theme support
  • ♻️ Reusable components
  • 🚀 Performance optimized
  • 📦 Tree-shakeable exports
  • 🔥 Easy installation

Folder Structure

my-react-native-library/
│
├── example/                  # Expo testing application
│
├── src/
│   ├── components/
│   ├── hooks/
│   ├── utils/
│   ├── constants/
│   ├── theme/
│   ├── assets/
│   └── index.js
│
├── package.json
├── babel.config.js
├── metro.config.js
├── README.md
└── LICENSE

Requirements

  • Node.js >= 20
  • Expo SDK 57+
  • React 19+
  • React Native 0.82+

Installation

npm install my-react-native-library

or

yarn add my-react-native-library

Peer Dependencies

Install the required peer dependencies in your application.

npm install react react-native expo

If your library uses additional packages, install them in your app as well.

Example:

npm install react-native-reanimated
npm install react-native-gesture-handler
npm install expo-image

Usage

import { Button } from "my-react-native-library";

export default function App() {
  return <Button />;
}

Local Development

Clone the repository.

git clone https://github.com/your-name/my-react-native-library.git

Install dependencies.

npm install

Move into the example app.

cd example

Install dependencies.

npm install

Run the Expo app.

npx expo start

Using the Local Library

Inside the example application.

npm install ..

or

npm install ../

Building the Library

If you transpile the source code.

npm run build

Project Structure

src/
│
├── components/
│   ├── Button/
│   ├── Card/
│   ├── Header/
│   └── ...
│
├── hooks/
│
├── utils/
│
├── constants/
│
├── theme/
│
├── assets/
│
└── index.js

Export Components

export { default as Button } from "./components/Button";
export { default as Card } from "./components/Card";

Best Practices

  • Keep React in peerDependencies
  • Keep React Native in peerDependencies
  • Keep Expo in peerDependencies
  • Never bundle React
  • Never bundle React Native
  • Never bundle Expo
  • Export everything from a single index.js
  • Keep components reusable
  • Avoid inline styles when possible
  • Memoize expensive components
  • Support light and dark themes

Invalid Hook Call Prevention

Always use:

"peerDependencies": {
  "react": "*",
  "react-native": "*",
  "expo": "*"
}

Do not use:

"dependencies": {
  "react": "...",
  "react-native": "...",
  "expo": "..."
}

This prevents multiple React instances.


Troubleshooting

Invalid Hook Call

Possible reasons:

  • Multiple React versions
  • Duplicate node_modules
  • React installed inside the library
  • Metro cache issue

Fix:

npm ls react

Only one version should be listed.

Clear cache.

npx expo start --clear

Delete dependencies.

rm -rf node_modules
rm package-lock.json
npm install

Metro Cache

npx expo start --clear

Duplicate React

Check.

npm ls react

There should be only one version.


Recommended Peer Dependencies

{
  "peerDependencies": {
    "react": "*",
    "react-native": "*",
    "expo": "*",
    "react-native-reanimated": "*",
    "react-native-gesture-handler": "*"
  }
}

Only include packages your library actually uses.


Publishing

Login.

npm login

Build.

npm run build

Publish.

npm publish

Versioning

Patch

npm version patch

Minor

npm version minor

Major

npm version major

Publish again.

npm publish

License

MIT License


Author

Your Name

GitHub: https://github.com/your-name


Support

If you find a bug or have a feature request, please open an issue on GitHub.


Changelog

v1.0.0

  • Initial release
  • Expo support
  • React Native support
  • JavaScript implementation
  • Theme support
  • Reusable components