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

kx-update-manager

v0.3.3

Published

Banner + hook para OTA con expo-updates

Readme

kx-update-manager

A tiny banner + hook to ship OTA (over-the-air) updates with expo-updates.

When an update is available, show a call-to-action and update with one tap. Perfect for apps using EAS Update.

✨ Features

  • ⚡️ Drop-in banner: one line in your app root
  • 🪝 Hook: trigger checks manually or build your own UI
  • 🧩 Expo SDK 50+ compatible
  • 🔤 Uses @expo/vector-icons (Material Icons)

1) Requirements

  • Expo SDK: 50+
  • expo-updates: 0.20+
  • React / React Native: React 18+, React Native 0.72+
  • @expo/vector-icons: 14+ (for the banner icon)

If you use EAS Update (recommended), the app must be linked to an Expo project.

Heads up: OTA updates only apply on binaries built with EAS (not in the dev client/expo start).

2) Install

# Install this package
yarn add kx-update-manager

# Ensure peer deps match your Expo SDK
yarn add expo-updates @expo/vector-icons

3) Link your app to EAS (once per app)

npx eas login
npx eas init
npx eas update:configure

This will add EAS metadata to your app config (app.json / app.config.js), including the projectId, runtimeVersion policy, and the updates.url. You should see something like:

be sure to have expo-update in your plugins

{
  "plugins": {
    "expo-dev-client",
    "expo-apple-authentication",
    "expo-updates",
  },
  "expo": {
    "owner": "your-expo-username",
    "runtimeVersion": { "policy": "appVersion" },
    "updates": {
      "url": "https://u.expo.dev/<your-project-id>"
    },
    "extra": {
      "eas": { "projectId": "<your-project-id>" }
    }
  }
}

If the project was previously linked to another account and you need to re-link, remove the extra.eas.projectId field and run npx eas init again.

4) Create build profiles (eas.json)

Define separate profiles (e.g., test, production) and pin each one to an EAS Update channel.

{
  "cli": { "version": ">= 10.0.0" },
  "build": {
    "test": {
      "distribution": "internal",
      "credentialsSource": "remote",
      "channel": "test",
      "android": { "buildType": "apk" },
      "ios": { "simulator": false }
    },
    "production": {
      "distribution": "store",
      "credentialsSource": "remote",
      "channel": "production"
    }
  }
}

The channel embedded in a build determines which branch/channel your OTA updates will come from.

5) Use the banner

Add the component near the top of your app tree (e.g., in App.tsx):

import React from 'react';
import { View } from 'react-native';
import UpdateManager  from 'kx-update-manager';

export default function App() {
  return (
    <View style={{ flex: 1 }}>
      <UpdateManager
        title="Update available"
        icon="refresh"            // MaterialIcons name
        backgroundColor="#5A5A5A"
        isManual={true}            // Recommended: show CTA; set false to auto-apply
      />
      {/* ...rest of your app */}
    </View>
  );
}

Props

| Prop | Type | Default | Description | |------------------|---------|----------------------------|------------------------------------------------------------------------------------| | isManual | boolean | false | If false, the update downloads & reloads automatically (no CTA). | | icon | string | "refresh" | Material Icons glyph name (from @expo/vector-icons/MaterialIcons). | | title | string | "Actualización disponible" | Banner text when an update is available. | | backgroundColor| string | "#5A5A5A" | Banner background color. |

Tip: Use isManual={true} if you want the banner to show a button labeled “Actualizar”. With isManual={false}, updates are fetched & applied automatically when available.

7) Build a binary for your test channel

# Android (internal QA)
eas build -p android --profile test

# iOS (internal QA via TestFlight / Ad Hoc)
eas build -p ios --profile test

Install that build on a device. OTA updates will only apply to binaries that were built with the matching channel.

8) Ship an OTA

Publish to the branch/channel your binary listens to:

# Send an OTA to the "test" channel
eas update --branch test -m "OTA: enable kairox-updates banner"

Behind the scenes: EAS maps your branch (e.g., test) to the channel embedded in the binary ("channel":"test" in eas.json). YOU NEED TO LINK YOUR CHANNEL WITH YOUR BRANCH EXAMPLE: Channel: Test --> Branch: Test