plugins/smedjen/skills/expo-upgrading/SKILL.md
Expo SDK version migration — upgrade workflow, breaking changes, native module compatibility, and rollback strategy.
npx skillsauth add hjemmesidekongen/ai expo-upgradingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Expo SDK upgrades are predictable but require discipline. Primary failure modes: native module incompatibility, broken config plugins, untested platform behavior. All three are avoidable with a structured pre-upgrade audit.
npx expo install expo@<version> --fix — updates the SDK and aligns all bundled package versions. Never manually bump expo-* packages individually; version mismatches cause subtle runtime failures. Then run npx expo-doctor to surface remaining issues. For bare workflow, regenerate native directories: npx expo prebuild --clean.
upgrade/sdk-<version>Each SDK ships with a new React Native version — check both changelogs. Common categories: permission API surface changes (expo-camera, expo-location), Metro config shape changes, babel-preset-expo updates, expo-router API changes. Migration guide at docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/.
expo-* modules are guaranteed compatible — install via npx expo install, never npm install expo-*@latest. For third-party modules: check the module's GitHub releases against the target RN version. If incompatible: wait for a release, pin the old SDK, or find an alternative.
Run npx expo prebuild --clean and confirm it completes without errors. --clean fully regenerates ios/ and android/ — stale native files from a partial upgrade are a common hidden failure source. Common issues: deprecated plugin options, plugin ordering conflicts, expo-modules-core API changes in custom plugins.
Physical device required — simulator misses camera, some location APIs, and push notifications. Test: permission flows, deep links, keyboard avoidance, OTA bundle receipt on old native binary (if using EAS Update).
Pre-upgrade: note the current git SHA. Mid-upgrade: git checkout main && git branch -D upgrade/sdk-<version>. Post-merge: git revert -m 1 <merge-sha>. EAS: republish last-good bundle to the production channel with eas update.
Managed workflow: never edit ios/ or android/ directly. All customization via config plugins — this keeps the project prebuild-safe across upgrades. Write custom config plugins rather than dropping to bare workflow. See references/process.md for the full upgrade command sequence, version-specific notes, common pitfalls, and anti-patterns.
development
Creates a brand from scratch through market research and interactive sparring. Runs competitive research via Perplexity, then guides the user through positioning, audience, voice, values, and content pillars. Produces the full brand guideline set at .ai/brand/{name}/. Use when building a new brand, defining brand strategy for a product, or when /våbenskjold:create is invoked.
testing
Loads brand guidelines from .ai/brand/{name}/ and makes them available to the current context. Progressive disclosure: L1 confirms brand exists, L2 loads summary, L3 loads specific files on demand. Use when a downstream skill or user needs brand context, or when /våbenskjold:apply is invoked.
documentation
Guided reinvention of an existing brand guideline. Loads current brand from .ai/brand/{name}/, identifies what to keep vs change, and walks the user through targeted evolution. Preserves brand equity while updating positioning, voice, or values. Use when refreshing a brand or when /våbenskjold:evolve is invoked.
development
Codifies an existing brand from materials, samples, and references. Analyzes provided content to extract voice patterns, values, and positioning. Produces the same guideline format as brand-strategy. Use when a brand already exists but isn't documented, or when /våbenskjold:audit is invoked.