NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #600 most downloaded on pub.dev
Rive Flutter Runtime. This package provides runtime functionality for Rive graphics built with the Rive editor available at https://rive.app
Last release 10 days ago
28 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
139 releases · first in 2019
Bumps to rive_native: 0.2.0-dev.3. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.2.0-dev.3. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.RiveWidget. When the graphic has focusable nodes, Tab and Shift+Tab move focus into and through it and out at either end, arrow keys move focus by position, and keys and typed characters reach the focused node, so a TextInput can be edited from the keyboard. Rive focus clears when Flutter focus leaves the widget. On by default; pass keyboardFocus: false to keep a graphic out of keyboard focus.StateMachine.hasFocusNodes and StateMachine.focusState (FocusState: hasFocus, expectsKeyboardInput).File.artboardNames, the artboard names in file order.RiveWidgets on screen no longer throttle each other or stay blank under load.Factory.rive fails with a RiveFileLoaderException instead of crashing. Fall back to Factory.flutter.One column per quarter.
…and RiveLoaded.viewModelInstance as deprecated extensions (frozen, removed in a future release).
rive_native: 0.2.0-dev.2. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.RiveWidget.semantics. Pass RiveSemantics.enabled to expose semantic data authored in the Rive file to screen readers, projected into Flutter's accessibility tree, or RiveSemantics.auto to activate only when the platform requests accessibility. The default, RiveSemantics.disabled, builds nothing and costs nothing.RiveWidgetController now binds at construction - default instances for the main and every global view model - or pass the new main / globals constructor parameters to choose instances (e.g. RiveWidgetController(file, globals: {'Theme': DataBind.byInstance(theme)})). Rebind later with controller.bind({main, globals}): one rebind per call, applied as a delta on the current bindings. Debug builds warn once when bind runs before the controller's first advance - pass the configuration to the constructor instead. Read bound instances back via controller.viewModelInstance and controller.globalViewModelInstance(name) - live reads, same object every time. Read-backs are views: DataBind.byInstance and the state machine's staging calls accept only BindableViewModelInstance (what ViewModel.createInstance and its siblings return), so re-binding a read-back is a compile error - create your own instance to share state across slots or controllers (yours are never disposed by the runtime).controller.dataBind, RiveWidgetBuilder.dataBind, and RiveLoaded.viewModelInstance. See Migration below; for a bridge with no call-site changes, import 'package:rive/legacy.dart' restores controller.dataBind and RiveLoaded.viewModelInstance as deprecated extensions (frozen, removed in a future release).controller.dataBind(x) -> pass it at construction: RiveWidgetController(file, main: x); read it back via controller.viewModelInstance. The controller owns what it resolves - drop any manual dispose (byInstance instances remain yours).RiveWidgetBuilder(dataBind: DataBind.auto()) -> delete the argument; construction now binds defaults automatically.RiveWidgetBuilder(dataBind: DataBind.byInstance(x)) -> controller: (file) => RiveWidgetController(file, main: DataBind.byInstance(x)).state.viewModelInstance (on RiveLoaded) -> state.controller.viewModelInstance.ViewModel.create*, e.g. createDefaultInstance) and pass it via byInstance - caller-created instances are never disposed by the runtime.RiveWidgetBuilder no longer disposes a view model instance supplied via DataBind.byInstance; caller-owned instances survive the widget.RiveWidgetBuilder now disposes the previous controller and any view model instance it created when reconfigured (changed selectors), and when setup fails, instead of leaking them.Bumps to rive_native: 0.2.0-dev.1. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.2.0-dev.1. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.The Rive Renderer (Factory.rive) now uses deferred rendering on native platforms, and it is the only native mode. Each frame is recorded on the UI thread as a compact command stream and replayed on a dedicated render thread, so GPU work no longer blocks the UI thread. This results in substantial performance improvements, especially on Android where this new approach resolves a latent isue (see Fixes above).
Resources made with Factory.rive (paths, paints, images, text) are lightweight recording proxies that resolve during replay. Rendering behavior and output are unchanged for typical RiveWidget / file-based usage; the changes below matter when migrating advanced integrations.
Migrating:
Rive.batchAdvance and Rive.batchAdvanceAndRender (and the native batch worker). Their worker threads recorded into the command stream concurrently and corrupted it. Advance and draw each state machine on the calling thread instead.RenderTexturePainter.riveFactory names the factory the painted content was made with, so the texture attaches its recording session (a sessionless texture draws nothing on native). Defaults to Factory.rive override with the decoded file's File.riveFactory when content records elsewhere (on web this opts single-file content into the per-file session worker path), or with null when the session is managed manually.Factory.rive on native resolves to the render context's recording session. file.riveFactory == Factory.rive still holds, and resources created directly on Factory.rive record and render correctly.RenderTexture.useDeferredSession, pacing, thread stats) is available through package:rive_native/rive_deferred.dart.Bumps to rive_native: 0.1.11. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.11. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.RenderResolution to control how a Factory.rive texture sizes its backing store: display() (default — layout × device pixel ratio × ancestor paint scale), layout({scale}) (layout × device pixel ratio, ignores ancestor transforms), and fixed(width, height) (explicit physical pixels). Available on RenderTexture.widget, RiveArtboardWidget, and RiveProceduralRenderingWidget.RenderResolution.display() now accounts for ancestor transforms on web, matching native — an upscaled widget renders sharp instead of stretched. Pass RenderResolution.layout() for the previous behavior.RiveNative.instance.releaseRenderResources() to release cached render resources (web: pooled textures and the probe context), recreated on demand. No-op on other platforms.RiveNative.debugRenderTextureLogging (web): logs render-texture create/reuse/release with live WebGL context counts.display and layout are capped at 4096 logical pixels per axis (aspect preserved), preventing runaway allocations under large ancestor scales.RiveWidget.drawOrder / SharedTextureView.drawOrder on a mounted
widget now restacks the shared-texture painters. Equal drawOrders stack in
widget-tree order.Bumps to rive_native: 0.1.10. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.10. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.RiveWidget (Factory.rive) was painted during certain transitions. See https://github.com/rive-app/rive-flutter/issues/642.Factory.rive) rendering issues on Linux with later versions of Flutter (3.38+, see Flutter issue 182998)Data global not being initialized, which left view model constructors such as Data.MyViewModel.new() unavailable to scriptsBumps to rive_native: 0.1.9. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.9. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.desktop_multi_window on Windows with MicroProfile GPU initRiveWidgetController now advances and applies the state machine with zero elapsed time after pointer down/up events. This ensures intermediate state, such as a view model property set on pointer down, is processed immediately, even when a pointer down and up occur within the same frame. Set it to false to opt out.Deprecated RenderTexture.onTextureChanged in favour of addTextureChangedListener / removeTextureChangedListener, which allow multiple painters to shar…
rive_native: 0.1.8. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.Factory.rive) during parent rotation/skew animations.RivePanel painters never settling when multiple painters shared the same texture. Each painter previously owned its own ticker and the shared paint pass would re-call advance on settled siblings, accidentally reviving them. SharedRenderTexture now owns a single ticker that stops when every painter reports settled and restarts on new painters or wake notifications.RiveWidgets. The widget→panel transform now reaches the texture as a full 2D affine instead of being flattened to its scale diagonal, so the texture content matches how the Texture widget composites.RiveWidget swallowing controller swaps on a stable element (no Key) when drawing into a shared texture. The wrapping painter was bound to the original controller on first build and never rebuilt, so the new controller's state machine wasn't driving the on-screen artboard and disposing the old controller crashed at the native boundary.RiveWidget and RivePanel (Factory.rive) flickering. The texture is reused and scaled during a resize and recreated at the new size once it settles.RivePanel) content not redrawing on a window resize that didn't change a child's size (e.g. a vertical resize of a fixed-width grid) — it previously only updated after an unrelated repaint.RenderTexture.onTextureChanged in favour of addTextureChangedListener / removeTextureChangedListener, which allow multiple painters to share a single texture.RiveNativeRenderBox.textureResizeInterval to tune how often the texture is recreated while resizing.Bumps to rive_native: 0.1.7. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.7. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.Event is a sealed class and EventType gains an audio value, so exhaustive switch statements over either now require a new AudioRuntimeEvent / EventType.audio arm.AudioRuntimeEvents alongside GeneralEvent and OpenUrlEvent. Listeners that branch on event type with non-exhaustive if/is checks will see the new type pass through unhandled.SharedRenderTexture.create() to construct a user-owned shared texture independent of the RivePanel lookup. Place it in the tree with the new RiveSurface widget and attach painters by passing the same instance to RiveWidget.sharedTexture. This lets a single native texture be shared across RiveWidgets that aren't ancestor/descendant of each other — siblings, separate subtrees, or across routes (e.g. via a Provider/Riverpod).RiveSurface widget that renders the native surface of a SharedRenderTexture anywhere in the tree. Wrapped in IgnorePointer by default; set ignorePointer: false to route pointer events to the texture widget.RiveWidget.sharedTexture parameter to draw into an explicit SharedRenderTexture, bypassing the ancestor-based RivePanel lookup. Takes precedence over useSharedTexture when both are set.SharedRenderTexture gained dispose() and isDisposed. Instances created via SharedRenderTexture.create() own their underlying native texture and must be disposed by the caller; instances constructed with an external texture are not affected.setState on an ancestor of a RivePanel (or RiveSharedTexture) would allocate a new SharedRenderTexture wrapper on every rebuild, dirtying every descendant RiveWidget and detaching their painters from the previous wrapper. The wrapper instance is now stable across ancestor rebuilds, and RiveSharedTexture.updateShouldNotify compares by identity.RiveWidget drawing into a RivePanel shared texture could render at the wrong size when an ancestor Transform.scale animated. The shared-texture path now reads the live local-to-panel transform on every paint instead of relying on a cached scale that composited ancestors (RepaintBoundary, Opacity layers, PageView's internal slots) could leave stale.rive_native removeTexture method channel handler when the texture id arrived as int32_t rather than int64_t. Most commonly seen when dragging the app window between displays with different DPI settings, or when rapidly creating/disposing render textures.Bumps to rive_native: 0.1.6. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.6. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.Bumps to rive_native: 0.1.5. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.5. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.viewModelInstance parameter to File.artboardToBind, allowing a ViewModelInstance to be bound to a BindableArtboard. When provided, the view model instance is set on the artboard property in the core runtime.Bumps to rive_native: 0.1.4. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.4. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.RivePanel intercepted all pointer events. Hit testing now respects each RiveWidget's configured hitTestBehavior.scripting folder, which is now required by other build files.dart run rive_native:setup concurrency issue rive-flutter#609. Downloads now use a unique temporary directory to support concurrent CLI runners.Bumps to rive_native: 0.1.3. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.3. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.Bumps to rive_native: 0.1.2. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native: 0.1.2. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.3.28.0. The Android platform code requires the new onSurfaceCleanup and onSurfaceAvailable methods, see SurfaceProducer.enumType string getter to ViewModelInstanceEnum which returns the name of the enum (not the property name).valueStream<T> to data binding properties that are observable (implementations of ViewModelInstanceObservableValue), which returns a Stream<T>. For example:ViewModelInstanceNumber? numberProperty = viewModelInstance!.number('age');
Stream<double> stream = numberProperty!.valueStream;
Adds runtime Rive Scripting support.
rive_native: 0.1.1. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.artboard DataType enum.Major release, see the updated docs and migration guide:
Major release, see the updated docs and migration guide:
Bumps to rive_native: 0.1.0. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
rive_native:setup if the required libraries are already downloaded.setState called after dispose. Add cancellation checks to prevent stale state updates.rive.native.skipSetup=true in your app's gradle.properties. When enabled, you must manually run dart run rive_native:setup --verbose --clean --platform android to download the required libraries.Marks methods to access text runs and state machine inputs as deprecated. While this functionality won't be removed in the near future, we encourage a…
rive_native: 0.0.17. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.Fit.layout by correcting the order of artboard resizing and advancing calls. Added a new RiveArtboardLayoutMixin that provides common layout options for painters, including fit mode, alignment, and scale factor controls.isTickerActive to RivePainter.FileAssets when the owning Rive File is destroyed.textureFrameAvailable on main (platform) thread (iOS and macOS). This likely resolves crashes observed during Flutter engine teardown when using Factory.rive.Bumps to rive_native: 0.0.16. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.16. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
isTickerActive to RivePainter.3.27.0 and Dart to 3.6.0Bumps to rive_native: 0.0.15. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.15. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.14. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.14. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.13. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.13. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Factory.rive.front() on an empty vector.pdb symbol files for rive_native on Windows to assist in debugging native errors.Bumps to rive_native: 0.0.12. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.12. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Factory.rive, improving memory efficiency and performance.Factory.rive, resulting in smoother widget resizing.RivePanel would not render anything after resizing if all graphics are settled.Fit.scaleDown was not working correctly with Factory.rive.Factory.rive.Fit modes were used and the user switched to a different DPI screen.Bumps to rive_native: 0.0.11. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.11. Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
preCommitCallback for iOS and macOS.Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.10
RiveWidgets to. This can have a big performance benefit when using Factory.rive. Read more here and here .localBounds on Component.elapsedSeconds is zero.Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.9
pointerExit event logic.Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.8
Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Expose width and height getters for ImageAsset. See issue 501. This is only exposed to support older workflows. We now recommend using Data Binding images. You can also alternatively expose the width and height of the component through data binding and listen to changes.
Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.7
active is false in RiveWidgetController. See issue 495rive_native as a Pub package. rive_native now copies the native libraries to the local app build directory.Updates the Rive C++ runtime and renderer for the latest features, bug fixes, and performance improvements.
Bumps to rive_native: 0.0.6
Fixed a crash on iOS for the Flutter renderer on cleanup.
This is a significant update for Rive Flutter. We've completely removed all of the Dart code that was used for the Rive runtime and replaced it with o
This is a significant update for Rive Flutter. We've completely removed all of the Dart code that was used for the Rive runtime and replaced it with our underlying C++ Runtime.
This has resulted in significant changes to the underlying API.
Please see the migration guide, Rive Flutter documentation, and the updated example app for more information.
The core runtime code is now in rive_native. This release uses v0.0.4 of that package.
This release of Rive Flutter adds:
rive_common package and replaces it with rive_nativeNow that Rive Flutter makes use of the core Rive C++ runtime, you can expect new Rive features to be supported sooner for Rive Flutter.
Note: All your Rive graphics will still look and function the same as they did before.
Fix: Windows/Linux building. Undefined symbol hb_style_get_value, see issue 437
hb_style_get_value, see issue 437Adds the isTouchScrollEnabled property to RiveAnimation and Rive widgets. When true allows scrolling behavior to occur on Rive widgets when a touch/dr
isTouchScrollEnabled property to RiveAnimation and Rive widgets. When true allows scrolling behavior to occur on Rive widgets when a touch/drag action is performed on touch-enabled devices. Defaults to false, which means Rive will "absorb" the pointer down event and a scroll cannot be triggered if the touch occurred within a Rive Listener area. Setting to true will impact Rive's capability to handle multiple gestures simultaneously.rive_common, v0.4.14.Bump to latest rive_common, v0.4.13. Resolves issues building rive_common downstream.
rive_common, v0.4.13. Resolves issues building rive_common downstream.Expose speedMultiplier on the RiveAnimation and Rive widgets. With this you can adjust the playback speed of an animation or state machine. Thanks tgu
Avoid audio init on empty assets. See PR 431.
Add new text resizing and layout features. Resolves 422.
Reduce audio polling and unneeded runtime calculations around audio. Resolves issue 411
Update Android minSdkVersion from 16 to 19
minSdkVersion from 16 to 19kotlin_version from '1.6.10' to '1.7.10'rive.ndk.version in gradle.properties. For example: rive.ndk.version=26.3.11579264. See issue 398.web package range to web: ">=0.5.1 <2.0.0". Resolves issues 413 and 415.Fix 410 Rive not compatible with Flutter web.
Add applyWorkaroundToRiveOnOldAndroidVersions. Experimental workaround when loading native libraries on Android 6 (see this issue). The method should
applyWorkaroundToRiveOnOldAndroidVersions. Experimental workaround when loading native libraries on Android 6 (see this issue). The method should be called before using any Rive APIs.Fix 408 and 409, Rive never reaching a settled state when the widget is not visible (paint method not called).
Preparation for data binding (databinding, data binding data context, databinding add boolean).
Add key property to Rive widget.
key property to Rive widget.Add getComponentWhereOrNull on Artboard, to find a component that matches the given predicate. This can be used instead of forEachComponent as it allo
getComponentWhereOrNull on Artboard, to find a component that matches the given predicate. This can be used instead of forEachComponent as it allows exiting early.Add getBoolInput(name, path), getTriggerInput(name, path), and getNumberInput(name, path) on Artboard to set nested inputs (inputs on nested artboards
getBoolInput(name, path), getTriggerInput(name, path), and getNumberInput(name, path) on Artboard to set nested inputs (inputs on nested artboards), see the documentation.DEPRECATED: RiveFile.initializeText - use RiveFile.initialize instead. This now initializes the Rive audio, text, and layout engine. Call await RiveFi…
dart:js_interop and package:web APIs.RiveFile.initializeText - use RiveFile.initialize instead. This now initializes the Rive audio, text, and layout engine. Call await RiveFile.initialize() before doing RiveFile.import. RiveFile.asset, RiveFile.network, and RiveFile.file will call initialize automatically if it has not been initialized. Alternatively, you can also call unawaited(RiveFile.initialize()); in the main method on app start to make the first graphic load faster.Fixed an issue with TickerMode value not pausing a Rive graphic. Thanks to 'jaggernod' for the contribution.
Nothing published for this version
DEPRECATED: Extension and Type enum on FileAsset. You can create a custom maintained version, see example: https://gist.github.com/HayesGordon/5d37d3f…
Extension and Type enum on FileAsset. You can create a custom maintained version, see example: https://gist.github.com/HayesGordon/5d37d3fb26f54b2c231760c2c8685963assetResolver on RiveFile.network and class NetworkAssetResolverplay()/pause() and isPlaying to an Artboard. This completely stops the artboard from playing (including nested artboards) and stops/starts the animation ticker. Pausing an artboard can be used to reduce resources used for Rive graphics that aren't visible on screen.getBoolInput, getTriggerInput, getNumberInput, and triggerInput on StateMachineController to easily retrieve state machine inputs and fire triggers. This can be used instead of findInput and findSMI, to easily retrieve an SMIBool, SMINumber, and SMITrigger to manipulate a Rive state machine.Fixed an issue causing crashes on 32 bit devices
Object Generator adds the ability to override built-in objects with custom objects.
Adds behavior argument to RiveAnimation and Rive. An enum RiveHitTestBehavior specifies how to handle hit testing on an animation. Default is RiveHitT
behavior argument to RiveAnimation and Rive. An enum RiveHitTestBehavior specifies how to handle hit testing on an animation. Default is RiveHitTestBehavior.opaque - consuming all hit events for the artboard bounds.Support for Nested Inputs and Nested Events. See the docs on Nested Artboards.
Fixes an issue when importing interpolators.
- Elastic easing.
BREAKING: Changes to assetLoader in RiveFile. See the Rive docs on Loading Assets for updated examples.
assetLoader in RiveFile. See the Rive docs on Loading Assets for updated examples.Timeline based events with new example showing how to play audio when an event fires.
Updates to text engine to support newer version of clang on Windows.
New event system! Listen to events reported by a StateMachine via StateMachineController.addEventListener.
Refactor how hit testing is performed in RiveAnimation and Rive widgets. Pointer events (listeners) can now be enabled on the Rive widget by setting e
RiveAnimation and Rive widgets. Pointer events (listeners) can now be enabled on the Rive widget by setting enablePointerEvents to true (default is false).RiveAnimation and Rive widgets. Now using Ticker, which will allow Rive animations to respect timeDilation and TickerMode. Resolves 187, 254, 307, and 328Initializes Rive's text engine only when necessary when calling any of RiveFile.asset, RiveFile.network, or RiveFile.file.
RiveFile.asset, RiveFile.network, or RiveFile.file.RiveFile.initializeText when calling RiveFile.import directly to use text features. You can optionally only call this if you know the file needs the text engine, or you can determine if it needs it by calling RiveFile.needsTextRuntime.Your coding agent can read these notes before it upgrades. Set up the MCP server →