Index of every page on this site: llms.txt
All skills
tristanmanchester avatar

/optimising-expo-react-native-performance

@3323bc9
Run it yourself

Diagnose and fix measured startup, rendering, scrolling, memory, media, or network regressions in Expo React Native apps. Use for a reproducible performance problem or an explicit performance audit, not speculative library swaps or blanket memoisation.

Use this Skill: https://skilld.dev/gh/tristanmanchester/agent-skills/optimising-expo-react-native-performance

Nothing lands on disk. Nothing to clean up.

Fork this Skill

Edit a local copy. It keeps the author and licence.

SKILL.md

≈74 tokens for metadata: the name and description. ≈1.1k when used: this file. ≈8.5k more on demand in 12 files.

Description uses 3.7% of example budget

Before choosing a Skill, your Agent reads its name and description. All available Skills share that space.

  • A shorter description leaves more room for other Skills. This entry exceeds our 1% size suggestion.

In our Claude Code example, all Skill names and descriptions share 8,000 characters. This Skill uses ≈295 characters, or 3.7%.

The 1% threshold is a size suggestion. Longer descriptions can still fit.

Your model, settings, and other Skills decide how much text your Agent can read.

Example settings and source

The example uses a 200k-token context and default Claude Code settings. The count includes the name, description, separators, and when_to_use when present. Codex also counts local file paths.

Skit's source and limits: Codex 0.160.1, Claude Code 2.1.292.

Improve Expo React Native performance

Start with the user's slow flow, not a list of fashionable optimisations. Preserve behaviour, accessibility, error reporting, and data correctness while improving a measured bottleneck.

Establish the experiment

Inspect the package manager and lockfile, Expo SDK, React Native and React versions, Hermes/runtime, New Architecture, router, updates configuration, and performance-sensitive dependencies. Expo's supported React Native version is the app's constraint; do not install the newest React Native independently to match an example.

Define a repeatable scenario and one primary metric: cold-start time, input latency, dropped frames, retained memory after a navigation loop, or end-to-end request latency. Add a few guardrail metrics. Agree numerical budgets from the product and target device, not invented universal thresholds.

Record commit, build configuration, device/OS, thermal state, cache state, dataset, network conditions, repetitions, and measurement method. Separate cold from warm runs. Interleave baseline and candidate runs when drift is plausible; report the distribution and sample count, not a best run or an unsupported p95.

Diagnose, change, verify

  1. Reproduce and capture a release-build baseline on representative hardware. Simulators and development builds are useful for diagnosis, not substitutes for shipping-device measurements.
  2. Use React Native DevTools for React/JS attribution in a compatible diagnostic build; native system traces and Instruments reveal main-thread, rendering, I/O, and allocation costs. Keep these evidence types distinct. See references/01-profiling-toolchain.md.
  3. Form a specific hypothesis supported by a trace or counter. Change one coherent cause, not several unrelated knobs.
  4. Repeat the same scenario and correctness checks. Keep the change only when its benefit exceeds run-to-run variation without breaking a guardrail.
  5. Add a regression check proportionate to the problem. Bundle size is not a proxy for input latency; do not claim a size gate prevents all performance regressions.

Route to the bottleneck

Evidence Investigate Reference
Long pre-interactive work or JS evaluation Critical startup path, eager imports, asset loading, update payloads references/02-startup-bundle-ota.md
Long JS tasks or repeated expensive commits State ownership, derivations, bounded scheduling, compiler coverage references/03-rendering-js-ui.md
UI stalls while JS is quiet Layout, compositing, image decoding, native animations references/03-rendering-js-ui.md
Scroll/recycling or media pressure Row identity, list API, image size/cache, video lifecycle references/04-lists-images-media.md
Retained JS heap or growing native footprint Repeated navigation, listeners, closures, media release references/01-profiling-toolchain.md
Refetch storms or blocking requests Deduplication, cache semantics, pagination, cancellation references/05-network-background.md

Current API rules: use bounded requestIdleCallback work rather than removed InteractionManager APIs. Scheduling does not move CPU work off the JS thread. FlashList v2 requires the New Architecture and automatic sizing; do not add size-estimate props. Inspect whether React Compiler already runs before installing or duplicating its configuration.

Resolve SKILL_DIR to this skill's installation directory before running bundled scripts or loading templates. Pass the target project separately; its scripts/ directory is not the skill's directory.

Deliver

Use assets/templates/perf-audit-report-template.md when a report is useful. Include the observed symptom, baseline, causal evidence, exact changes, comparable before/after results, correctness checks, trade-offs, and remaining unknowns. For source-only work, deliver hypotheses and a runnable measurement plan, not fabricated timings or a claim that the app is now faster.

Use references/00-principles-and-kpis.md for metric definitions and references/06-ci-regression.md for regression-control ideas. Treat package installation and build flags in older project configurations as things to verify against the installed SDK, not universal defaults.

Source: SKILL.md on GitHub

skilld matched fixed text patterns in SKILL.md and file names. Patterns miss obfuscated code.

skilld run checks every file with the same patterns. It asks for approval before it loads a Skill with a behavior marked Needs approval.

1 warning1mo5 checks · Risk SAFE
  • Gen Agent Trust Hub1mo

    The skill provides a legitimate and comprehensive workflow for optimizing Expo and React Native applications, including CI scripts for performance budget monitoring. The analysis identifies a low-severity risk for indirect prompt injection because the agent is instructed to ingest and process untrusted repository configuration files and reports without defined boundary markers or sanitization logic.

  • Socket1mo

    No alerts

  • Snyk1mo

    Risk: LOW · No issues

  • Runlayer8mo

    7/15 files flagged

  • ZeroLeaks6mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 3323bc9. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 weeks ago.

Steadyupdated last month
metadata
{
  "version": "3.0.0",
  "reviewed": "2026-09-13"
}
Other metadata
compatibility
An Expo React Native repository. Device benchmarks require an appropriate Android or iOS build environment; source inspection alone cannot establish a performance improvement.

README badge

README badge for tristanmanchester/agent-skills/optimising-expo-react-native-performance