React Native Roadmap 2026-W32

Week of August 3–9, 2026

Items This Week

#TitleLabelLink
1React Native Canvas Kit — GPU-powered Skia drawing canvas🟦 RNRead
2Vision Camera v5 — deep dive into real-time frame processing🟦 RNRead
3Fable 5 vs GPT-5.6 Sol: building Expo apps with AI🟧 EXPORead
4TanStack Table v9 — tree-shakable architecture + TanStack Store⚛️ REACTRead
5Targate — npm package quarantine CLI for React Native supply chain🟦 RNRead

5-Day Action Plan

 


🟦 Chunk 1 — Implement a GPU-Powered Interactive Canvas with react-native-canvas-kit

Goal: Add a full-featured interactive drawing canvas (shapes, brushes, eraser, layers) to your React Native app, powered by React Native Skia via react-native-canvas-kit.

Scope:

  • Install react-native-canvas-kit and @shopify/react-native-skia dependencies
  • Create a DrawingScreen.tsx with a StageLayer → shapes structure
  • Implement a BrushLayer for freehand drawing with an eraser tool
  • Add basic shape primitives (Rect, Circle) with drag and resize gestures
  • Wire up the canvas to a simple toolbar (color picker, tool selector, clear button)

Out of scope:

  • Multi-user collaboration or cloud sync
  • Image export / save to photo library
  • Advanced undo/redo history beyond a single step

Dependencies:

  • React Native ≥ 0.72 or Expo SDK 55+
  • @shopify/react-native-skia installed and linked

Acceptance criteria:

  • User can draw freehand strokes on the canvas
  • Eraser removes pixels without affecting the background layer
  • Rect and Circle shapes can be dragged and resized
  • Canvas renders on both iOS and Android without crash
  • Web support (if the project targets web) renders correctly

Estimated effort: M

Copy/paste this prompt:

Implement the following React Native chunk for your mobile app:

Goal: Add a GPU-powered interactive drawing canvas to the app using react-native-canvas-kit (built on @shopify/react-native-skia).

Files to create/modify:

  • src/screens/DrawingScreen.tsx — main canvas screen
  • src/components/canvas/DrawingToolbar.tsx — tool picker (brush, eraser, shapes)
  • package.json — add react-native-canvas-kit and @shopify/react-native-skia

Step-by-step implementation:

  1. Run yarn add react-native-canvas-kit @shopify/react-native-skia then npx pod-install for iOS.
  2. In DrawingScreen.tsx, render a <Stage width={width} height={height}> wrapping a background <Layer> for static shapes and a <BrushLayer tool="pencil"> for freehand drawing.
  3. Add a second <BrushLayer tool="eraser"> toggled via toolbar state; the eraser uses a destination-out blend that removes pixels only from its own layer.
  4. Inside the background Layer, render <Rect> and <Circle> primitives with draggable and resizable props set to true.
  5. Create DrawingToolbar.tsx with buttons: Pencil, Eraser, Add Rect, Add Circle, Clear.
  6. Wire the active tool state from DrawingToolbar to DrawingScreen via a shared useState hook.
  7. Test on iOS and Android simulators.

Acceptance criteria verification checklist:

  • Freehand brush strokes appear in real-time on canvas
  • Eraser removes drawing strokes without clearing background
  • Shapes are repositionable via drag gesture
  • No JS errors or native crash on mount
  • Runs on iOS 15+ and Android API 26+

🟦 Chunk 2 — Integrate Vision Camera v5 for Real-Time Frame Processing

Goal: Upgrade to or add Vision Camera v5 and implement a real-time frame processor (QR code scanner), leveraging the new APIs from the This Week In React deep-dive.

Scope:

  • Install / upgrade react-native-vision-camera to v5
  • Configure camera permissions on iOS (Info.plist) and Android (AndroidManifest.xml)
  • Create a CameraScreen.tsx with a live <Camera> preview
  • Implement one frame processor (QR code detection using useCodeScanner)
  • Display the scan result overlaid on the live camera feed

Out of scope:

  • Video recording or photo capture UI
  • ML model integration beyond built-in frame processors
  • Multi-camera switching

Dependencies:

  • React Native 0.73+ or Expo SDK 55+ with dev build
  • Reanimated v3 (for Worklets engine)

Acceptance criteria:

  • Camera preview renders correctly on both iOS and Android
  • Frame processor detects QR codes in real-time (< 100 ms response latency)
  • Permission denied state is handled gracefully with an informative message
  • No native build errors after pod install / Gradle sync

Estimated effort: M

Copy/paste this prompt:

Implement the following React Native chunk for your mobile app:

Goal: Integrate Vision Camera v5 with a real-time QR code scanner using the new frame processor API.

Files to create/modify:

  • src/screens/CameraScreen.tsx — camera view with overlay
  • src/hooks/useQRScanner.ts — frame processor hook
  • ios/Info.plist — add NSCameraUsageDescription
  • android/app/src/main/AndroidManifest.xml — add CAMERA permission

