@boomsi/react-native-svg
v15.15.5
Published
SVG library for react-native — fork of react-native-svg with Windows Fabric text rendering fixes
Maintainers
Readme
@boomsi/react-native-svg
A personal fork of
react-native-svg(software-mansion/react-native-svg) with fixes for text rendering on the Windows Fabric (new architecture) renderer. Behavior on iOS / Android / macOS and on the legacy Windows (Paper) renderer is identical to upstream.
Base version
Forked from upstream 15.15.5 (main right after Release 15.15.5, base commit 7b2c7d87). Update this section whenever syncing with upstream.
Changes vs. upstream
The Windows Fabric renderer draws the whole document through D2D1's ID2D1SvgDocument, which does not support text / tspan (they are silently ignored), so all SVG text disappears. This fork paints text on top via DirectWrite:
windows/RNSVG/Fabric/: added real renderablesTextView/TSpanView(previouslyUnsupportedSvgView);SvgViewcollectsTextRecords and paints text afterDrawSvgDocumentwithID2D1DeviceContext::DrawTextLayout(accurate baseline + textAnchor alignment).- Text→TSpan style inheritance: a
TextContextcarrying textAnchor / fontSize / fontFamily / fontWeight / fill is passed down while recursing (upstream JS wraps raw text into a prop-less<TSpan>, so the inheritance semantics were missing). - tspan coordinate semantics:
x/yon a tspan are treated as absolute values in the text coordinate system anddyas a relative increment;x/y/dx/dyonTextfeed the default origin of its children. dominant-baseline/alignment-baseline: supports central/middle, text-before-edge/hanging and text-after-edge/bottom vertical positioning; defaults to alphabetic.- Nested
<svg>: the Fabric path used to skip the whole subtree; nested svgs are now supported and their viewBox transforms accumulate into the text transform. - JS-side prop type fixes:
x/y/dx/dy/rotateinTextNativeComponent/TSpanNativeComponentchanged fromUnsafeMixed<NumberArray>toReadonlyArray<Float>to match the nativestd::vector<float>.
Full design notes, root-cause analysis and the Windows build commands live in CHANGE.md (in Chinese).
Installation
npm install @boomsi/react-native-svgUsage is identical to upstream react-native-svg and it can be used as a 1:1 drop-in replacement. Windows Fabric hosts need to build RNSVG.dll from the windows/ directory in the package (see CHANGE.md for build notes).
react-native-svg provides SVG support to React Native on iOS, Android, macOS, Windows, and a compatibility layer for the web.
Features
- Supports most SVG elements and properties (Rect, Circle, Line, Polyline, Polygon, G ...).
- Easy to convert SVG code to react-native-svg.
Installation
With expo
✅ The Expo client app comes with the native code installed!
Install the JavaScript with:
npx expo install react-native-svg📚 See the Expo docs for more info or jump ahead to Usage.
With react-native-cli
Install library
from npm
npm install react-native-svgfrom yarn
yarn add react-native-svgLink native code
cd ios && pod install
Supported react-native versions
| react-native-svg | react-native | | ---------------- | ------------ | | 3.2.0 | 0.29 | | 4.2.0 | 0.32 | | 4.3.0 | 0.33 | | 4.4.0 | 0.38 | | 4.5.0 | 0.40 | | 5.1.8 | 0.44 | | 5.2.0 | 0.45 | | 5.3.0 | 0.46 | | 5.4.1 | 0.47 | | 5.5.1 | >=0.50 | | >=6 | >=0.50 | | >=7 | >=0.57.4 | | >=8 | >=0.57.4 | | >=9 | >=0.57.4 | | >=12.3.0 | >=0.64.0 | | >=15.0.0 | >=0.70.0 | | >=15.8.0 | >=0.73.0 | | >=15.13.0 | >=0.78.0 |
Support for Fabric
Fabric is React Native's new rendering system. As of version 13.0.0 of this project, Fabric is supported only for react-native 0.69.0+. Support for earlier versions is not possible due to breaking changes in configuration.
| react-native-svg | react-native | | ---------------- | ------------ | | >=13.0.0 | 0.69.0+ | | >=13.6.0 | 0.70.0+ | | >=13.10.0 | 0.72.0+ |
Troubleshooting
Unexpected behavior
If you have unexpected behavior, please create a clean project with the latest versions of react-native and react-native-svg
react-native init CleanProject
cd CleanProject/
yarn add react-native-svg
cd ios && pod install && cd ..Make a reproduction of the problem in App.js
react-native run-ios
react-native run-androidAdding Windows support
npx react-native-windows-init --overwritereact-native run-windows
Opening issues
Verify that it is still an issue with the latest version as specified in the previous step. If so, open a new issue, include the entire App.js file, specify what platforms you've tested, and the results of running this command:
react-native infoIf you suspect that you've found a spec conformance bug, then you can test using your component in a react-native-web project by forking this codesandbox, to see how different browsers render the same content: https://codesandbox.io/s/pypn6mn3y7 If any evergreen browser with significant userbase or other svg user agent renders some svg content better, or supports more of the svg and related specs, please open an issue asap.
Usage
To check how to use the library, see USAGE.md
Known issues:
- Unable to apply focus point of RadialGradient on Android.
React Native SVG is maintained by Software Mansion
Since 2012 Software Mansion is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues. We can help you build your next dream product – Hire us.
