React Native Skia Binaries
This repository generates and publishes prebuilt Skia binary packages for React Native Skia.
Overview
The binaries are downloaded from GitHub releases and bundled directly into npm packages. No postinstall scripts - the binaries are included in the package and ready to use immediately upon installation.
Packages
Ganesh (Standard Metal/OpenGL backend)
| Package | Platform | Description |
|---|---|---|
react-native-skia-android |
Android | All architectures (armeabi-v7a, arm64-v8a, x86, x86_64) |
react-native-skia-apple-ios |
Apple | iOS (device + simulator + Mac Catalyst) |
react-native-skia-apple-tvos |
Apple | tvOS (device + simulator) |
react-native-skia-apple-macos |
Apple | macOS (arm64 + x64) |
Graphite (Dawn/WebGPU backend)
| Package | Platform | Description |
|---|---|---|
react-native-skia-graphite-android |
Android | All architectures (armeabi-v7a, arm64-v8a, x86, x86_64) |
react-native-skia-graphite-apple-ios |
Apple | iOS (device + simulator) |
react-native-skia-graphite-apple-macos |
Apple | macOS (arm64 + x64) |
react-native-skia-graphite-headers |
Common | Graphite headers |
Usage
# Install a specific platform package
npm install react-native-skia-apple-ios
The binaries are included directly - no download happens at install time.
Configuration
The skia-config.json file contains the current Skia versions and checksums:
{
"skia": {
"version": "m144c",
"checksums": {
"android-armeabi-v7a": "...",
"apple-ios-xcframeworks": "...",
...
}
},
"skia-graphite": {
"version": "m142b",
"checksums": { ... }
}
}
Publishing New Versions
Via GitHub Actions
- Go to Actions > Publish Skia Binary Packages
- Click Run workflow
- Fill in:
- Skia version: e.g.,
m144c - NPM version: (optional) derived automatically:
m144c→144.3.0 - Graphite: Check for Graphite packages
- Dry run: Uncheck to actually publish
- Skia version: e.g.,
Local Development
# Install dependencies
npm install
# Generate ALL packages (Ganesh + Graphite) from config file
npx tsx src/generate-packages.ts --config=skia-config.json
# Generate all Ganesh packages (npm version derived: m144c → 144.3.0)
npx tsx src/generate-packages.ts --skia-version=m144c
# Generate a specific package
npx tsx src/generate-packages.ts --skia-version=m144c --package=apple-ios
# Generate Graphite packages
npx tsx src/generate-packages.ts --skia-version=m142b --graphite
# Override npm version if needed
npx tsx src/generate-packages.ts --skia-version=m144c --npm-version=144.3.1
# Verify checksums against skia-config.json
npx tsx src/verify-checksums.ts --config=skia-config.json
# Publish (from generated package directory)
cd dist/react-native-skia-apple-ios
npm publish --access public
Generated Package Structure
dist/
├── react-native-skia-android/
│ ├── package.json
│ ├── README.md
│ └── libs/
│ ├── armeabi-v7a/*.a
│ ├── arm64-v8a/*.a
│ ├── x86/*.a
│ └── x86_64/*.a
├── react-native-skia-apple-ios/
│ ├── package.json
│ ├── README.md
│ └── libs/
│ ├── libskia.xcframework/
│ └── ...
├── react-native-skia-graphite-android/
│ └── ...
└── ...
License
MIT License - see LICENSE for details.