Step-by-step implementation:

  1. Run yarn add react-native-vision-camera react-native-vision-camera-code-scanner, then npx pod-install.
  2. Add <key>NSCameraUsageDescription</key><string>Used for QR scanning</string> to ios/Info.plist.
  3. Add <uses-permission android:name="android.permission.CAMERA" /> to AndroidManifest.xml.
  4. In useQRScanner.ts, call useCodeScanner({ codeTypes: ['qr'], onCodeScanned: (codes) => {...} }) and return the scanner and the last detected value.
  5. In CameraScreen.tsx, call useCameraPermission() and show a permission-request button if not granted.
  6. Render <Camera style={StyleSheet.absoluteFill} device={device} isActive={true} codeScanner={codeScanner} />.
  7. Overlay a <Text> with the detected QR value using an Animated.View that fades in on detection.

Acceptance criteria verification checklist:

  • Camera preview starts when screen is focused
  • QR code value appears in the overlay when a code is scanned
  • Permission prompt fires on first launch; denied state shows a fallback message
  • Tested on a physical device (simulators lack cameras)
  • No TypeScript errors

🟧 Chunk 3 — Set Up an AI-Assisted Expo App Generation Workflow with Fable 5

Goal: Establish a structured prompt-based workflow using Fable 5 (or any capable AI model) to one-shot generate Expo app screens, validated against the benchmark methodology from the Expo Blog post.

Scope:

  • Create an ai-prompts/ directory with reusable, structured Expo screen prompts
  • Define a master prompt template covering: screen layout, navigation, state management, Expo Router typed routes
  • Generate 2 sample screens (a List screen and a Detail screen) using the template
  • Evaluate output quality against a checklist (TypeScript strict, Expo Router, NativeWind)
  • Document the template and results in ai-prompts/README.md

Out of scope:

  • Automated CI evaluation of AI output
  • Benchmarking multiple models head-to-head
  • Backend API integration in generated screens

Dependencies:

  • Expo SDK 55+ project scaffolded with Expo Router
  • Access to Fable 5 (or Claude / GPT-5.6) for code generation

Acceptance criteria:

  • ai-prompts/README.md documents the prompt structure with filled examples
  • At least 2 generated screens compile without TypeScript errors (tsc --noEmit)
  • Generated files use Expo Router typed routes (href pattern)
  • Screens render in Expo Go or a development build without runtime errors

Estimated effort: S

Copy/paste this prompt:

Implement the following React Native chunk for your mobile app:

Goal: Set up a reusable AI-prompt workflow for generating Expo screens with Fable 5 (or equivalent model), based on the benchmark methodology where each prompt is self-contained and one-shots a complete, working screen.

Files to create/modify:

  • ai-prompts/screen-template.md — the master prompt template
  • ai-prompts/README.md — documentation and usage guide
  • app/(tabs)/list.tsx — sample generated List screen
  • app/(tabs)/detail/[id].tsx — sample generated Detail screen

Step-by-step implementation:

  1. Create ai-prompts/screen-template.md with this structure:
Tech stack: Expo SDK 55, Expo Router v5, TypeScript strict mode, NativeWind v4
Screen name: [NAME]
Route: [PATH e.g. app/(tabs)/list.tsx]
Data shape: [TypeScript interface for the data]
State: [local useState / Zustand / React Query — choose one]
UI layout: [paragraph description of layout, sections, and interactions]
Navigation: [which buttons navigate to which routes, with typed href]
Edge cases: [empty state, loading state, error state]
  1. Feed the template (filled for a User List screen) to Fable 5 and paste the output into app/(tabs)/list.tsx.
  2. Fill the template for a User Detail screen and generate app/(tabs)/detail/[id].tsx.
  3. Run npx tsc --noEmit and fix any TypeScript errors.
  4. Run npx expo start and verify both screens render.
  5. Document quality observations and prompt refinements in ai-prompts/README.md.

Acceptance criteria verification checklist:

  • screen-template.md is complete and self-contained
  • Both generated screens pass tsc --noEmit with no errors
  • Screens are reachable via Expo Router tab navigation
  • List screen shows a FlatList with typed items
  • Detail screen receives and displays the [id] param
  • README explains how to reuse and extend the template

⚛️ Chunk 4 — Migrate Data Table to TanStack Table v9

Goal: Upgrade an existing data table (or implement a new one) using TanStack Table v9's tree-shakable architecture for a leaner bundle and fine-grained reactivity via TanStack Store.

Scope:

  • Install @tanstack/react-table@9 and @tanstack/store
  • Create a DataTable component importing only sorting and pagination features (no filtering, no grouping)
  • Migrate state to TanStack Store for fine-grained reactivity
  • Verify bundle size reduction with source-map-explorer or @expo/bundle-analyzer

Out of scope:

  • Grouping, aggregation, or column visibility features
  • Server-side pagination
  • Full v8 → v9 migration across the whole codebase (scope to one table)

Dependencies:

  • React 18+
  • TanStack Store (@tanstack/store) as a peer dependency of v9

