subwave-app-ota-update

Publishes JS-only app changes over-the-air via EAS Update to installed Expo builds.

1.3k|113|Updated May 11, 2026
One-click install
npx skills add https://github.com/perminder-klair/subwave --skill subwave-app-ota-update
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: subwave-app-ota-update
Source: https://github.com/perminder-klair/subwave/tree/main/.claude/skills/subwave-app-ota-update
Command: npx skills add https://github.com/perminder-klair/subwave --skill subwave-app-ota-update

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) components.

What problem does it solve?

Shipping a small JavaScript or TypeScript fix to an already-installed mobile app normally requires a full native build and a TestFlight or Play Store round-trip. This Skill determines whether a change is OTA-eligible, publishes it through EAS Update to the correct channel, and verifies which installed builds will actually receive it.

Core Features & Use Cases

  • OTA-eligibility decision: Inspects the git diff to distinguish JS/TS-only changes under app/src/ from native changes (dependencies, patches/, plugins/, native app.json sections) that require a new binary build.
  • Headless publishing: Runs eas update non-interactively with the correct CI=1 and --environment flags to push updates to the preview or production channel.
  • Delivery verification: Uses the included ota-delivery-check.sh script to list finished builds with their channel and runtime fingerprint, flagging which installs will receive the update and which pre-OTA builds never will.
  • Use Case: You fixed a UI bug in the SUB/WAVE app's React Native code and want testers to see it today. The Skill confirms the change is JS-only, publishes to the preview channel, then promotes to production, and tells you exactly which TestFlight builds will pick it up on their next cold start.

Quick Start

Ask the assistant to ship your latest app commit over the air to the preview channel and confirm which installed builds will receive it.

Frequently Asked Questions about subwave-app-ota-update

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I push an OTA update to an Expo app with EAS Update?

Run eas update with the target channel and a message from the app directory. In non-interactive environments use CI=1 and pass --environment matching the channel, since the --non-interactive flag is not supported by the underlying expo-cli.

How do I know if my change can ship OTA or needs a new build?

Check the diff with git log -1 --stat. If every changed path is under app/src/ (JS, TS, styles, Metro-bundled assets), it is OTA-eligible. Changes to package.json dependencies, patches/, plugins/, or native app.json sections shift the fingerprint and require a new binary build.

Will my TestFlight build receive an EAS Update?

A build receives an OTA only if its channel matches the published channel and its runtime version (fingerprint) equals the update's runtime. Builds with channel=None or runtime=None were built before OTA was configured and can never receive updates; they need a fresh install.

Why doesn't the OTA update appear immediately after publishing?

The app uses checkAutomatically ON_LOAD with fallbackToCacheTimeout 0, so launch never blocks on the update fetch. The new bundle downloads in the background and applies on the next cold start, so you must kill and relaunch the app twice to see the change.

Why does eas update fail in CI or non-interactive mode?

In non-interactive mode eas update requires the --environment flag or it aborts, and it rejects --non-interactive because the inner expo-cli does not support it. Set CI=1 and pass --environment matching your channel, such as preview or production.