u/guidorosso
Rive Editor 0.9.46
- 🚀 Export .riv files on the Free plan: every plan can now export a .riv. Files exported on the Free plan play a short Rive splash screen before your content, and paid plans export without it.
- 🎛️ Listener values drive view model properties: a View Model Change action can now write the value of the input that fired the listener: Pointer X and Pointer Y (and their deltas), Key Pressed, Text Input, Focused, a gamepad button's pressed state or value, or a stick axis. Pick it from the action's value dropdown. When the types differ, add a converter like Convert to Number to turn a button press into a number.
- 🦴 Set Parent: select objects, press Option+P (Alt+P on Windows) or right-click and choose Set Parent on the Stage or in the Hierarchy, then select the new parent. The objects keep their position and draw order, so rigging a character with many image parts no longer means dragging each one onto a bone in the Hierarchy. As requested here.
- 🖌️ Freehand fixes: clicking a Brush Spine's ink with the Bucket now recolors it. With Stabilize turned up, lifting the pen while still moving no longer ends a brush stroke in a thin needle, and the Eraser now erases all the way to where you lifted instead of stopping short.
- 🔁 Undo restores state and transition actions: undoing the delete of a state or transition now brings back its conditions and everything in its Actions list, like Report Event and View Model Change. Before, only the conditions came back.
- 📋 Duplicating state machines keeps relative binds: duplicating a state machine or a layer no longer drops conditions and actions that use Bind Relative.
- 🎬 Render Presets for state machines: a Render Preset can now render a video of a state machine, with its own fps and Duration, so you can queue the same render again with one click. Before, you had to set up a state machine render in the Render Queue each time.
- 👂 Listener Source row updates: switching a listener's Listen to between view model properties now shows or hides the Source dropdown right away, instead of only after you reselect the listener. As reported here.
- 🔗 Scripted converters in Converter Groups: a Converter Group with a scripted converter followed by a typed one, like Range Map, no longer shows the invalid converter warning when the file opens.
- 🧩 Grouping Property Groups and Effect Groups: grouping a Property Group or Effect Group with Cmd+G no longer moves it on the stage.
- 🎯 Artboard as Focus Target: a Focus Target action can now target the artboard itself.
AI Agent
- 🏹 Arrow 2 illustrations: on Voyager plans, the Rive Agent now draws illustrations with QuiverAI's Arrow 2 model, which makes cleaner shapes with fewer points.
Scripting
- 🔤 Fonts and text in scripts: scripts can now shape and draw text. Get a font with
context:font(name)or from a view model font property, then lay out styled runs with wrapping, alignment, Ellipsis overflow, and right-to-left text. Lines and glyphs come back with their positions, so a script can animate individual glyphs, andhitTest,caret, andselectionRectssupport custom text cursors.
Runtime
- 🦴 Bone-bound shapes stay filled: a bone-bound shape with a Clockwise fill no longer disappears when its rig loads folded and then unfolds (for example, inside a Component whose data-bound size starts small).
Renderer and Performance
- ⚡ Faster playback: long virtualized lists scroll much faster (1,000 rows: 2.26 ms to 0.14 ms per frame) and no longer leak memory as rows are added. Blend states now go idle once they settle (one test file spends 66% less time per frame), layout tweens and corner radius animations no longer re-solve the whole layout every frame, and fading a skinned or constrained shape no longer rebuilds its path.
- 🐯 Faster fills on Vulkan: the Ghostscript tiger (a standard vector rendering benchmark) draws 47% faster on an Adreno 750 (a common Android GPU) and 9% faster on a Mali-G715 (Pixel 8) with the Vulkan backend.
Built this with the Rive CLI last night. Spent just a few mins to get the first version going, iterated on it for about an hour. Crazy how fast you can build things like this now.
Rive for VS Code
Along with the Rive CLI we also launched a VS Code extension with syntax highlighting, linting, goto def, autocomplete, and a full debugger for RML & Scripts. The Rive CLI hosts a full language server for editors to use, this is just a thin client to marry that to VSCode.
It can also directly launch the preview window and attach the debugger to it for you (F5). Just open a folder with a rive.yaml config file in it and it'll start up the language server. All these features only turn on (including highlighting) when it detects that the workspace is a Rive project.
Animating with Rive's upcoming brush tools (everything designed, rigged, and animated in Rive)
Rive Editor 0.8.5761: constraints in the Hierarchy, Target For, Simplify paths, Select Only, stage rotation, and more
- 🔗 Constraints in the Hierarchy: constraints now show as rows nested under the component they constrain, so you can see at a glance what's constrained and select a constraint from the Hierarchy. Selecting a constraint row shows its full options in the Inspector.
- 🎯 Target For: selecting anything that other objects point at now lists them in a Target For section of the Inspector, after Constraints: constraints, clipping, draw order rules, listeners, joysticks, bone weights, text modifiers, and transition conditions. Click one to select it on the stage, or open the state machine for a listener or condition. In the Hierarchy, a reticle glyph marks rows that are a target.
- ✂️ Simplify paths: Edit Vertices gets a Simplify flyout that removes vertices while keeping the outline within a tolerance. With no vertices selected it simplifies the whole path (or every path you're editing); with a selection it simplifies only those vertices. The stage previews the result while the flyout is open. Surviving vertices keep their keys and weights.
- 👁️ Select Only and per-kind visibility: Viewport Options gains one row per kind of stage object (Bones, Targets, Stage Controls, Layouts, Shapes & Images), each with a Select Only toggle and an eyeball. Select Only limits stage selection to the chosen kinds, so you can grab a bone inside a group without hitting the artwork. The new Shapes & Images eyeball hides the artwork itself, leaving just the rig.
- 🔒 Lock Work Area: right-click the timeline and choose Lock Work Area so its handles can't be grabbed by accident, as requested here.
- ✏️ New items are ready to rename: create a view model, property, converter, enum, timeline, state machine, layer, input, listener, folder, or view model instance and its name is already selected, ready to type over. Drawing an artboard opens its title on the stage, as requested here.
- 🎨 Color your bones and targets: bones get a Style row with a color swatch under Rotation, and groups and targets get a swatch beside their existing Style dropdown, so you can color-code a rig on the stage, as requested here.
- 📍 New shapes land next to your selection: the shape tools and Pen place the new object directly above the top-most selected item, at its depth, instead of at the top of the artboard. Select a group and the new shape goes inside it. Cmd+G with nothing selected creates an empty group, ready to draw into.
- 🔄 Rotate the stage view: groundwork for the upcoming freehand brush tools, where turning the canvas matters as much as it does on paper. Twist with two fingers on the trackpad to rotate the whole view; pinch still zooms. The zoom button shows the angle once rotated, and its menu gains a Rotation field (drag to scrub, Cmd for 0.1 degree steps, click to type) plus Reset Rotation (Shift+Cmd+0). Zoom to Fit (F) also straightens the view. Hold Shift while twisting to snap to 45 degree steps, and use the lock icon in the Rotation field to keep the view from turning by accident. On Windows and the web, use the Rotation field.
- ⚡ GPU Canvas is on for everyone: out of Early Access and available in the production editor, and GPU Canvas content now plays on editor share links and in the Marketplace. See the announcement.
- 🔀 Change Source and Change Target on transitions: right-click a transition in a state machine to repoint either end without redrawing it, as requested here.
- 🧩 Fits to layout parent on Components: Components placed in a Solo inside a layout can now respect their fit and alignment settings. New Components do this by default; existing files keep their current look, and a Fits to layout parent toggle in the Inspector switches between the two.
- ⌨️ Windows shortcuts no longer die until restart: locking the screen with Win+L, or losing focus for a while, could leave the editor believing a modifier key was still held, so Ctrl+wheel zoom, Delete, Backspace, and copy or select all stopped working, as reported here and here.
- 🎬 Cloud Renderer: exports render GPU Canvas content, and MP4 colors match what you see in the editor.
- 🔑 Unkey fill and stroke colors from the Inspector: clicking the key button on a keyed color re-keyed it instead of removing the keyframe.
- 📜 Opening a file no longer keys scroll constraints: opening a file with a scroll constraint while a timeline was active could add a stray scroll offset keyframe.
- 📁 Assets panel fixes: sorting by Source no longer shows one Images or Fonts section per asset, Guide Components appear when sorting by Source or Type, and creating a folder in the file browser scrolls to it with the rename field open.
- 🌐 Web editor: the notification icon could get stuck stretched across the bottom of the stage after using Edit Vertices.
AI Agent / MCP
- 📸 Artboard snapshots: the agent can capture an image of an artboard to check its own work. Captures include Components, and the agent is told when something couldn't be drawn.
Scripting
- 🖼️ Nested GPU Canvas passes: drawing a child artboard that has its own draw scripts from a parent's draw script no longer fails with "endFrame() before returning", as reported here.
Runtime
- 👆 Zero-scale artboards don't take pointer events: an artboard scaled to exactly 0 drew nothing but its contents were still clickable.
- 📏 Older files keep their text sizing: a recent fix that made layout-controlled text match its layout slot also changed how existing files rendered, so an overflow setting that had always been inert could suddenly truncate text. Files exported before the change keep their original behavior.
- 🛡️ Safer layout animation: a layout whose easing curve failed to load now reliably falls back to linear.
- 🔎 View model instance lookups report results: looking up the main or a global view model instance on a state machine now reports success and failure through the state machine listener.
- 📉 Smaller animation instances: animation and state machine layer instances use less memory, which adds up in lists that build one state machine per row.
Renderer and Performance
- 🖌️ Image paints fully supported: stroked and feathered paths with image paints now render in every renderer mode, completing image paint support in the Rive Renderer.
Rive's GPU Canvas is now live for everyone
GPU Canvas is out of Early Access and available in the production Rive Editor for every user, starting today.
GPU Canvas is Rive's low-level GPU layer for 3D, shaders, and custom effects. It's developer-first and intentionally low-level: you write shaders once in WGSL and Rive compiles them for the platform it's running on (Metal, Vulkan, Direct3D, WebGPU, WebGL). It adds 25KB to the runtime.
What you can do
- Write custom shaders and post effects: rim light, bloom, outlines, textures, screen transitions
- Import 3D models. Write a GLTF importer in a Script and animate it on the timeline like anything else
- Use 2D artboards as live, interactive textures on 3D geometry
- Embed 3D geometry inside a 2D artboard. Layouts, dynamic text, and Data Binding still apply, so the 3D piece resizes and updates with the rest of the UI
- Build games: 3D worlds with 2D characters and our upcoming gamepad input, in the same editor as your UI
What changed since Early Access
- Deferred Rendering: Rive draws on its own thread, so heavy GPU scenes stay smooth while the rest of the app does its work. Live in the editor today, coming to the runtimes next
- MCP shader support: the Rive MCP can create and edit WGSL shaders, run diagnostics, recompile, and test them from any MCP-compatible tool. The in-editor Agent does the same, so you don't need to be a graphics programmer
- Runtime support: Web, iOS, Android, React Native, Flutter, and C++ today, with more runtimes on the way. On iOS, enable GPU Canvas on the Worker (see the Apple runtime docs). The feature-support page has the live table
- Your Early Access bug reports. Thank you!
Not web-only
This isn't a web-only 3D solution. The same file runs natively on desktop apps, games, mobile apps, consoles, TVs, and vehicles, with the same shaders compiled for whatever GPU is underneath. One runtime, everywhere Rive goes.
Getting started
- Open the production editor and create a Script.
- Choose Shader as the type.
- Start from the WGSL Shaders doc, or describe the effect to the Agent and review what it writes.
Docs: https://rive.app/docs/scripting/wgsl-shaders
Tutorials: Sanu's 3D workflow with free scripts and Laura's process walkthrough. More tutorials are also on the way, let us know what you’d most like to see.
What's next
Public libraries for the common jobs (GLTF import, lighting, render styles). We initially wanted these ready for the production release but decided to get the feature in your hands sooner.
GPU Canvas brings us closer than ever to what Rive was always meant to be: state-of-the-art visuals, motion, and interactivity, in one place. Please share with us what you build!
Coming soon: Rive CLI + free exports with splash screen on free plan
x.comRive Editor 0.8.5581 is out. Your .riv files play in Quick Look now, so hit space bar in Finder and watch. Plenty more, full details in the post.
- 🍎 Finder integration on macOS: .riv and .rev files get a document icon, and the space bar plays the animation in a Quick Look preview. Interactive state machines run in the preview: hover and click work, and the default view model is bound, so data driven graphics respond. Double-clicking a .riv opens a player window. Double-clicking a .rev asks which Workspace to use and uploads it to your Personal Files.
- 🔍 Search in the Animations panel: click the magnifier in the panel header to filter timelines and state machines, as in the Hierarchy, Data, and Assets panels, as requested here.
- 🎯 Keyframes are easier to click: the click target is one size at every zoom instead of half the key's width, and clicking between two keys selects the nearer one, as reported here.
- 🖱️ Hidden solo contents stop intercepting the pointer: with Inactive Solos off, objects inside an inactive solo were invisible but still hoverable, marquee selectable, and snappable. Bones showed it first, since nothing else culls them, as reported here.
- ➡️ Drag the arrow to set the default artboard: an arrow on the stage marks the file's default artboard. Drag it onto another artboard to make that one the default. It snaps to the artboard's top left corner on drop.
- 🧷 Assign a view model from the stage: the active artboard's header has a View Model button. Click it for the file's view models with the assigned one checked. Pick one to assign it, or pick the assigned one to clear it.
- ↩️ One undo to create an animation, state machine, or folder: creating one took two undos, since selecting the new item was journaled on its own.
- ✂️ Shapes clipped by a hidden clip source render again: a shape clipped by a hidden source went blank in the editor while the runtime clipped it correctly.
- 🧩 Text and shapes inside a Solo size to their layout again: a Text or Shape in a Solo inside a layout fell back to its authored size instead of the layout's.
- 📐 Lists in a group position their items the same as at runtime: an artboard list inside a group placed items from layout slots in the editor and free-form at runtime, so items rendered offset in files with no layout at all.
- 🗂️ A failed SVG import cleans up after itself: importing an unreadable file left hundreds of objects behind, including a stray artboard, and showed an internal error instead of saying the file could not be read. The import now rolls back what it added.
- 🎨 Icon fixes: icons with inside or outside aligned strokes rendered blank, mirrored icons lost their drop shadows and white casings, bare vector artboards clipped their own stroke caps, and open stroke details like the pen nib slit were hidden behind fills.
- 🏷️ The artboard header is now made in Rive: the title bar above each artboard is a Rive graphic, not editor UI, and renaming uses Rive's upcoming Text Input feature, with copy, cut, and paste in the field. We are rebuilding the Rive Editor in Rive, so your tools run on the runtime we ship.
- 🐛 Crash fixes: hovering a data binding popup field then switching tabs, collapsing the inspector, or changing selection; and pointer events reaching the Assets panel tree, animations header, keyframe right-click menu, or timeline after the panel closed.
MCP / AI Agent
- 🔗 Create data converters: the agent can create and reuse converters, including groups and formulas, and attach one while making a bind. A bind needing a transform, such as driving a text run from a number, takes one call.
- 🔢 List index properties: the agent can add a list index property to a view model and write the clicked item's index into a number property, so per item list behavior can be built end to end, as requested here.
- 🧬 View model typed properties resolve against the whole file: naming an existing view model skipped the property and still reported success. References resolve by id, then names in the request, then file wide, and an ambiguous name asks for an id, as reported here.
- 📦 Create groups: a group tool wraps selected objects like Cmd+G, or creates an empty group. Before, the only way was duplicating a group, as requested here.
- ▶️ Play a state machine and read the trace: the agent can run a state machine and read the console trace: frames, states entered, transitions, inputs, and events, as requested here.
Early Access
- 🌐 Editor in Spanish (wip): a Language picker in the in-file hamburger menu and the file browser account dropdown switches the editor UI live, with no reload. Untranslated text falls back to English. Very early, feedback welcome!
Runtime
- 🧠 Swapping a data bound artboard keeps Semantics (Accessibility) valid: with Semantics on, swapping the artboard in a bindable slot left a stale pointer, and the next semantic pass read freed memory. The semantic and focus trees are rebuilt and re-registered on swap.
- 🧮 Lists cost less memory: a state machine instance drops from 1,080 to 368 bytes and an artboard instance from 1,400 to 1,264, since focus, Semantics, gamepad, scripting, and event data allocate once used. A 1,000 row list paid about 2.5 MB in headers before any content existed. State machine memory is down 34% across test files.
- 📉 Smaller layout objects: LayoutComponent drops from about 1,136 to 872 bytes per instance. Paint and clip render paths allocate once a layout paints, so container layouts skip them.
Renderer and Performance
- 🎛️ Ubershaders for dynamic state draw types: the permutation pass skipped the dynamic state draw types, so no ubershader existed for them and drawing could stall while a shader compiled. Backends without dynamic state skip the precompile.
Rive AI Avatar Tutorial
In this full-project tutorial we'll be creating an AI powered avatar. We'll cover a range of features including: design, animation, data binding, the state machine, and a whole bunch of vibe coding.
Rive Editor 0.8.5520
- 📐 Guides and Guide Components: add grid, column, and row guides to any artboard, then save a set as a reusable asset and apply it anywhere.
- Adding guides: select an artboard and a Guides section appears in the Inspector. The plus button adds one, and each row has a color swatch, a type dropdown (Grid, Columns, Rows), and a flyout for that type's settings. Drag rows to reorder them.
- Making a reusable guide: next to the plus button, a second button opens a menu listing your existing Guide Components plus Create Guide Component, which moves that artboard's guides into an asset.
- Applying one: pick it from that same menu, drag the asset onto an artboard, or use Apply to All Artboards from its right-click menu in the Assets panel.
- One component, any artboard size: applied guides evaluate against each artboard's own size, so a single component fits artboards of different dimensions. Editing the component updates every artboard using it.
- Guides never export.
- 📈 Speed Graph: the Graph Editor's second mode plots how fast a property is moving instead of what its value is. Switch with the Value | Speed picker or by cycling with Shift+G. Set keyframes to Cubic Value to edit in either graph mode.
- 🎛️ Graph Editor options moved into a floating cluster: the mode picker, tangent handle fields, and Auto-Zoom / Fit buttons now live in one compact pill centered above the base of the graph.
- ✋ Multi-select and group-drag tangent handles: tangent handles in the Graph Editor are selectable in their own right, in both graph modes. Marquee or shift-click to compose a group, then drag any member to move all of them, or type an exact speed and ease into the fields that appear beside the graph. Shift-click that adds a handle keeps dragging, so composing and moving happen in one motion. On the Speed Graph, handles snap to zero so a curve can be brought to a standstill without hitting the line by eye, and Cmd defeats the snap. Escape cancels a handle drag and puts every tangent back exactly.
- 🔄 Transform a layout: layouts now rotate, scale, and take an origin like any other object. Drag the rotate and scale gizmo handles on stage, or set Origin X and Y in the Inspector's layout section. Transform and Scale constraints can now be added to a layout too. A layout's stored X and Y also offset the position the layout engine solved for it, so an absolute layout can be nudged off its slot, and its origin acts as a real anchor that every constraint positioning it respects.
- 🎯 Align and quick-set origin fixes: quick-set origin (hold Option/Alt over the alignment inspector) put the origin in the wrong place for anything nested inside a group or a transformed parent, placed it off the object entirely on rotated items, and did nothing at all on Components. All three now work, and have been extended to layout objects.
- 🔀 Mirrored vertex handles point the right way: switching a corner vertex to Mirrored produced an inverted handle you had to rotate 180 degrees to fix. Interior vertices now bisect their neighboring segments, and open endpoints use their single adjacent segment. Converting a 2000-vertex path also got faster, 425ms down to 192ms.
- 🔷 Shape Builder keeps its place in the hierarchy: results were appended to the bottom of the artboard, so every build dropped the new shape at the bottom of the layer list and pulled it out of any group its sources lived in. The result now slots directly above its frontmost source, inside that shape's parent, as reported here.
- ⌨️ Shortcuts require an exact match: an unmatched modifier no longer falls through to the plain key, so Ctrl+A on macOS stops activating the Artboard tool.
- 🎨 Gradient shapes select properly: selecting a gradient-filled shape from the timeline or hierarchy left the Fills and Strokes group missing entirely, so the color panel could not be opened.
- 🖌️ Feather on text style backgrounds: a feather on a text background did nothing, and setting it to inner corrupted the rest of the frame. Inner feather also now follows text modifiers that move glyphs, instead of holding the glyph positions from whenever the text last moved.
- 🎚️ Corner row on text backgrounds matches rectangles and layouts, reading Corner with the corners icon instead of a wrapped two-line label.
- 🧩 Constraint options open on add: adding any of the eight constraint types opens its options flyout immediately, instead of leaving you to hunt for it.
- ✏️ Rename a script by double-clicking its tab, the way animation timelines already work.
- ☁️ Cloud Renderer download progress: a progress indicator while a render downloads, so it is clear something is happening before the save dialog appears.
- 🧷 Hierarchy scrolls to the stage selection: selecting something on stage did not scroll the hierarchy panel to that row when the tree had been rebuilt or filtered.
- 📜 Inspector no longer scrolls with a text run field: scrolling over an overflowing text run box moved both the field and the whole inspector panel.
- 🔗 Bind button on narrow fields: the data binding button sat on top of the value in very narrow fields, most visibly stroke width. Fields under 80px wide now go without it.
- 🦴 Constraints survive IK rebuilds: any constraint positioning or scaling a bone above an IK tip, distance, translation, follow-path, transform, or scale, was silently dropped and the bone snapped back to its FK pose.
- 🐛 Crash fixes: deleting a selected state machine state or transition, editing a path with a detached vertex, opening the hamburger menu after a panel was disposed, dragging the work area with the Interpolation Panel open, and switching files while hovering the timeline.
AI Agent / MCP
- 🖇️ SVG import: the agent can upload an .svg and place it in a file as an editable shape hierarchy, rather than a flat image, as requested here.
- ✂️ Trim path access: the agent can add trim to a fill or stroke and read existing path effects, so it can build draw-on reveals. Trims default to 100% end rather than core's 0, which would hide the shape completely, as requested here.
- 🔀 Edit and delete transition conditions: the agent can change a condition's operation, compared value, or view model property, and delete conditions, warning when a transition is left unconditional, as requested here.
- 📤 export_file: agents on the local MCP server can export the open document to disk, For Runtime as a .riv or For Backup as a .rev.
- 📂 getCurrentFile: the agent can identify the file it is working in, its Workspace, project, and folder, its editor url, and every open tab, so an external client can tell which document it is looking at.
- 🔁 Recursive view model references rejected: asked to give several placements of one Component their own data, the agent could add a view model reference to itself, a cycle that nests forever and crashes the editor. Those writes are now refused with the reason, and the agent is steered to the right verb.
Scripting
- 🌐 Global View Models in Lua:
context:globalViewModel(name)fetches a global view model by name, andcontext:globalViewModelNames()lists what is available. - 🎨 Shader bake failures in the Problems panel: shader variants that fail to bake are reported with their diagnostics instead of failing quietly, and a
requirewritten in a form the static linker cannot see now warns. - 📚 Docs: examples for
getBlobandgetFont.
Deferred Rendering
- 🧵 Rive draws on its own thread: instead of issuing GPU work inline on the app's UI thread, each frame is recorded as a compact command stream during build and replayed on a dedicated render thread, so frame N+1 is being recorded while frame N is being drawn. This is now the only native rendering path, with no immediate mode toggle.
- Fixes the Android performance regression caused by Flutter merging its UI and platform threads, which could block the raster thread while Rive rendered.
- Fixes the OpenGL context corruption that could happen when Rive rendered alongside another native rendering library.
- Enables GPU Canvas at runtime, so scripted GPU work reaches the screen on every host rather than in the editor alone.
- Rendering output is unchanged for typical widget and file based usage, and recorded frames are now byte-for-byte deterministic between runs.
- One recording session per render context, so many textures can replay from one session and decoded images are shared automatically.
Runtime
- 🎬 Data bound keyframes resolve on every playback path: bound keyframe values only resolved when a state machine drove the animation. Joystick-driven animations, nested simple animations, and standalone animation playback showed the authored value instead of the bound one.
- 🔤 Fit font size scales the whole layout: line height, letter spacing, and paragraph spacing now scale with the font when text shrinks to fit its box, instead of keeping their authored values.
- 🧠 Smaller objects: rarely-set properties move out of every core object into a lazily allocated sidecar, so an object only pays for the fields it actually uses. Layout style writes also go straight into the layout node, removing around 220 bytes per node and a full style copy every sync.
Renderer and Performance
- 🖼 Images in RenderPaint: any paint can carry an image modulated with its color or gradient, rather than image being a separate paint type.
- 🔺 Interior triangulation for MSAA, carried by the existing curve patches so it needs no separate draw. Around +3.6% on a scene with heavy depth occlusion and +8.8% with all transparent content.
- 💾 Triangulation cache and budget: a path's interior triangulation is kept and reused on second sighting, with a 2ms per frame budget that prioritizes the highest value work, so a heavy frame cannot spend itself on triangulation.
- 🧵 Retrofitted curve triangles are emitted as strips of up to three, roughly halving the patch count.
- 🛟 Graceful Vulkan fallback: a driver that fails to create our startup pipelines used to abort the process. Rive now falls back to GL.
- 🚫 Empty segments dropped from recorded and scripted geometry, so a shape whose points all coincide, or a path built by a Lua script, cannot take the renderer down.
Export
- 🎯 WGSL shader variants ship in exported files, so wgpu backends can load them. The checkbox is on by default in the inspector; older files need WGSL checked on for WebGPU support. Shader compilation errors are surfaced to the Problems tab.
Hyzen NotAllowedError: Failed to open the device
I consistently get this error when trying to connect to the Lofree Hyzen software hub to update my firmware. I'm getting a lot of ghost keypresses and hoping to either change my settings or update the firmware, but I can't do either of those things.
The device correctly shows up but then it always has this error when I click on it. I'm connected with wired, directly to a Macbook Pro, and I also have the wireless dongle plugged in. Using Chrome.
Anybody know how to get around this?
Rive tutorial: new mesh and weighting features
JC demonstrates the new Auto Trace and Auto Weight/Smooth features designed to speed up vertex weighting and the mesh-and-bone workflow in Rive
Rive Editor 0.8.5376 — Speed Graph in Early Access
- 🎨 Text style backgrounds: add a background behind any text style, with fills, strokes, and rounded corners. Add Background Fill or Background Stroke from the text style's add popup, drag to reorder them, and set Corner Radius in the same panel. The background draws as one joined shape behind every run using that style and merges wrapped lines, and the radius is animatable and bindable. A hover effect is just a run listener keying the background color.
- ✂️ Clip to shapes with path effects: clipping to a shape whose fill uses trim, dash, or a scripted effect now uses the modified path instead of the original one. Strokes don't contribute, and an effect that resolves to nothing, like a trim at 0, clips to nothing.
- ⚙️ Workspace Options: a new Options tab in Workspace Admin (Workspace Switcher → Admin) sets policy for everyone in the Workspace. Pick a naming convention for view models and for their properties (PascalCase, camelCase, snake_case, SCREAMING_SNAKE_CASE, kebab-case, or none), and choose whether new data binds default to relative. Conventions feed the Data Panel's warning badges and the Problems tab, which now name the expected style and show an example. Admins can change them, and everyone else sees the policy they're working under.
- 🔗 The bind button is a toggle: clicking the data binding button in an inspector field now closes the popup if it is already open, and the button tints while the popup is up. It also stops blinking out when a property gets bound, and an empty bind left behind by opening and closing the popup is cleaned up.
- ✋ Free move on the vertex gizmo: the free translation circle now appears on the multi-vertex gizmo in Edit Vertices and Edit Mesh, matching the transform gizmo everywhere else, as requested here.
- 🖼 Auto Trace stays inside the image: with Padding set, a traced mesh contour could push past the image bounds. Padding also now stops before two sections facing each other across a narrow gap overlap. Existing meshes update on the next Generate.
- 🔷 Shape Builder unites tiny overlaps: dragging to merge shapes that overlap by only a pixel or two excluded the overlap instead of uniting it, as reported here.
- 🎯 No transform gizmo on artboards: selecting an artboard no longer summons the translate, rotate, and scale gizmo meant for the objects inside it. Artboard resize edges and dragging an artboard directly are unchanged.
- 🏷 Consistent state names: the Randomize Exit panel and a transition's Events panel now show a state's own name, falling back to its timeline name, instead of ignoring the name you set or showing a question mark.
- ↔️ Transition pills stay put: pills on transitions between states with long names no longer disappear or flip direction when the two states are close, and they now center correctly.
- 📋 Cmd+D inside a layout: duplicating an item in a layout compounded the layout slot offset into its position, so each copy drifted further with inconsistent gaps.
- ⌨️ Typed values are no longer clamped to the drag range: typing a value like -100 into a constraint's Strength field no longer snaps to 0. Dragging and nudging still clamp.
- 🌐 Global View Models: instances now advance in the editor, and view model properties can no longer be set on a global view model.
Early Access
- 📈 Speed Graph: a second mode for the Graph Editor that plots how fast a property is moving instead of what its value is. Two curves that look nearly identical in value space can feel completely different in motion, and that difference only shows up here. Switch with the Value | Speed picker in the graph HUD next to Auto-Zoom and Fit, from the ⋯ Timeline Options menu, or by cycling with Shift+G. Shift+F3 still toggles the graph and remembers your last mode. No new keyframe data, so files play back identically on every runtime.
AI Agent / MCP
- 🌈 Gradients: the agent can now create linear and radial gradients on any fill or stroke, convert a solid color to a gradient and back, and add or remove stops. Works on shapes, layout and artboard backgrounds, and text runs. Stop positions are percentages, the same as the inspector.
- 🧩 Component data context: the agent can set a component placement's Model and Path, bind several placements in one step, or clear them back to Inherit, as requested here.
- 🔀 Relative data binding and source paths: the agent can set the relative toggle on a bind and bind a property on a nested or referenced view model through its route, and a new command lists existing binds with their targets and paths. Requested by the community.
- 📄 upload_rev: agents on the local MCP server can bring a .rev document into Rive, either importing it into the open empty file or creating a new file in the current project.
Scripting
- 📝 File formats from scripts: scripts can claim a file extension and drive highlighting, diagnostics, completions, formatting, and a live preview pane for those documents, with text, preview, or split layouts per tab. Markdown ships built in, so every .md file gets a preview. Previews follow the editor's fonts and metrics and can embed artboards from the host file.
- 🔁 Stable identity for asset reads: reading a blob, image, or font property value returned a new wrapper every time, so a comparison against the previous read always reported a change.
Runtime
- 🦴 IK pose pop fixed: an IK chain with strength below 1 could snap to a different pose when a parent moved, because the solve reused the previous frame's blended rotation as its starting point instead of the authored one.
- 💥 Text run listener crash fixed: data bound list remaps left stale listener properties pointing at freed values, which corrupted memory and crashed on teardown.
- 📦 Layouts use 45% less memory: every layout carried a full Rectangle just to build its background path. That is 2128 bytes down to 1168 per layout, around 192 KB on a 200 layout file and more once component instances multiply it.
Renderer and Performance
- 🎞 No dithering at zero alpha: fully transparent draws were adding noise straight into the framebuffer, and it accumulated with overdraw instead of averaging out.
- 🧮 Interior triangulations are always cacheable, now independent of resolution, fill rule, and left-hand view matrices.
Rive Editor 0.8.5321
- 🌐 Global View Models: view models can now live at the file level instead of belonging to a single artboard. Create one from the Data panel's + menu under View Model → Global, and bind its properties from any artboard or component in the file. Use them as design tokens: define your colors and sizes once and restyle the whole file by changing one value (can also be used as a Library). Keep a score or cart total that every screen displays in sync, or swap all your UI copy to another language at once, with no need to wire the same values through each component by hand. Global properties show a badge in the property picker and list first when you bind.
- 🔀 Shape Builder: a new tool for combining and carving overlapping shapes, in the shape tool menu in the toolbar or with Shift+M. Select your shapes, then click a region to make it its own shape, drag across regions to merge them, or hold Alt/Option to erase.
- 🛤 Motion Path handles on the stage: select a keyed object and you can now reshape its motion path directly on the stage:
- Drag a keyframe anchor to move the keyed x/y
- Drag bezier control points to shape a segment; hold Alt/Option for independent handles
- Grab any segment and pull to bend it
- Cmd/Ctrl+click a keyframe to smooth the path through it
- 🔑 Edit multiple keyframes at once: select keyframes in the timeline, put the playhead on one of them, then edit that property in the inspector and every selected keyframe follows. Dragging or arrow keys move them all by the same amount; typing a value sets them all to it. Dragging on the stage works the same way, and Esc puts everything back.
- ⭐ Favorite files and pinned projects: right-click any file to Add to Favorites (a star shows on the file), and find them all in the new Favorites view below Recents, sortable by recently favorited, last modified, or name. Right-click a project in the sidebar to Pin it and it stays at the top, just below Personal Files.
- 🔤 Data binding for fonts is now available to everyone.
- 🏷 Tags in the playback data tree: tags now show in the Data panel's playback tree, and you can add or remove them from its right-click menu.
- 🙈 Private view model properties: property names starting with an underscore (like _internal) no longer get a naming warning, and a new Private properties option in the Data panel's right-click menu hides or shows them in the playback tree.
- ⌨️ Enter creates the property in the data binding popup's New Property tab (the + icon), instead of triggering an unrelated editor shortcut.
- 🖌 New Contour highlights correctly: clicking New Contour in mesh editing now lights up New Contour itself instead of Edit Contour above it, and a second click turns the pen off without clearing your contour.
- 📐 Ruler guide fixes: guides stay selected after you drag them off the ruler, can be grabbed right where you dropped them, and can be moved outside the artboard. The guide line and the ruler preview now line up exactly, and guide lines render crisper.
- 🪶 Feather fix: converting a fill to a stroke with Shift+X no longer carries the fill-only inner feather setting along, which caused rendering artifacts.
- ✒️ Text stroke fix: stroke thickness, cap, and join now apply to letters faded by an opacity modifier. Stroked text with a falloff used to lose its stroke in the faded range, as reported here.
- 📚 Smaller published libraries, and publishing now protects against accidentally publishing an out-of-date version of your file.
- 🎞 Cloud Renderer artifacts fixed: exports now render with 4x anti-aliasing.
- 🪟 Windows crash and hang fixed when closing the app while an animation was still rendering.
- 🎨 Artboard opacity, rotation, and scale: set them in the inspector or with rotate and scale handles right on the stage. Selection, resizing, and the artboard title all follow the transform. Works in all runtimes.
AI Agent
- 🤖 More reliable state machine tooling: listeners are created correctly on artboards and targets can be referenced by name, as reported here.
- 🔢 Animation values now use the same units you see in the editor (opacity 0-100, degrees).
- ⏳ Steadier working indicators: no more flickering, disappearing stop button, or stuck states after an error.
- 💬 Long agent conversations no longer crash after being summarized.
Rive Editor 0.8.5275
- 🎬 Data binding keyframes: Right-click any keyframe to bind its value to a View Model property. Build a "template" timeline, then fill each keyframe with different values.
- 🎯 Gizmo free move handle: a blue circle at the gizmo center. Drag it to move a selection in any direction without axis lock.
- 🔢 Opacity shortcuts: use keys 1-0 to set selection opacity in 10% steps, as requested here.
- 🤖 Agent / MCP tools
- Show/hide Layouts, as requested here
- Parametric shape creation: the agent now makes real Rectangles, Ellipses, Triangles, Polygons, and Stars (with corner radius, points, inner radius) instead of freehand paths.
- Solo and parent-validity awareness, as requested here
- 🐛 Various improvements and fixes
- Library artboards no longer disappear on update
- Opacity and layout now propagate to paused nested artboards
- Auto Trace: padding takes effect, and high alpha no longer hangs, as reported here.
- Auto Weights: joint solve for overlapping shapes rigged to the same bones
- Imported object IDs no longer collide with objects synthesized during the import batch
- Nested view model properties mint the referenced type from scripts
- Virtualized scroll sizing / overscroll fixes, plus view model listener event fixes
- Cloud Renderer SVG fixes: SVG output is no longer post-processed, and no longer double-applies the current transform to clipped content
Rive's new mesh and weighting features in action
Rive Editor 0.8.5252
- ⛹️♀️ Many new character animation/rigging features and improvements (new tutorials coming soon):
- 🖋️ Auto Trace: trace an image to generate a mesh
- 💪 Auto Weights: automatically assign bone weights to image meshes and bound vector paths
- 🎨 Edit Mesh/Vertices UX
- Contextual toolbar
- View-options row (Bounding Box Edit, Isolate, Show Weights, Deform, Show Triangles, Dim)
- Turn off Deform (or use Edit Contour) to see the undeformed mesh/path with bones at bind pose
- Ability to enter Edit Mesh/Vertices with multiple images/paths at the same time (bind multiple meshes/paths to bones at the same time)
- Bounding Box toggle for vertices, as requested here
- Lock bone weights, as requested here
- AI Agent has tooling for all these features
- 👯 Align and distribute tools for state machine states, as requested here
- 🗂️ Preview tabs (single-click opens italic, reusable tab)
- ✨ AI Agent improvements: artboard placement, animation defaults, and tool-card polish
- ⌨️ Esc returns to the Select tool from any tool
- 🎯 Add support to override artboard origin (for component instances)
- 🖋️ Pen tool: path editing improvements (edge-snap, bezier/detach gestures, selection fixes)
- 🐛Various fixes and improvements
- fix(editor): adding a listener with an event selected targets that event
- fix(editor): scripted converters no longer report invalid before scripts are parsed
- fix(editor): collapsed data panel rows no longer reopen on panel hover
- fix(editor): view model instance values should not edit their animate…
- scripting: statically link library requires
- scripting: library scope for imported scripts
- scripting: library scope follow ups
- feat(Android): Expose ViewModel Instance name on Android
- feat(renderer): Convert "ImageDrawUniforms" to "ImageDrawInstance"
- feat(renderer): Optimized scissor and clip rejection
- chore(unreal): Unreal Helpers
- feat(runtime): add requestArtboardSize to command queue
- feat(cpp): expose enum name in getProperties for cpp and js
- fix(code): avoid EOL sentinel id collisions and move trailing runs on newline
- fix(code): preserve interleaved runs when converting points to runs
- fix(editor): two crashes on console lists and text components
- fix(editor): don't create transitions when clicking overlapping states, and keep the dragged state on top
- fix(editor): block stage selection and context menu during state machine playback
- refactor(unreal): Rive Descriptor Editor Update
- chore(runtime and editor): advance cycle updates
- fix(core): don't wedge batching when a batchSync body throws
- fix(editor): Improve Agent tool visualization handling of json
- fix(editor): Fix crashes related to vertex weights
- fix(Android): Correctly handle conversion between C++ and JVM strings
- fix(editor): Dart text rendering fix
- fix(tests): Run android test apps in landscape on TVs
- fix: Text opacity modifier falloff with feathering applied
- fix(runtime): Prevent use-after-free in ScriptedDataConverter type changes
- fix(renderer) Tighten the combined draw bounds
- fix: Crash on software mode emulators
- fix(unity): Windows/D3D12 editor crash from Rive asset preview
- chore: pen tool adheres to snap-to-pixel option
- fix: VM trigger only fires once in script hosted artboard
- fix(editor): Auto Trace fields snap back on typed or dragged edits
- chore: Capture intended values with scrollIndex and scrollPercent
- fix(editor): revert bound values when preview values is toggled
- fix(editor): Agent fixes for path tool and pasting text in web
- fix(editor): make scripting vm ref counted on artboards
- fix(editor): Cmd+D only duplicates stage items
- fix: core abandon rejected changesets
- fix(web): focus bounds binding takes WasmPtr, embind cannot bind void*
- fix(runtime): Only apply the originating direction of a bidirectional bind
- refactor(unreal): small improvements
- fix(Android): Add dirtying to VMI triggers
- Fix(recorder): Use RAII for recorder extractors so initialization failures close progress pipe descriptors
- Fix(recorder): unpremultiple rgb values if translucent
- fix(scripting): decode lua colors as unsigned integers
- fix(editor): add a tooltip to the shape Length property
- fix(editor and runtime): arboard selection and state machine selection
- fix(editor): more left padding for tab bar on macOS
- Fix(peon_worker): Remove prefetch buffer on serve worker
- Fix(recorder): Pass initialFrameNumber when creating frame synchronizer
- fix(editor): double-click drill-down and path selection fixes
- fix(unreal): Unreal layout alignment fix and other small things
- fix(editor): snap created components to pixel
- fix(peon_worker): Handle vulkan initialization errors in gpu recorder