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

@aetherpush/cli

v0.9.3

Published

Command-line interface for Aether — over-the-air updates for React Native apps.

Readme

Aether CLI

The command-line interface for Aether, over-the-air JavaScript bundle updates for React Native apps.

npm version license node

The CLI follows semver and is on a 0.x line: a minor release may still change flags or output. Pin the exact version in CI and read the changelog before upgrading.

Why Aether

Microsoft retired App Center CodePush in March 2025. Aether is a drop-in successor: the same release workflow, the same client contract, and a maintained SDK (@aetherpush/react-native-code-push) that replaces react-native-code-push without code changes. You release to named channels (Staging and Production by default), roll out to a percentage of devices, and roll back when a release goes wrong. Apps can be shared with collaborators.

Full documentation lives at docs.aetherpush.com.

Install

npm install -g @aetherpush/cli

Requires Node.js 22 or later.

Quick start

  1. Create an account and sign in. register asks for your email, name, and password, then sends a verification email; click the link before signing in. login opens your browser, where you finish signing in — including any second factor — and authorize this machine.

    aether register
    aether login
  2. Create an app. This also creates its Staging and Production deployments. Print the deployment keys and wire one into your app binary.

    aether app add my-react-native-app
    aether deployment ls my-react-native-app -k
  3. Release an update. The command bundles the app and reads the target binary version from the project.

    aether release-react my-react-native-app ios
  4. Manage the release: widen a rollout, promote it, or roll it back.

    aether patch my-react-native-app Staging -r 25
    aether promote my-react-native-app Staging Production
    aether rollback my-react-native-app Production

Commands

| Command | What it does | |---|---| | register | Create a new Aether account | | login, logout | Session management | | whoami | Show the current account | | app add\|ls\|rm\|rename\|transfer | Manage apps (same-workspace transfer) | | app-transfer create\|ls\|accept\|cancel | Cross-workspace pending app transfers | | deployment add\|ls\|rm\|rename\|history\|metrics\|clear | Manage deployment channels | | release, release-react | Upload a new release | | patch | Update metadata of an existing release (rollout %, mandatory, disabled, description) | | promote | Promote a release between deployments | | rollback | Roll a deployment back to a previous release | | collaborator add\|ls\|rm | Manage app collaborators | | access-key ls\|patch\|rm | List, rename and revoke CLI access keys (created in the dashboard under Account > CLI access keys) | | api-key ls\|patch\|rm | List, rename, narrow and revoke scoped API keys for CI/CD (created in the dashboard under API Keys) | | session ls\|rm | Manage active login sessions | | debug ios\|android | Stream Aether logs from a running app |

Full reference and flags: aether <command> --help, or the CLI reference in the docs.

Hermes

release-react compiles the bundle to Hermes bytecode when the project has Hermes enabled, or when you pass -h / --useHermes. For that step the CLI runs the hermesc compiler from the project's own node_modules, checking these locations in order and using the first one that exists:

  1. node_modules/hermes-compiler (React Native 0.84 and newer)
  2. node_modules/react-native/sdks/hermesc (React Native 0.69 to 0.83)
  3. the hermesCommand path from android/app/build.gradle, if set
  4. node_modules/hermes-engine or node_modules/hermesvm (older projects)

If no compiler is found, the command fails and prints the paths it tried.

Known limitation: on Windows, some versions of the hermes-compiler package ship without a win64-bin binary. If a Hermes release fails on Windows with that path list, run it from macOS or Linux (for example in CI) instead.

Signing in

aether login opens your browser, you approve the device there, and the CLI receives its own credential. The browser handles passwords, passkeys, authenticator codes and recovery codes, so the terminal never needs to.

On a machine with no browser — over SSH, in a container, on a locked-down host — ask for a code instead. The CLI prints a short code and a URL to open anywhere else:

aether login --device

The CLI falls back to this automatically when it cannot open a browser or bind a local callback port.

For CI and other machines, keep passing a key:

aether login --accessKey=<your-api-key>

aether logout revokes the device on the server and then clears the local credential. If the server cannot be reached, the local credential is cleared anyway and the device can still be revoked from the dashboard under Account > CLI & Devices.

--password still signs in with email and password, but it is deprecated and cannot complete sign-in on accounts with multi-factor authentication.

Configuration

The credential lives in ~/.aether/credentials.json, readable only by you. Everything else — server URL, device id, account email — is in ~/.aether/cli.json. Both are created on aether login; the credential file is deleted on aether logout. A ~/.aether/config.json left by an earlier version is migrated automatically the first time you run this one.

To target a non-default server (e.g. local development):

aether login --serverUrl http://localhost:3000

CI/CD

The CLI detects CI environments through the CI variable and runs non-interactively there; --ci forces it. Ready-made pipeline templates for GitLab CI, CircleCI, Jenkins, and Bitrise live in examples/ci/, and GitHub Actions has a dedicated action, aetherpush-deploy-action. The CI/CD guides walk through each platform.

Migrating from CodePush

The migration guide covers both routes. In short: the Aether SDK is a drop-in replacement for react-native-code-push on React Native 0.76 and newer, and older apps can keep Microsoft's SDK pointed at Aether's CodePush-compatible endpoints. Existing deployment keys can be preserved with aether deployment add -k, so shipped binaries keep updating.

Links

License

MIT