react-brain
Browse decisions
React & language foundations 3App architecture 9UI 12Platform & native 9Build, test, observe, secure 6AI in React apps 3stack composerdecision recordscensusstaleness bencharchitecturechangelogmethodologyroadmap

entriesui · verified 2026-07-09 · react + react-native

SVG, vector graphics & icons (React Native)

draftedconfidence: mediumthis tier holds 50% on the public scorecard (3/19 graded · 0 overturned) →

related decisions: animation · charts

re-verified 3× — 2026-07-13 · 2026-07-09 · 2026-07-06 · changelog

recommendation

React Native → react-native-svg is the default for declarative vector graphics; import static .svg assets via react-native-svg-transformer, and pull icons from an icon set (lucide-react-native, or per-family @react-native-vector-icons/* — on Expo too, since @expo/vector-icons is deprecated in SDK 56). Drop to @shopify/react-native-skia only for GPU-accelerated / animated / custom canvas drawing beyond declarative SVG. Web → native <svg>, no library.

  • declarative vector shapes → react-native-svg
  • import designer .svg files as components → react-native-svg-transformer
  • GPU / animated / custom drawing (charts, generative visuals) → react-native-skia (see RB-E-ANIMATION / RB-E-CHARTS)
  • icons → lucide-react-native or per-family @react-native-vector-icons/* (avoid the legacy monolithic react-native-vector-icons for new work; a codemod exists — and @expo/vector-icons is deprecated in SDK 56, same migration)
  • web → native <svg>; reuse the same icon set as React components

Options & tradeoffs

the field considered — and why each one isn’t the default here

optiontradeoffevidence
react-native-svg (Software Mansion)the de-facto RN SVG primitive (v15.x, RN 0.78+); declarative <Svg>/<Path>; underpins most RN charts + icon libs; iOS/Android/macOS/Windows + RN-Web4.5M/wk · ships in 14/34
react-native-svg-transformer (kristerkari)Metro transformer to import designer .svg files directly as React components; pairs with react-native-svg970k/wk · ships in 4/34
@shopify/react-native-skiaGPU canvas — renders SVG (ImageSVG / Skia.SVG.MakeFromString, with limits: no CSS / <text> / <animate>) and does animated/custom vector drawing beyond declarative SVG; see RB-E-ANIMATION
Redraw (William Candillon) — EXPERIMENTALnext-gen 2D graphics on WebGPU/TypeGPU: variable-stroke Bézier paths, vector feathering, physically-based 2D; shaders authored as typed TS functions. Technical preview — not on npm (subscriber early access), unstable API. Watch, not a production bet
icon sets — lucide-react-native / @react-native-vector-icons/*lucide-react-native = Lucide (peer-deps react-native-svg); @react-native-vector-icons/* = per-family scoped sets; @expo/vector-icons is DEPRECATED in Expo SDK 56 — the wrapper became unnecessary, use the scoped packages directlyships in 4/34
react-native-vector-icons (legacy)the monolith is SUPERSEDED → split into per-family @react-native-vector-icons/* (v11+); a codemod migrates from it and from @expo/vector-iconsships in 4/34
web: native <svg>no library needed on React DOM; icon sets (Lucide etc.) ship as plain React components

evidence: npm weekly downloads (signals snapshot) · “ships in n/D” = adoption across the production-app census, honest denominators

Migration lines

version and deprecation lines this decision tracks — for YOUR repo's sequenced plan: the doctor or npx -y @heart-it/react-brain migrate .

react-native-vector-icons → per-family @react-native-vector-icons/* packages (official codemod) [superseded · effort S]

the monolith is superseded by scoped per-family packages (v11+); the maintainer ships a codemod covering both this and @expo/vector-icons

github.com/oblador/react-native-vector-icons/…

@expo/vector-icons → per-family @react-native-vector-icons/* packages (same codemod) [deprecated · effort S]

deprecated in Expo SDK 56 — upstream work made the wrapper unnecessary; use the scoped packages directly

expo.dev/changelog/sdk-56

npm weekly downloads (from the corpus's last signals run): react-native-svg-transformer 970k · react-native-svg 4.5M · react-native-vector-icons 517k · lucide-react-native 1.5M · @expo/vector-icons 5.8M

Verified notes

react-native-svg (Software Mansion, v15.x, RN 0.78+) is the de-facto RN SVG primitive — it underpins most RN charts (Victory Native) and icon libraries (lucide-react-native peer-depends on it). Skia renders SVG too but with limits (no CSS / <text> / <animate>); use it for GPU/custom drawing, not as the default SVG renderer. ICON-LIB SHIFT: the monolithic react-native-vector-icons is superseded by scoped @react-native-vector-icons/* packages (v11+, with a codemod). Added 2026-06-25 after the evidence-loop corpus self-audit flagged react-native-svg (used in ourpot + bitbarter) with no entry to map it to. Verified vs npm + the maintainers' repos. UPDATE 2026-07-09: Expo SDK 56 DEPRECATES @expo/vector-icons — "it will be replaced by @react-native-vector-icons/*" because "recent upstream work has made that wrapper unnecessary" (verified vs the SDK 56 changelog). The icon-lib consolidation onto the scoped packages is now complete on both bare RN and Expo.

Canonical reading

Editorial annotations on why each piece matters — the articles themselves are the originals; read them there.

Hello, Project RedrawWilliam Candillon (react-native-skia author)

Introduces Redraw — 2D primitives on WebGPU where shaders are TypeScript functions that receive geometry (tangent, arc length) to compute stroke width / feathering / material per-point, enabling physically-based 2D rendering. The Skia author's bet on WebGPU as the unified graphics runtime; experimental, but the direction RN GPU graphics is heading.

How to import SVG files in React Native using react-native-svgVijit Ail / Joseph Mawa (LogRocket)

Practical deep-dive on inline SVG, importing .svg as components via react-native-svg-transformer, SvgUri/SvgXml, and animating SVGs — the canonical how-to for the react-native-svg workflow.

Sources

Depth (in-domain rules) is owned by the react-native-best-practices skill — this entry is selection breadth.

Related in ui: styling · component-libs · animation · lists · a11y · i18n · charts · editors · maps · calendars · polish