Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
1712514
feat: experimental iOS Rive backend with synchronous API
mfazekas Feb 9, 2026
9e99082
chore: move docs to .local/docs, remove from git
mfazekas Feb 9, 2026
e9fb0b8
refactor: remove ExperimentalFileSource from legacy backend
mfazekas Feb 9, 2026
fe7d65a
fix: restore whitespace in legacy files, remove fragile asset type gu…
mfazekas Feb 9, 2026
7e871f1
fix: share single Worker across all files, fix artboard property data…
mfazekas Feb 9, 2026
916ed2b
fix: wire up trigger property to experimental fire/stream API
mfazekas Feb 9, 2026
8e3c80d
fix: set fit after view setup to fix .layout mode on initial render
mfazekas Feb 11, 2026
ecfc8db
test: add advanced data binding harness tests
mfazekas Feb 11, 2026
b75083f
fix: guard negative index in legacy viewModelByIndex and createInstan…
mfazekas Feb 11, 2026
945b024
fix: correct trigger property listener task type signature
mfazekas Feb 11, 2026
8042598
fix: embed SPM RiveRuntime.framework via Podfile post_install hook
mfazekas Feb 11, 2026
aabb2ae
refactor: split Android into legacy/experimental backend directories
mfazekas Feb 12, 2026
354aa0b
feat: implement Android experimental backend using new app.rive.* API
mfazekas Feb 12, 2026
d73e553
feat: implement Android experimental backend with CommandQueue API
mfazekas Feb 16, 2026
2edefee
feat: migrate getEnums() from sync to async (Promise)
mfazekas Feb 17, 2026
b68693a
fix: color property overflow and test tolerance for cross-platform di…
mfazekas Feb 17, 2026
d83d286
feat: add backend property to RiveFileFactory for runtime detection
mfazekas Feb 17, 2026
66bcf3d
feat: migrate viewModelByIndex, createInstanceByIndex, viewModel to a…
mfazekas Feb 17, 2026
90b2d80
fix: lint formatting in ViewModel spec and harness test
mfazekas Feb 17, 2026
0851492
ci: add experimental runtime harness tests for iOS and Android
mfazekas Feb 18, 2026
1614960
ci: increase iOS experimental harness timeout to 90min for cold builds
mfazekas Feb 18, 2026
27e9c44
fix: handle throwing Worker() init in rive-ios 6.15.1
mfazekas Feb 18, 2026
052a3ff
fix: experimental iOS instance lookup and test guards
mfazekas Feb 19, 2026
60d1bf0
feat: add async APIs for RiveFile/ViewModel and fix experimental inst…
mfazekas Feb 19, 2026
011c713
chore: upgrade rive-ios SPM to 6.15.2
mfazekas Feb 19, 2026
18969b3
fix: only allow snakeLizard enum on android legacy backend
mfazekas Feb 19, 2026
82966e8
test: add useViewModelInstance e2e harness tests
mfazekas Feb 19, 2026
5a0c63f
fix: implement color property get/listen and fix UInt32 crash on expe…
mfazekas Feb 26, 2026
f130fdb
feat(ios): decouple SPM from experimental runtime toggle
mfazekas Mar 11, 2026
adf3408
fix: unify USE_RIVE_NEW_API flag, replace SPM with CocoaPods, fix exp…
mfazekas Mar 12, 2026
ded01e2
fix: skip autoPlay test on both experimental backends
mfazekas Mar 12, 2026
ce5e501
fix: remove unused Platform import
mfazekas Mar 12, 2026
1db6063
chore: update nitrogen generated files
mfazekas Mar 16, 2026
c4ed241
fix: use ArrayBuffer instead of ArrayBufferHolder in new HybridRiveFi…
mfazekas Mar 16, 2026
fbd3dde
feat: add async versions of viewModelCount, artboardCount, artboardNames
mfazekas Mar 16, 2026
e86aca5
feat: add async alternatives for ViewModel property value getters
mfazekas Mar 16, 2026
0fe7dd4
fix: add missing Promise import in experimental Android property file…
mfazekas Mar 16, 2026
8720ff4
ci: remove android style guide enforcement from ktlint
mfazekas Mar 17, 2026
1f0fe93
fix(kotlin): fix all ktlint violations and add lint:fix:kotlin script
mfazekas Mar 17, 2026
a525b93
ci: fail lint-kotlin job on ktlint errors
mfazekas Mar 17, 2026
3ccb8fa
feat: add explicit type field to ResolvedReferencedAsset for asset lo…
mfazekas Mar 17, 2026
205c52d
fix: format import in ReferencedAssets.ts to satisfy Prettier
mfazekas Mar 17, 2026
eabcd56
chore: re-run nitrogen to regenerate bridge code for RiveAssetType/ty…
mfazekas Mar 17, 2026
cba8e6c
fix: disable function-naming ktlint rule for Composable PascalCase fu…
mfazekas Mar 17, 2026
b738462
fix: apply ktlint auto-format to ComposeTestActivity
mfazekas Mar 17, 2026
c1f6849
fix(ios): update ExperimentalAssetLoader to use typed RiveAssetType enum
mfazekas Mar 17, 2026
01f7a73
fix(android): update ExperimentalAssetLoader to use typed RiveAssetTy…
mfazekas Mar 17, 2026
217c0f1
refactor: API cleanup — validate option, createBlankInstanceAsync ren…
mfazekas Mar 17, 2026
e8d739a
fix(ios): correct set(value:) argument label to match generated protocol
mfazekas Mar 17, 2026
a24b72a
fix(ios): createInstanceByIndex(Async) now respects the index
mfazekas Mar 18, 2026
514622b
fix: remove createInstanceByIndexAsync, fix createInstanceByIndex on …
mfazekas Mar 18, 2026
f3a1f71
fix(ios): implement propertyCount and instanceCount using runtime APIs
mfazekas Mar 18, 2026
dc1c467
test: strengthen replaceViewModel assertion to verify actual replacement
mfazekas Mar 18, 2026
70823dd
fix(ios): don't set instanceName to property path for nested VMIs
mfazekas Mar 18, 2026
dec2314
fix(android): remove VM name heuristic, throw on unsupported ops for …
mfazekas Mar 23, 2026
5292880
fix: update Podfile.lock to RiveRuntime 6.17.0 from main
mfazekas Mar 23, 2026
e81146b
chore: regenerate nitrogen bindings after rebase
mfazekas Mar 26, 2026
f3aa2d4
fix: remove duplicate async methods in legacy files, make HybridRiveV…
mfazekas Mar 26, 2026
44bdc3b
fix: add missing createInstanceAsync to experimental backends
mfazekas Mar 26, 2026
05f8848
fix: remove redundant createInstanceAsync, keep only createBlankInsta…
mfazekas Mar 26, 2026
4cb5e8d
fix: use yarn nitrogen (with postprocess), fix ktlint blank line
mfazekas Mar 26, 2026
585ad21
chore: add Issue189 reproducer and nodefaultbouncing.riv from fix/and…
mfazekas Mar 26, 2026
507461f
fix(ios-exp): skip auto-binding when artboard has no default ViewModel
mfazekas Mar 26, 2026
dddfc01
Fix "0x1 not found" error when artboard has no default ViewModel on A…
mfazekas Mar 26, 2026
ad07936
fix: enable experimental API flag, await Worker init, update Podfile.…
mfazekas Mar 27, 2026
6469954
fix: update test harnesses for useViewModelInstance {instance, error}…
mfazekas Mar 27, 2026
4995139
fix: ktlint spacing between declarations with comments
mfazekas Mar 27, 2026
965244c
test: skip Android experimental tests that need rive-android#443
mfazekas Mar 30, 2026
e168423
test: clarify skip reasons for Android experimental test guards
mfazekas Mar 30, 2026
c9c3e37
fix: clean up legacy files to match upstream, fix Issue159 error type
mfazekas Mar 30, 2026
3b57622
fix: make legacy HybridViewModel identical to main
mfazekas Mar 31, 2026
7ea43bd
feat: make experimental runtime the default, legacy opt-in via USE_RI…
mfazekas Mar 31, 2026
d075a31
refactor: rename android/src/experimental to android/src/new to match…
mfazekas Mar 31, 2026
3d3d021
fix: add missing getPropertyCountAsync/getInstanceCountAsync to new b…
mfazekas Mar 31, 2026
6547aae
chore: enable prerelease (beta) versioning for 0.5.0 release track
mfazekas Mar 31, 2026
3faf214
fix(ios): add @MainActor to RiveReactNativeView, guard stale config t…
mfazekas Apr 8, 2026
04fa5de
fix(ios): make awaitViewReady reentrant, support multiple callers
mfazekas Apr 8, 2026
0de6808
fix(android): use RuntimeException instead of Error for recoverable f…
mfazekas Apr 8, 2026
da5b760
fix: log error instead of swallowing in createInstanceByName catch
mfazekas Apr 8, 2026
2cf4225
fix(android): log warning when inferFromMagicBytes falls back to IMAG…
mfazekas Apr 8, 2026
f0f469a
fix(ios): add MainActor.assumeIsolated for calls into @MainActor Rive…
mfazekas Apr 8, 2026
b58cf7e
fix(ios): port Xcode 26 ODR workaround from main into podspec
mfazekas Apr 8, 2026
ac9feeb
fix(ios): add missing try to MainActor.assumeIsolated in afterUpdate
mfazekas Apr 8, 2026
8e9ed19
fix(ios): use onMainSync instead of MainActor.assumeIsolated for JS-c…
mfazekas Apr 8, 2026
0636cc4
fix(ios): make onMainSync provide @MainActor isolation, fix infinite …
mfazekas Apr 9, 2026
5bf8e95
fix(ios): use Result to propagate errors from onMainSync across dispa…
mfazekas Apr 9, 2026
48d5e76
fix(android): use device density for Fit.Layout default scale factor …
mfazekas Apr 14, 2026
1a1c56e
fix(android): use device density for Fit.Layout in experimental backe…
mfazekas Apr 14, 2026
d4f04e8
feat: add RiveLogger with configurable JS handler and deprecation war…
mfazekas Apr 24, 2026
59ea4fd
fix(ios): defer fit assignment until MTKView is ready in experimental…
mfazekas Apr 27, 2026
df1cb4e
feat: add RiveLog.setLogLevel() to filter log output (#232)
mfazekas Apr 29, 2026
db8f9d1
chore(ios): bump rive-ios to 6.19.1 (#233)
mfazekas Apr 29, 2026
37d2c80
fix(ios): add backend property to legacy HybridRiveFileFactory (#236)
mfazekas Apr 29, 2026
311befe
fix(ios): prevent crash on color values with high alpha (#234)
mfazekas Apr 29, 2026
1afd4b2
fix(ios): pass fit in constructor, OOB asset improvements (#237)
mfazekas Apr 29, 2026
04ae76e
feat: add async variants for ViewModelListProperty mutation methods
mfazekas Apr 30, 2026
7974649
fix: remove pinned rive-android version from example app
mfazekas Apr 30, 2026
1e4587b
chore: upgrade react-native-nitro-modules to 0.35.6
mfazekas Apr 30, 2026
d2a7079
chore: remove ComposeTestActivity and LegacyTestActivity from example…
mfazekas Apr 30, 2026
1ea65c2
chore(ios): bump rive-ios to 6.19.2
mfazekas Apr 30, 2026
2eb2f13
fix(ios): remove Xcode 26 modulemap stripping workaround (#239)
mfazekas May 4, 2026
5722b28
chore(ios): remove 'Experimental' naming and debug logs (#240)
mfazekas May 5, 2026
31c2896
fix(android): prevent draw errors on view dispose (#243)
mfazekas May 5, 2026
75e314d
fix(android): await asset registration before file load, fix dispose …
mfazekas May 6, 2026
3ac6c87
feat: add native iOS code coverage integration
mfazekas May 8, 2026
6be7e5b
fix(ios): remove stale experimental iOS test skips (#246)
mfazekas May 8, 2026
880d620
chore(android): rename ExperimentalAssetLoader to AssetLoader (#245)
mfazekas May 8, 2026
b849759
chore: add kanit_regular.ttf to expo example assets (#242)
mfazekas May 8, 2026
18bcbdb
chore(ios): bump rive-ios to 6.20.0 (#241)
mfazekas May 8, 2026
a8fd9b7
feat: add properties enumeration to ViewModel and ViewModelInstance (…
mfazekas May 12, 2026
57a8dca
chore: bump example app to React Native 0.80.3 (#254)
mfazekas May 13, 2026
91df8bf
chore: bump react-native-harness to 1.1.0 (#253)
mfazekas May 14, 2026
7400e00
test: add async API coverage tests (#258)
mfazekas May 18, 2026
0eca278
chore: upgrade react-native-harness to 1.2.0
mfazekas May 19, 2026
6a5913d
chore: fix prettier formatting
mfazekas May 20, 2026
b9a16a5
Bump RiveRuntime iOS SDK to 6.20.4 (#270)
mfazekas May 27, 2026
eb9497c
Add ViewModel property type test coverage (#273)
mfazekas May 27, 2026
dc88ec9
Add font config and asset loading tests (#274)
mfazekas May 29, 2026
4a0956e
Add fromBytes, RiveImages, log level, and view method tests (#275)
mfazekas May 29, 2026
42e7d76
Upgrade react-native-harness to 1.3.0 (#278)
mfazekas May 29, 2026
b8bca90
fix(android): use ConcurrentHashMap for listeners to prevent Concurre…
mfazekas Jun 10, 2026
9c8f57c
fix: make play/pause control the experimental render loop (iOS + Andr…
mfazekas Jun 10, 2026
0278a65
fix(android): play/pause/reset don't need UI thread dispatch (#287)
mfazekas Jun 11, 2026
04d4dc9
fix(android): remove runBlocking from property accessors (#288)
mfazekas Jun 11, 2026
f6427be
chore(ios): remove dead code in experimental runtime (#290)
mfazekas Jun 11, 2026
17674fa
fix(experimental): address review findings — coroutine scope, RiveUIV…
mfazekas Jun 11, 2026
78a68fa
feat: add setValueAsync to all scalar ViewModel property types (#291)
mfazekas Jun 12, 2026
70e34cf
Merge remote-tracking branch 'origin/main' into feat/rive-ios-experim…
mfazekas Jun 12, 2026
947544a
chore: upgrade react-native-harness to 1.4.0-rc.1
mfazekas Jun 12, 2026
d6d350d
fix: skip entry-databinding test on legacy backend (crashes Android SDK)
mfazekas Jun 12, 2026
03c0af3
fix: skip setValueAsync tests on iOS legacy (hangs due to JS thread c…
mfazekas Jun 12, 2026
ec3cc6a
fix: prettier formatting on setValueAsync guards
mfazekas Jun 12, 2026
b3b7716
Merge origin/main into feat/rive-ios-experimental
mfazekas Jun 29, 2026
9b64b82
ci(ios): fix legacy harness Xcode pin + pin iOS jobs to macos-15
mfazekas Jun 29, 2026
88008a4
fix(android): bump rive-android to 11.6.1 (fixes data-binding UAF cra…
mfazekas Jul 2, 2026
ae17b27
Merge main into feat/rive-ios-experimental
mfazekas Jul 2, 2026
ca9add8
fix(ios): build fmt pod as C++17 to fix Xcode 26.4+ consteval error (…
mfazekas Jul 3, 2026
1e0a06f
chore: merge main (0.4.14) into ios-experimental (#323)
mfazekas Jul 7, 2026
82f0351
Merge remote-tracking branch 'origin/main' into feat/rive-ios-experim…
mfazekas Jul 7, 2026
3f74182
fix(android): re-bind data on reload, honor alignment, release native…
mfazekas Jul 7, 2026
f5031c6
fix(ios): surface configure failures via onError, settle awaitViewRea…
mfazekas Jul 7, 2026
812966d
fix(lint): format DebugUtils.nitro.ts per eslint prettier config
mfazekas Jul 8, 2026
fbf61c2
fix(android): restore eager dispose on unmount for the experimental b…
mfazekas Jul 8, 2026
060b438
feat(hooks)!: drive hooks through the async native API only
mfazekas Jul 8, 2026
2005e5c
revert(hooks): keep useViewModelInstance on the sync API
mfazekas Jul 8, 2026
bfbc10a
chore(release): disable release-it npm publish while the beta line is…
mfazekas Jul 8, 2026
dc1b722
ci: include package.json in runtime-sensitive build cache keys
mfazekas Jul 8, 2026
b5be831
fix: error-listener dedupe, default-VM probe, play() vs configure rac…
mfazekas Jul 8, 2026
31ac6b7
docs(specs): document the experimental backend's unvalidated property…
mfazekas Jul 8, 2026
a95c4be
fix(ios): main-thread setValueAsync, listener retain cycle, dataBind …
mfazekas Jul 8, 2026
f71ef59
fix: bounds-check list operations, keep useRiveList length live on ex…
mfazekas Jul 8, 2026
3d57cb5
docs+fix: backend-contract documentation, getPropertiesAsync rejectio…
mfazekas Jul 8, 2026
8ced7db
fix: release referenced assets when their file is disposed (experimen…
mfazekas Jul 8, 2026
f4e3f43
fix: low-severity review items (L2, L4, L5, L6, L17, L18)
mfazekas Jul 8, 2026
afe8c80
Experiment: Expo SDK 57 example with precompiled RN XCFrameworks + CI…
mfazekas Jul 9, 2026
588d870
test(harness): guard the H2 error path and H3 reload re-bind
mfazekas Jul 9, 2026
2e50dec
docs: move backend selection to the contributor guide; clarify instan…
mfazekas Jul 9, 2026
efe96fa
feat(hooks): async instance creation via useViewModelInstance({ async…
mfazekas Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ ktlint_standard_string-template-indent = disabled
ktlint_standard_backing-property-naming = disabled
ktlint_standard_no-consecutive-comments = disabled
ktlint_standard_no-empty-first-line-in-class-body = disabled
ktlint_standard_condition-wrapping = disabled
ktlint_standard_if-else-wrapping = disabled
ktlint_standard_function-naming = disabled

[{nitrogen,rive-debug-utils/nitrogen}/generated/**/*.kt]
ktlint = disabled
124 changes: 124 additions & 0 deletions .github/workflows/bare-example.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
name: Bare example
# Build-only verification of the bare RN example (old RN version, no Expo).
# Behavioral coverage runs against the Expo 57 example in ci.yml; this keeps
# the non-Expo integration compiling without paying for it on every PR.
on:
workflow_dispatch:
schedule:
# Weekly, Monday 06:00 UTC
- cron: '0 6 * * 1'
pull_request:
paths:
- 'example/**'

jobs:
build-bare-ios:
# Pinned to macos-15 — see build-ios in ci.yml.
runs-on: macos-15
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
backend: [experimental, legacy]
env:
XCODE_VERSION: 26.3
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Use appropriate Xcode version
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}

- name: Restore cocoapods
id: cocoapods-cache
uses: actions/cache/restore@v4
with:
path: example/ios/Pods
key: ${{ runner.os }}-bare-cocoapods-${{ matrix.backend }}-${{ hashFiles('package.json', '*.podspec', 'example/ios/Podfile') }}
restore-keys: |
${{ runner.os }}-bare-cocoapods-${{ matrix.backend }}-

- name: Install cocoapods
working-directory: example
env:
USE_RIVE_LEGACY: ${{ matrix.backend == 'legacy' && '1' || '' }}
run: |
bundle install
rm -f ios/Podfile.lock ios/Pods/Manifest.lock
bundle exec pod install --project-directory=ios

- name: Save cocoapods cache
if: steps.cocoapods-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: example/ios/Pods
key: ${{ steps.cocoapods-cache.outputs.cache-primary-key }}

- name: Build iOS app
working-directory: example/ios
run: |
set -o pipefail && xcodebuild \
-derivedDataPath build \
-workspace RiveExample.xcworkspace \
-scheme RiveExample \
-sdk iphonesimulator \
-configuration Debug \
build \
CODE_SIGNING_ALLOWED=NO

build-bare-android:
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
backend: [experimental, legacy]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Install JDK
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Finalize Android SDK
run: |
/bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null"
for i in 1 2 3; do
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "ndk;27.1.12297006" && break
echo "NDK install attempt $i failed, retrying..."
sleep 10
done

- name: Enable legacy Rive backend
if: matrix.backend == 'legacy'
run: |
printf '\nUSE_RIVE_LEGACY=true\n' >> example/android/gradle.properties

- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/wrapper
~/.gradle/caches
key: ${{ runner.os }}-gradle-bare-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-bare-
${{ runner.os }}-gradle-

- name: Build Android app
working-directory: example/android
env:
JAVA_OPTS: "-XX:MaxHeapSize=6g"
run: |
./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=x86_64
Loading
Loading