What is react-native-svg?
The react-native-svg package allows React Native developers to render SVG images within their mobile applications. It provides a set of SVG primitives that work in a similar way to the standard React Native components. With react-native-svg, you can create complex shapes, paths, and graphics that are scalable without losing quality, which is essential for responsive design.
What are react-native-svg's main functionalities?
Drawing basic shapes
This code sample demonstrates how to draw a basic circle shape with a green fill and a blue stroke.
{"<Svg height=\"100\" width=\"100\"><Circle cx=\"50\" cy=\"50\" r=\"45\" stroke=\"blue\" strokeWidth=\"2.5\" fill=\"green\"/></Svg>"}
Creating paths
This code sample shows how to create a path using the 'Path' component, which allows for more complex shapes and lines.
{"<Svg height=\"100\" width=\"100\"><Path d=\"M40 60 A 10 10 0 0 0 60 60\" fill=\"none\" stroke=\"black\"/></Svg>"}
Applying gradients
This code sample illustrates how to apply a linear gradient to an ellipse shape.
{"<Svg height=\"100\" width=\"100\"><Defs><LinearGradient id=\"grad\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><Stop offset=\"0%\" stopColor=\"rgb(255,255,0)\" stopOpacity=\"0\" /><Stop offset=\"100%\" stopColor=\"rgb(255,0,0)\" stopOpacity=\"1\" /></LinearGradient></Defs><Ellipse cx=\"50\" cy=\"50\" rx=\"50\" ry=\"20\" fill=\"url(#grad)\"/></Svg>"}
Text rendering
This code sample shows how to render text within an SVG using the 'Text' component.
{"<Svg height=\"100\" width=\"100\"><Text x=\"50\" y=\"50\" textAnchor=\"middle\" fill=\"purple\">SVG Text</Text></Svg>"}
Other packages similar to react-native-svg
victory-native
Victory-native is a collection of components for building interactive data visualizations in React Native applications. It is built on top of react-native-svg and provides a higher-level abstraction for creating charts and graphs. While react-native-svg is more about drawing SVG elements, victory-native focuses on data representation and charting.
react-native-canvas
React-native-canvas provides a 2D drawing context similar to HTML canvas. It is not SVG-based but allows for dynamic graphics and animations. It can be more performant for complex animations but lacks the scalability of SVG.
react-native-art-svg
React-native-art-svg is another library for rendering SVG images in React Native. It is based on the ART library, which is a retained mode vector drawing system. It offers similar functionalities to react-native-svg but has a different API and is less commonly used.
react-native-svg
provides SVG support to React Native on iOS, Android, macOS, Windows, and a compatibility layer for the web.
Check out the Example app
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-svg
from yarn
yarn add react-native-svg
-
Link 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 |
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-android
Adding Windows support
npx react-native-windows-init --overwrite
react-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 info
If 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.