Repository navigation
2.49.1
Features
Images as pointer targets
Pointer listeners can now target images, including the visible parts of a mesh or N-slice image. Images inside a targeted group also count toward the group's hit area. This requires a file exported in the .riv 7.5 format, so re-export existing content to use it. Older files keep their current hit-testing. (Change)
Blend modes on masked content
Blend modes now apply to masked shapes, so a shape masked to an image can recolor or light it. Before, every blend mode except Additive looked like Normal on masked content. Files that already use blend modes on masked content will now render differently, closer to what the Editor shows. (Change)
Fixes
- Zero-size canvas: Drawing into a canvas with a 0 width or height could cause an out-of-bounds memory access in the wasm module. The runtime now skips those frames and redraws once the canvas has a size. (Fix)
- Deleted state machines: After a state machine was deleted, events from its nested artboards could still call into it, which could crash when the artboard outlived it (for example, when list items are recycled). Deleted state machines now stop listening. (Fix)
- Clipping in artboard paints: On
@rive-app/webgl2, clipping shapes were ignored when content was drawn as an artboard paint. Clips are now kept. (Fix) - Stroke gaps: A thin gap could show between a fill and its outer stroke. The stroke now covers it. (Fix)
- Text input caret: When a field with pre-filled text was focused from code, on a state's entry, or by assistive tech, the caret went before the text, so typing went in front of it. The caret now goes after the text. (Fix)
- Data binding: Re-pointing a binding that uses a converter could leave the old view model value holding a stale reference to the converter. The converter is now unbound first. (Fix)
- Audio: A sound stopped with a fade-out couldn't be played or resumed again. It now plays and resumes normally. (Fix)
webgl2-threadsscripts: Scripts could read the wrong GPU features before the replay worker was ready. The runtime now waits for the worker's device information, up to 2 seconds, before scripts start. (Fix)
Performance
- Lists: Adding and removing list items is faster, and rows that host nested artboards are reused instead of rebuilt. (Change, Change, Change)
- Text: Text shaping results are reused, and styles that use the same font now share its variants instead of loading each one separately. (Change, Change)
Commits
- fix(runtime_wasm): skip already published packages and retry a failed npm publish
#15335 - fix(layout): respect logical left/right on absolute layouts under RTL
#15296 - fix(editor, runtime): additive strength UI pass
#15333 - feat(editor, runtime): blend masked layers with what is beneath them
#15297 - fix(runtime): Keep ClippingShape clips on WebGL2 artboard-paint composites
#15257 - fix(ore): transition only attached subresources on d3d12
#15313 - perf(scripting): hardware bounds by default only in tool builds
#15323 - fix(ore): honour sampled view mip ranges on gl
#15322 - feat(scripting): hardware bounds on windows on arm
#15318 - perf(text): share a font's variants between the styles that ask for them
#15300 - perf(runtime): reuse list rows that host nested artboards
#15304 - perf(scripting): raise the job reuse limit to 64 MB and let hosts set it
#15306 - feat(cli): pass run arguments to scripts with --arg
#15311 - feat(scripting): run scripts on windows on arm
#15317 - fix(renderer): move a recorded frame's bytes out of the session instead of copying them
#15314 - feat(scripting): flush lane logs while the main lane is stuck
#15307 - perf(runtime): set properties several layers key once a frame
#15302 - fix(scripting): mint gpu canvases before the replay worker binds and refuse multisampled reads on webgl2
#15312 - test(audio): a sound replayed after a faded stop starts from its first frame
#15315 - fix(audio): a sound stopped with a fade plays and resumes again
#15310 - chore(audio): rebase our miniaudio fork on 0.11.26
#15305 - perf(scripting): opt in to hardware bounds on mobile
#15286 - feat(metal) inkbleed
#14947 - perf(runtime): text shape reuse
#15294 - perf(runtime): list row focus and bind paths
#15292 - perf(android): faster vulkan first frame, tracked per pr on the pixel 6
#15235 - perf(scripting): skip the hardware bounds build where no reservation fits
#15271 - feat(scripting): ask the runtime what it supports
#15227 - fix(text input): put the caret after pre-filled text on focus without a press
#15258 - fix(runtime): copy Luau vector args before calls that can move the stack
#15249 - perf(scripting): hardware bounds on ios devices
#15268 - fix(renderer): fill the gap between outer strokes and fills
#15201 - perf(editor, runtime): improve converters advance performance
#15265 - fix(scripting): web parallel call leftovers
#15248 - perf(scripting): hardware bounds in the macos editor
#15228 - fix(cli): fix for wasm lane tests failing locally
#15234 - perf(scripting): direct aot calls skip the callee's entry stub and loads take their offsets as immediates
#15245 - fix(renderer): draw nothing into a zero-area frame
#15100 - perf(runtime): Improve addition and removal of list elements
#15213 - perf(runtime): reuse a hug container's measurement under limits it st…
#15202 - fix(runtime): deleted state machines stop receiving nested artboard e…
#15241 - feat(editor, runtime): support images as targets
#15119 - fix(runtime): converters stop leaving dangling dependents on view model values
#15200