React Native Roadmap 2026-W32
Week of August 3–9, 2026
Items This Week
| # | Title | Label | Link |
|---|---|---|---|
| 1 | React Native Canvas Kit — GPU-powered Skia drawing canvas | 🟦 RN | Read |
| 2 | Vision Camera v5 — deep dive into real-time frame processing | 🟦 RN | Read |
| 3 | Fable 5 vs GPT-5.6 Sol: building Expo apps with AI | 🟧 EXPO | Read |
| 4 | TanStack Table v9 — tree-shakable architecture + TanStack Store | ⚛️ REACT | Read |
| 5 | Targate — npm package quarantine CLI for React Native supply chain | 🟦 RN | Read |
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-kitand@shopify/react-native-skiadependencies - Create a
DrawingScreen.tsxwith aStage→Layer→ shapes structure - Implement a
BrushLayerfor 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-skiainstalled 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 screensrc/components/canvas/DrawingToolbar.tsx— tool picker (brush, eraser, shapes)package.json— addreact-native-canvas-kitand@shopify/react-native-skia
Step-by-step implementation:
- Run
yarn add react-native-canvas-kit @shopify/react-native-skiathennpx pod-installfor iOS. - 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. - 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. - Inside the background Layer, render
<Rect>and<Circle>primitives withdraggableandresizableprops set totrue. - Create
DrawingToolbar.tsxwith buttons: Pencil, Eraser, Add Rect, Add Circle, Clear. - Wire the active tool state from
DrawingToolbartoDrawingScreenvia a shareduseStatehook. - 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-camerato v5 - Configure camera permissions on iOS (
Info.plist) and Android (AndroidManifest.xml) - Create a
CameraScreen.tsxwith 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 overlaysrc/hooks/useQRScanner.ts— frame processor hookios/Info.plist— add NSCameraUsageDescriptionandroid/app/src/main/AndroidManifest.xml— add CAMERA permission
Step-by-step implementation:
- Run
yarn add react-native-vision-camera react-native-vision-camera-code-scanner, thennpx pod-install. - Add
<key>NSCameraUsageDescription</key><string>Used for QR scanning</string>toios/Info.plist. - Add
<uses-permission android:name="android.permission.CAMERA" />toAndroidManifest.xml. - In
useQRScanner.ts, calluseCodeScanner({ codeTypes: ['qr'], onCodeScanned: (codes) => {...} })and return the scanner and the last detected value. - In
CameraScreen.tsx, calluseCameraPermission()and show a permission-request button if not granted. - Render
<Camera style={StyleSheet.absoluteFill} device={device} isActive={true} codeScanner={codeScanner} />. - Overlay a
<Text>with the detected QR value using anAnimated.Viewthat 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.mddocuments the prompt structure with filled examples - At least 2 generated screens compile without TypeScript errors (
tsc --noEmit) - Generated files use Expo Router typed routes (
hrefpattern) - 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 templateai-prompts/README.md— documentation and usage guideapp/(tabs)/list.tsx— sample generated List screenapp/(tabs)/detail/[id].tsx— sample generated Detail screen
Step-by-step implementation:
- Create
ai-prompts/screen-template.mdwith 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]
- Feed the template (filled for a User List screen) to Fable 5 and paste the output into
app/(tabs)/list.tsx. - Fill the template for a User Detail screen and generate
app/(tabs)/detail/[id].tsx. - Run
npx tsc --noEmitand fix any TypeScript errors. - Run
npx expo startand verify both screens render. - Document quality observations and prompt refinements in
ai-prompts/README.md.
Acceptance criteria verification checklist:
-
screen-template.mdis complete and self-contained - Both generated screens pass
tsc --noEmitwith no errors - Screens are reachable via Expo Router tab navigation
- List screen shows a
FlatListwith 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@9and@tanstack/store - Create a
DataTablecomponent 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-exploreror@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.errorwarnings 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 componentsrc/hooks/useTableStore.ts— TanStack Store for table statepackage.json— add@tanstack/react-table@9and@tanstack/store
Step-by-step implementation:
- Run
yarn add @tanstack/react-table@9 @tanstack/store. - In
useTableStore.ts, create a TanStack Store:new Store({ pageIndex: 0, pageSize: 10, sorting: [] as SortingState }). Export auseTableState()hook that subscribes withuseStore. - In
DataTable.tsx, import ONLY:createColumnHelper,useReactTable,getCoreRowModel,getSortedRowModel,getPaginationRowModel— nothing else (tree-shaking test). - Define columns using
columnHelper.accessor. - Pass
state: { sorting, pagination: { pageIndex, pageSize } }from the TanStack Store, wireonSortingChangeandonPaginationChangeto store setters. - Render rows with a
FlatListusingtable.getRowModel().rows. - Render column headers as
TouchableOpacitythat callcolumn.getToggleSortingHandler(). - Add Previous / Next
Buttoncomponents connected totable.previousPage()/table.nextPage(), disabled at boundaries. - Run
source-map-exploreron 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:checknpm 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.mddocuments 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.mdunder 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 packagesdocs/security-audit.md— findings report (ALLOW / REQUIRE_APPROVAL / BLOCK per package)package.json— add asecurity:checkscript entryREADME.md— add a "Security" section
Step-by-step implementation:
- Install globally (optional):
npm install -g targate, or usenpx targatefor one-off runs. - 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
- Run
bash scripts/audit-deps.shand capture the output. - Create
docs/security-audit.mdwith a table: Package | Version | Decision | Notes. - Add to
package.jsonscripts:"security:check": "npx targate add". - Test with
npx targate add axios(ALLOW) and a known risky package to see BLOCK / REQUIRE_APPROVAL. - Update
README.mdwith a "Security" section: beforeyarn add <package>, always runnpx targate add <package>first.
Acceptance criteria verification checklist:
-
npx targate add react-native-reanimatedreturns ALLOW with SHA-512 verification -
docs/security-audit.mdlists all audited packages with their decision and version - At least one REQUIRE_APPROVAL or BLOCK result is demonstrated in the audit log
-
README.mdSecurity section is present and explains the Targate workflow -
scripts/audit-deps.shis executable and runs without errors