Calibration scorecard
Every recommend.default in the corpus is a dated, falsifiable prediction with a check-by horizon (shorter for fast-moving, low-confidence domains). Adversarial challenges and live npm signals resolve them: held = 1.0 · weakened = 0.5 · overturned = 0.0, scored per confidence tier. This is the page that keeps the word “confidence” honest — an assertion becomes a measurement.
Score by confidence tier
| tier | predictions | resolved | held | weakened | overturned | score |
|---|---|---|---|---|---|---|
| high | 11 | 6 | 4 | 2 | 0 | 83% |
| medium | 20 | 7 | 3 | 4 | 0 | 71% |
| low | 14 | 7 | 2 | 5 | 0 | 64% |
Reading the numbers: 0 of 20 graded predictions have been overturned — every “weakened” verdict means the default survived an adversarial challenge but gained a real caveat, and it's deliberately scored harshly at 0.5. A modest score in the low tier is calibration working: low confidence predicts churn — the tiers earning their ordering (high above low) is the claim this page tests. Tiers marked early have too few grades to read as a trend.
Resolved predictions
react-core weakenedhigh asserted 2026-06-25 · resolved 2026-06-25
“Stay on React 19.2 and turn on React Compiler 1.0 for new code — let it handle memoization; keep existing useMemo/useCallback as escape hatches (don't strip them — removing can change the compiler's o…”
↳ don't strip useMemo when enabling Compiler; re-verify 19.2
state heldhigh asserted 2026-06-17 · resolved 2026-06-25
“Split the problem: TanStack Query for server state + Zustand for client/UI state. This is the common, low-regret 2026 pairing.”
↳ nothing overtook Zustand; local-first builds ON Query
data heldhigh asserted 2026-06-17 · resolved 2026-06-25
“TanStack Query for REST/server-state caching — the default for client-side data fetching.”
↳ TanStack Query still #1; RSC complements; Zero 1.0
nav heldmedium asserted 2026-06-25 · resolved 2026-08-18
“React Native → Expo Router if you're on Expo, else React Navigation. Web → use the meta-framework's router (see RB-E-META-FRAMEWORKS), or TanStack Router for a type-safe SPA.”
↳ re-challenge: RR 44.2M/wk vs TanStack 19.7M (2.2x) but RR 8.3.0 typegen still executes app/routes.ts (framework-mode), so the type-safe-SPA axis is unchanged
meta-frameworks weakenedmedium asserted 2026-06-25 · resolved 2026-07-09
“Web: Next.js is the safe default; choose TanStack Start when you want a less-opinionated, Vite-native RSC stack. RN/universal: Expo Router.”
↳ Next default holds (Start still RC, RSC experimental; 60x dl spike = Lovable CI); default line oversells Start as RSC stack + no-backport patch policy missing
styling weakenedmedium asserted 2026-06-25 · resolved 2026-07-09
“Web: Tailwind (pair with shadcn/ui — RB-E-COMPONENT-LIBS). React Native: NativeWind if you want Tailwind, else StyleSheet/Unistyles. Prefer zero-runtime/compiler approaches on both.”
↳ challenge: s-c v7 prerelease active but still runtime (advice holds); NativeWind TW4 skew caveat; dead react-native-tailwind pkg row fixed
animation weakenedmedium asserted 2026-06-25 · resolved 2026-08-18
“React Native → Reanimated 4 + Gesture Handler 3 for real UI-thread animation & gestures (core Animated only for trivial cases). Web (React DOM) → Motion (framer-motion's successor) for declarative lay…”
↳ challenge: default (Reanimated 4 + GH3 / Motion on web) untouched, but the 'simple fade/slide -> Moti' clause contradicted its own caveat — Moti dormant (npm 2025-01-29, no commits since 2025-03-11, still deps framer-motion ^6.5.1)
lists heldhigh asserted 2026-06-25 · resolved 2026-08-18
“RN: FlashList for large lists, FlatList otherwise, ScrollView only for <20 static items. Web: react-virtual / react-window.”
↳ challenge: web co-defaults both current (react-window 2.3.0, TanStack Virtual 3.14.9); the TRAILING flag was a label/default-text mismatch, now named as its label reads
charts weakenedlow asserted 2026-06-25 · resolved 2026-08-18
“RN: Victory Native (XL) for standard charts; react-native-skia when you need custom/realtime rendering. Web: Recharts (batteries-included) or visx (low-level D3).”
↳ challenge: RN default HELD (victory-native 382k/wk vs gifted-charts 148k/wk; Skia vs SVG substrate) — but web victory is dormant (npm 2025-01-14), label now says so
native weakenedhigh asserted 2026-06-25 · resolved 2026-06-25
“Target the New Architecture (mandatory ≥ RN 0.82). Reach for Expo Modules for most native needs; use Nitro Modules for performance-critical custom native.”
↳ Nitro pre-1.0 (pin); Turbo Modules stay in-core stable; bridge removed 0.85
media weakenedlow asserted 2026-06-25 · resolved 2026-07-09
“Camera → VisionCamera (frame processors) or expo-camera (managed); video calling → LiveKit (open-source) or a hosted SDK (Daily/Agora/Stream); real-time filters → process VisionCamera frames + GPU-com…”
↳ challenge: v5 pin ahead of reality — 85% installs on frozen v4, open iOS26/race crashes; ship-now camera caveat added
storage weakenedmedium asserted 2026-06-25 · resolved 2026-08-18
“Small key-value → react-native-mmkv (fast, synchronous). Relational/large → op-sqlite or expo-sqlite. Secrets/tokens → Keychain / secure-store, never AsyncStorage.”
↳ challenge: secrets advice was an undifferentiated pair — expo-secure-store (57.0.1, ships with SDK) vs react-native-keychain (10.0.0, no release since 2025-03-23, 180 open issues); split by runtime
native-ui heldmedium asserted 2026-06-25 · resolved 2026-09-10
“On Expo → expo-widgets for iOS widgets/Live Activities (stable in SDK 56, no native code). Bare RN → Voltra 2 (now bare-RN capable). Custom native targets / App Clips / share extensions → Expo Targets…”
↳ challenge: all three picks current + maintained (expo-widgets 57.0.18 tracking SDK 57, voltra 2.2.0 2026-08-03, @bacons/apple-targets 5.0.0 2026-07-17) — nothing beats them on the Expo/bare/custom-target axes the default splits on
games weakenedlow asserted 2026-06-25 · resolved 2026-09-10
“2D / interactive visuals → react-native-skia. Real game engine → embed Godot (react-native-godot). RN suits supplemental/interactive experiences more than AAA games.”
↳ challenge: skia 2.11.2, r3f 9.7.0, ReactVision 2.58.1 all current — but the 'real game engine' leg points at @borndotcom/react-native-godot, npm-silent since 2025-11-04 at 1.0.1 with a ~0-star repo; caveated rather than dropped, since nothing else embeds a game engine
alt-frameworks heldlow asserted 2026-06-25 · resolved 2026-09-10
“Stay on React Native unless a specific driver pushes you off it — its decade of libraries is a major advantage; Lynx and Valdi are early.”
↳ challenge: nothing has emerged to beat 'stay on RN' — ReactLynx is active (0.126.0, 2026-09-04) but still 0.x, and the Lynx 4.0.2 core release shipped an EMPTY body; Dactyl (added this pass) is a no-code axis, not a framework you migrate to
build heldhigh asserted 2026-06-25 · resolved 2026-06-25
“Web: Vite 8 (Rolldown). React Native: Metro (+ Hermes V1, precompiled iOS binaries). Monorepo: pnpm workspaces + Turborepo. Expo for managed velocity.”
↳ Vite 8 stable + Rolldown GA; napi pullback hits compiler path only
ondevice-ai weakenedlow asserted 2026-06-25 · resolved 2026-09-10
“Cross-platform on-device models → react-native-executorch; Apple-only → @react-native-ai/apple; local RAG → react-native-rag. Fast-moving (confidence: low) — validate on-device perf before committing.”
↳ challenge: executorch default HOLDS (0.10.1, active) but 'local RAG -> react-native-rag' hid a version pincer — rag still 0.9.0, repo quiet since 2026-05-30, built on the pre-0.10 API executorch now marks deprecated; @react-native-ai/apple 7mo quiet at 0.12.0
ai-ui heldlow asserted 2026-06-25 · resolved 2026-09-10
“Vercel AI SDK for streaming chat + tool-calling; assistant-ui/Tambo for prebuilt chat UI; Streamdown to render streaming markdown. Very fast-moving (confidence: low) — treat picks as current-best, not…”
↳ challenge: all four picks current (ai 7.0.97, assistant-ui 0.15.18, streamdown 2.6.0, tambo 1.3.0); TanStack AI moved 0.48->0.54 with Vercel Gateway/Sandbox adapters but is still RC, and the @tanstack/ai>=1.0.0 tripwire is the right mechanism to force the re-weigh
ai-devtools weakenedlow asserted 2026-07-09 · resolved 2026-09-10
“Give a coding agent two things: RN KNOWLEDGE — a curated skills pack (Callstack agent-skills is the broadest; add Margelo react-native-skills for camera/native depth) — and EYES+HANDS on the running a…”
↳ challenge: every pick healthy (agent-skills 1.6k*, react-native-skills 167*) but the DEFAULT ordering was stale — it led with a third-party pack while the entry's own when-clause routes Expo users first-party; default now says first-party-first
networking heldmedium asserted 2026-07-09 · resolved 2026-08-18
“Use fetch — on Expo SDK 56+ you are already on expo/fetch globally. The bigger win in most apps is the CACHE layer above it (TanStack Query, RB-E-DATA), not the client. Reach for react-native-nitro-fe…”
↳ challenge: axios at 101.7M/wk vs nitro-fetch 91k does not beat a fetch-FIRST default — the entry never recommends nitro-fetch unconditionally, and the axios when-clause already says keep it
Ledger: append-only tools/predictions.jsonl — 45 predictions to date. Unresolved ones aren't shown as wins; the score only counts what has actually been re-examined.