Acceptance criteria:

  • Table renders with correct rows and column headers
  • Sorting toggles ascending → descending → none on column header tap
  • Pagination Previous / Next controls navigate correctly
  • Bundle analysis confirms filtering/grouping code is absent from the output
  • No console.error warnings or TypeScript errors

Estimated effort: S

Copy/paste this prompt:

Implement the following React Native chunk for your mobile app:

Goal: Implement a data table using TanStack Table v9's tree-shakable API with only sorting and pagination, backed by TanStack Store for fine-grained reactivity.

Files to create/modify:

  • src/components/DataTable.tsx — the table component
  • src/hooks/useTableStore.ts — TanStack Store for table state
  • package.json — add @tanstack/react-table@9 and @tanstack/store

Step-by-step implementation:

  1. Run yarn add @tanstack/react-table@9 @tanstack/store.
  2. In useTableStore.ts, create a TanStack Store: new Store({ pageIndex: 0, pageSize: 10, sorting: [] as SortingState }). Export a useTableState() hook that subscribes with useStore.
  3. In DataTable.tsx, import ONLY: createColumnHelper, useReactTable, getCoreRowModel, getSortedRowModel, getPaginationRowModel — nothing else (tree-shaking test).
  4. Define columns using columnHelper.accessor.
  5. Pass state: { sorting, pagination: { pageIndex, pageSize } } from the TanStack Store, wire onSortingChange and onPaginationChange to store setters.
  6. Render rows with a FlatList using table.getRowModel().rows.
  7. Render column headers as TouchableOpacity that call column.getToggleSortingHandler().
  8. Add Previous / Next Button components connected to table.previousPage() / table.nextPage(), disabled at boundaries.
  9. Run source-map-explorer on the production bundle and confirm no grouping/filtering modules.

Acceptance criteria verification checklist:

  • Table displays provided data correctly
  • Tapping a column header cycles sort: asc → desc → none
  • Pagination buttons are disabled at boundaries (first/last page)
  • TypeScript strict mode passes with no errors
  • Bundle analyzer output shows no unused TanStack Table feature modules

🟦 Chunk 5 — Audit React Native Dependencies with Targate Security CLI

Goal: Integrate the Targate CLI into the React Native project's development workflow to scan and quarantine npm packages before installation, reducing supply-chain attack risk on native dependencies (podspecs, Gradle files, prebuilt binaries).

Scope:

  • Install Targate and run a first audit on the project's key native dependencies
  • Document ALLOW / REQUIRE_APPROVAL / BLOCK results in docs/security-audit.md
  • Add a security:check npm script and document the manual workflow
  • Test by auditing one sample package to confirm the end-to-end workflow

Out of scope:

  • Automated CI integration (separate chunk)
  • Fixing vulnerabilities found (triage only in this chunk)
  • Replacing npm / yarn entirely

Dependencies:

  • Node.js ≥ 18
  • Internet access to reach the OSV (Open Source Vulnerabilities) database

Acceptance criteria:

  • npx targate add <package> runs and returns a decision (ALLOW / REQUIRE_APPROVAL / BLOCK)
  • docs/security-audit.md documents findings for at least the top 5 heaviest native dependencies
  • At least one tested package returns a REQUIRE_APPROVAL or BLOCK verdict
  • The workflow is documented in the project README.md under a "Security" section

Estimated effort: XS

Copy/paste this prompt:

Implement the following React Native chunk for your mobile app:

Goal: Set up Targate CLI for npm package security auditing in the React Native project to protect against supply-chain attacks on native dependencies (podspecs, Gradle files, prebuilt binaries checked against the OSV database).

Files to create/modify:

  • scripts/audit-deps.sh — shell script to audit key native packages
  • docs/security-audit.md — findings report (ALLOW / REQUIRE_APPROVAL / BLOCK per package)
  • package.json — add a security:check script entry
  • README.md — add a "Security" section

Step-by-step implementation:

  1. Install globally (optional): npm install -g targate, or use npx targate for one-off runs.
  2. Create scripts/audit-deps.sh:
#!/bin/bash
PACKAGES=(react-native react-native-reanimated react-native-gesture-handler react-native-screens expo)
for pkg in "${PACKAGES[@]}"; do
  echo "--- Auditing $pkg ---"
  npx targate add "$pkg" --dry-run
done
  1. Run bash scripts/audit-deps.sh and capture the output.
  2. Create docs/security-audit.md with a table: Package | Version | Decision | Notes.
  3. Add to package.json scripts: "security:check": "npx targate add".
  4. Test with npx targate add axios (ALLOW) and a known risky package to see BLOCK / REQUIRE_APPROVAL.
  5. Update README.md with a "Security" section: before yarn add <package>, always run npx targate add <package> first.

Acceptance criteria verification checklist:

  • npx targate add react-native-reanimated returns ALLOW with SHA-512 verification
  • docs/security-audit.md lists all audited packages with their decision and version
  • At least one REQUIRE_APPROVAL or BLOCK result is demonstrated in the audit log
  • README.md Security section is present and explains the Targate workflow
  • scripts/audit-deps.sh is executable and runs without errors