Back to RAV
RAVChangelog

Changelog

Public release notes from v1.0.0 onward.

v2.5.9

Latest public
October 1, 2026
Added
  • Offline runtime in saved standalone demos — Newly saved standalone HTML embeds the validated WASM matching the selected concrete Canvas or WebGL2 runtime and disables CDN WASM fallback. After a successful export, the saved file can play without network access and uses local font fallbacks.
Changed
  • Bundled file inspection — Updated the bundled parse-once file-inspection module for runtime-v0.1.384 with file-format 7.4 support. Full inspections retain authored Range Map ranges, flags, and interpolation metadata, independent binding contexts, corrected state/transition identities and enum names, nested listener scopes, and image-asset ViewModel properties.
  • Analysis reports — Updated all bundled cross-platform analysis sidecars. HTML, Markdown, and PDF reports include an API reference, binding map, semantic rule IDs with legacy aliases, and Checks in this report coverage showing which checks ran or were skipped.
  • Standalone control selection — A fresh source defaults to all currently available exportable controls selected. The unreliable Changed Only preset is removed; branch and leaf checkboxes, Select All, and Clear remain. Checked controls determine the standalone control UI, restored current values, and active generated accessors.
  • Security dependency updates — The shipped TLS stack now resolves rustls 0.23.45. The bundled analysis sidecars are rebuilt with quick-xml 0.41.0, and the website uses Next.js 16.3.8. The legacy Node MCP lockfile also resolves patched fast-uri 3.1.8, hono 4.13.12, and ip-address 10.7.2.
Fixed
  • Scoped standalone selections — Explicit subset and Clear selections remain applicable across renderer or runtime-version changes for the same source, artboard, and ViewModel. A file, artboard, or ViewModel change safely defaults to all controls in the new authoritative hierarchy, so dialog-free exports cannot serialize stale keys.
  • Minimized-window MCP responsiveness on macOS — Command-serving WebViews no longer enter WKWebView inactivity suspension after extended minimization. Status, file open, direct standalone export, export-dialog opening, and renderer switching remain responsive while hidden; a visible export overlay still waits for a real paint.
  • Playback evaluation queue recovery — A playback-targeted rav_eval whose returned Promise remains unsettled is rejected after two seconds, before the normal child acknowledgement deadline, allowing later ordered renderer commands to proceed.
  • Live recording input timing — During a live recording, mouse movement, clicks, ViewModel edits and triggers (physical or MCP) are timestamped and applied at their matching video frame, so input stays in real time even when capture runs behind. Pointer movement is interpolated between mouse samples for smooth 60 FPS output, never across clicks, exits or ViewModel changes. Input that arrives unusually late lands on the next frame and is counted in the receipt instead of stopping the take, and Stop no longer adds an extra frame when converting the take length.
  • Standalone Node MCP startup — The separately runnable Node MCP server starts again. A syntax error in its built-in instructions had stopped it at launch since 2.5.4; startup parsing and the base tool handshake are now covered by regression checks.
Known limits
  • Live recording under capture lag — Complex lossless or alpha captures can still run below the requested frame rate, so finalizing takes longer. While a live take records, the preview responds to the mouse at least 100 ms late, and the reported lag includes that 100 ms input window. Mouse events handled after Stop are not recorded.
  • Standalone export bootstrap — Creating a new export may require the matching runtime WASM from cache or network. Existing HTML files must be re-exported, and externally referenced Rive assets are not automatically embedded.

v2.5.8

September 21, 2026
Fixed
  • Machine ID on Windows — The About window's Machine ID row and rav_entitlement_status reported "Machine identity is unavailable on this platform" on Windows, so activation could not be requested there. The id is now derived from the installation's MachineGuid on Windows, from the hardware UUID on macOS, and from /etc/machine-id elsewhere; existing activation keys are unaffected.

v2.5.7

September 19, 2026
Added
  • Machine ID in About — The Build Matrix in the About window shows this installation's machine id with a copy button. Optional capabilities are activated per machine and user account; the id is what you send when requesting one.
  • MCP rav_entitlement_status — Advertised in tools/list. Without arguments it returns the machine id. Given an activation key it verifies the key, stores it for this machine and account, and keeps it active until the key expires, so later sessions and agents need no key. The advertised tool set can change after activation; the server now declares tools.listChanged and sends notifications/tools/list_changed.
Changed
  • Left panel footer — Reads "© 2026 IVG Design · MIT License"; the runtime credit moved out of that line.
Fixed
  • Large files took minutes to inspect — The bundled file-inspection module is rebuilt with an updated object lookup implementation, removing a quadratic path introduced by an earlier inspection build. A 13 MB production file that previously ran past the inspection deadline now inspects in about a second, and the exported timeline data lists only data-bound keyframes again.
  • Timeline scrubber jitter — During linear-animation playback the current-time indicator oscillated back and forth by a frame or two. The host smooths the indicator between child clock samples; a second, throttled state broadcast carried an older snapshot of the same clock and was allowed to move the indicator backward. The presented time is now monotonic while a timeline plays, late samples only slow it, and real rewinds such as loop restarts and seeks still apply immediately.
  • Timelines authored at a speed other than 1× — Rive timelines carry a playback multiplier, and many production files use it (0.4×, 0.2×, even 0.02× and reversed −1×). The scrubber assumed 1×, so its indicator ran ahead of the real clock and snapped back. The child now reports the authored speed, the indicator advances at that speed, the readout shows the multiplier (for example "12 / 240 FR · ×0.2"), and reversed timelines keep left-to-right travel with the frame and time values, ruler and slider counting down.
  • Stale timeline wrapper after switching artboards — When two artboards share an animation name, the runtime keeps the previous artboard's wrapper with a frozen clock; the child could report that frozen clock instead of the live one. Movement is now tracked per wrapper, so a frozen wrapper is never chosen while the live one advances.
  • Scrubbing ran the animation instead of seeking — Grabbing the playhead now pauses playback, and each drag position seeks the timeline to exactly that frame. Previously the runtime's scrub helper redrew with the real time elapsed since the last frame on every drag event, so nested artboards and state machines kept advancing while the playhead was dragged, and the scrub value was scaled by the authored speed, so a 0.2× timeline dragged to 2 s landed at 0.4 s and snapped back. Seeks now queue the request on the paused wrapper (divided by the authored speed), render one explicit microsecond frame so the pose repaints, and stop a hair short of the end of a looping timeline so the last frame stays on screen instead of wrapping to frame 0. The readout keeps its ×speed suffix after a seek.
  • Ping-pong timelines snapped on the return leg — The scrubber only let the indicator travel in the authored direction, so on the backward leg of a ping-pong loop it held, then jumped four frames at a time and never reached frame 0. The playback child now reports the observed clock direction, and the indicator follows the clock either way, frame by frame.
  • Pause ran the scrubber to the end — Pausing a linear animation while a sibling animation kept advancing let the child report the sibling's clock under the paused timeline's name, and the scrubber kept presenting frames. The child now reports only the named timeline, publishes one paused sample on pause, and stops republishing a paused timeline on sibling advances.
  • Timeline ruler — Labels step in natural units (tens of frames on a 60-frame timeline, quarter seconds on a two-second one) instead of tenths of the length, every minor tick sits on an exact frame or time value so the current-time indicator always lands on a mark, and the end value is always labelled.
  • Labelled ruler ticks were invisible — The tick line under each frame label used a colour token that does not exist, so only the unlabelled marks showed. Labelled ticks are now longer and brighter than the frame marks.
  • Switching artboard and animation in one MCP call — rav_switch_artboard with a named playback on a non-current artboard failed on desktop with "Playback metadata … is unavailable" because the validator only looked at a host Rive instance that desktop playback no longer keeps. It now reads the parse-once inspection metadata.
  • Ruler width shifted with the frame counter — The readout beside the ruler sized itself to its current digits, so the track jumped as the frame count grew. The readout now reserves the width of the widest value the timeline can show.
  • About dependencies grid — Encoder entries showed their full version banner and broke the two-column layout; only the version token is shown now and long values truncate instead of wrapping.

v2.5.6

September 14, 2026
Added
  • GPU Canvas toggle — A WebGL 2-only toolbar button enables Rive GPU Canvas (enableGPUCanvas) for desktop playback, standalone HTML, and generated snippets. The Snippet & Export dialog carries a matching GPU CANVAS option; the preference persists across launches. Enabling it disables the offscreen renderer for that instance.
  • Parse-once file inspection — Artboards, animations (with fps/duration/work area), state machines, ViewModel prototypes, instances, nested relations, lists, and embedded image assets are read once from a private copy of the file bytes in a worker, without instantiating a Rive runtime. Inspection is cached per source identity; the ViewModel hierarchy and topology tracker map live accessors onto that schema and only fall back to runtime discovery when the map cannot be matched.
  • Off-thread capture pipeline — Recording snapshots each rendered frame as a GPU bitmap and hands it to capture workers that compose, build VideoFrames, run the hardware encoder, and compress PNG (three parallel workers for lossless/alpha capture, delivered in order). The recording loop schedules itself and yields to the compositor between bounded batches, so the visible canvas keeps presenting while heavy files record. Measured on a heavy file: main-thread stalls went from 6–8 per second (~200 ms each) to zero, and the preview went from 4–9 fps to the capture rate.
  • Offline recording clock — rav_record_start accepts clock: "live" | "offline". Offline renders every simulation frame exactly, as fast as capture allows, never consults wall time, and draws at exactly the output size; it is the default when interactions and duration_seconds are both supplied. clock.mode in receipts reports offline, fixed-step or presentation.
  • Live capture counts — The native spool pushes accepted-frame receipts (media-export:capture, rate limited) while recording, so the status bar's frame count is the accepted count and updates every ~150 ms for every format, including alpha/PNG captures.
  • ProRes 4444 and image sequences — prores (Apple ProRes 4444 in .mov, with or without alpha; the recommended alpha hand-off for DCCs) and png-sequence / jpg-sequence (one file per frame into a directory) for export and recording, in the UI and MCP.
  • Push-based media job status — The native encoder emits media-export:status events during encoding, verification, and publishing (throttled to 10 Hz); the Export overlay no longer polls. Completed job cards can be dismissed, and the overlay resizes to its content.
  • Confirmed playback-child retirement — Retiring a playback child first runs its in-page disposal (media abort, resize observers, bridge listeners, object URLs) and waits up to 500 ms for confirmation before the native close. A replacement activation quiesces the previous child's rendering and resumes it if activation fails.
  • Frame-receipt liveness — A stalled visible playback child (no frame metrics for 3.5 s while playing, focused, and unobstructed) is quarantined and recovered instead of polled.
Changed
  • Single Rive owner on desktop — The main window no longer instantiates a hidden Rive player or evaluates the Rive runtime; it only prepares the runtime asset for the child. Selection seeding, artboard switching, VM instance lists, and embedded image catalogs come from inspection metadata and the child's canonical state. Host VM controls update from canonical deltas (event mode) instead of polling.
  • Background playback — The native 60 Hz wake lane is enabled only while a native-owned recording is active. Ordinary playback stays on the child's own animation frames; there is no native polling fallback for hidden or occluded playback. Recording start/stop are the only wake events, so idle desktop playback costs zero WebView IPC.
  • Recording — Scheduled interactions are validated against live accessors before the clock starts and retain a prepared accessor as a fallback; frame-clock errors are terminal; the stop drain is event-driven with a 15 s inactivity deadline; the recording cursor overlay is installed only when cursor is requested; standalone captures use enableGPUCanvas when selected. Native wake ticks during recording are now kicks that end a wait early and never run capture work.
  • Child replacement — Rendering-control commands carry a sequence number; a quiesce delayed behind a long frame can no longer suspend a predecessor the host already resumed.
  • FPS chip — Reports the Rive runtime's own FPS counter (enableFPSCounter) instead of a per-advance frame count, in both the host and the playback child.
  • Canonical state publication — Frames with no ViewModel changes publish nothing; embeddedImageAssets and topologyDiscovery are included in the canonical payload.
  • ViewModel readouts refresh at the render rate — The playback child's per-advance observer now reads two bounded "always read" tiers every advance, in addition to its existing 16-control cold round-robin: up to 16 controls that changed within the last 30 advances (evicted from the tier after 30 unchanged advances, LRU-capped), and up to 64 controls the Properties drawer reports as visible/expanded (the new watch-controls render-surface command, debounced on drawer render/expand/scroll/instance change). A pointer-coordinate readout or other per-frame script write is now sampled and republished every advance instead of once every ⌈bindings/16⌉ advances (≈1 fps on a ~1000-control file). Canonical publication floors only a pending topology walk, list invalidation, or the initial snapshot at 120 ms (VM_TOPOLOGY_PUBLISH_FLOOR_MS); a value-only delta now publishes on every advance. Diagnostics (hot/watch counts, reads/passes) are included in the observer stats surfaced through the canonical payload.
  • Embedded image selections — Replay by asset key (set-embedded-image) instead of re-sending image bytes through the bridge.
  • Number formatting — VM number controls trim trailing zeros (2.50 → 2.5, 2.00 → 2).
  • Open-file handling — RAV relies on the native open-file event listener; the 900 ms polling loop is removed. If the listener cannot be registered, queued files are reconciled on the next start and a warning is logged.
  • Export overlay resizing — Native overlay bounds follow the export panel's measured height with a 200 ms eased transition (set_ui_overlay_bounds), and the bounds resync on window focus.
  • Isolated DEV build — bump-version keeps the DEV configuration one patch ahead of production, and the release check enforces it. The isolated instance (never the official identifier) honours RAV_DEV_SCRIPT_ACCESS=1 at launch so acceptance harnesses can use rav_eval without the MCP Setup dialog.
  • Runtime target verified: Web 2.42.1 (runtime-v0.1.384) — Live-validated the published @rive-app/webgl2 and @rive-app/canvas 2.42.1 packages against the current file-inspection regression fixture set, in both renderers, with the runtime version explicitly pinned (not Latest (auto)). Fitted-text-size layout reporting, the manifest watermark pre-roll, ViewModel list-item value binding, and the interrupted-layout-transition fix all play correctly with no RAV source change required; enableGPUCanvas continues to match the published runtime parameter surface unchanged since 2.41.1.
Fixed
  • Sequence destination confirmation — Exporting or recording a PNG/JPG sequence to a non-empty folder offers Overwrite, Choose folder…, or Cancel instead of a raw error. Settings survive cancellation and folder changes; overwrite consent applies only to that request, and begin-time conflicts reopen the same prompt. MCP callers must still explicitly pass overwrite: true.
  • Enum dropdown focus — A focused enum dropdown is treated as editing, so remote value syncs defer instead of rebuilding an open popup.
  • Fast encoder completion — A terminal encoder event arriving before the finish command's response no longer gets overwritten by the command's initial snapshot.
  • Recording cleanup — The native wake lane and liveness suspension are released on every recording exit path (finish, cancel, failure, source change); failures to stop the clock surface as job warnings.
  • Stale overlay actions — Actions from a closed or superseded overlay are ignored instead of reported as errors.
  • Selection UI without a host player — Artboard, playback, and VM instance selectors populate from inspection metadata and canonical state, so the desktop selection summary and instance list no longer depend on a host Rive instance.
  • Reset stopped forwarding pointer/mouse input — Clicking toolbar Reset (also Properties DEFAULT, and the rav_reset/rav_reset_artboard MCP tools) restarted playback and ViewModel inputs correctly, but the artboard silently stopped responding to mouse movement and clicks until Play was pressed again. The runtime's Rive.reset() tears down its own canvas pointer/touch listeners as part of its in-place cleanup but, unlike play(), never re-registers them; RAV now calls riveInstance.setupRiveListeners() immediately after every in-place reset (the desktop render surface, the host fallback path, and the standalone exported demo template) so pointer tracking resumes without recreating the render-surface session.
  • Bundled file-inspection module rebuilt for runtime-v0.1.384 — The private-staged inspection module (vendor/inspection/parser.wasm) that every file open reads once, before the Rive runtime is ever reached, was rebuilt for runtime-v0.1.384 and Rive file format 7.4, replacing the earlier bundled build. Files exercising very recent runtime features — ViewModel list-item value binding, the Semantics accessibility subsystem — now open correctly; two confirmed regression cases (instance_value_binds.riv, semantic/zero_area_semantics.riv) previously failed with "Error initializing runtime instance" (a WASM call_indirect fault) because RAV's own older bundled module's core-object type registry could not deserialize them, before the actual @rive-app runtime was ever reached — the published @rive-app/webgl2/@rive-app/canvas 2.42.1 packages were never the cause. Confirmed by re-running the full 7-fixture live validation matrix with the rebuilt module: all 7 fixtures now load and play cleanly on both renderers.
  • Nested ViewModel image properties dropped by the file-inspection re-vendor — The updated file-inspection module reports image/asset ViewModel properties with the raw kind string asset_image (the earlier bundled module used asset); the private inspection normalizer's kind-alias table only recognized asset/assetimage, so every asset_image property was silently dropped from the normalized ViewModel map, and any nested ViewModel instance whose *only* properties were images was then pruned from the hierarchy entirely (its node carried zero surviving inputs). Caught by the isolated-DEV MCP acceptance harness (rav_vm_set_image: Image property "sub_1_im" not found or not writable on data_binding_images_test.riv). Fixed by adding the asset_image alias; the bundled inspection module is otherwise unchanged.
Removed
  • State-machine input controls and MCP tools — rav_get_sm_inputs and rav_set_sm_input are removed (55 tools). The Properties drawer, export control tree, generated snippets, control snapshots, and canonical state no longer carry state-machine descriptors. State machines remain selectable playback targets; ViewModel properties are the supported control surface.
Known limits
  • Native encoding of alpha WebM (VP9 with an alpha plane) at large sizes (≈2560×1440) can exceed the encoder's 768 MB memory ceiling and fail after capture; use ProRes 4444 or a PNG sequence for large alpha output.
  • Lossless capture (ProRes, WebM alpha, APNG, GIF, image sequences) moves 5–8 MB per full-size frame out of the render WebView; on a 2560×1440 capture that tops out near 20 frames/s in live mode (the receipt reports the lag) while offline mode simply takes longer than real time and stays exact. Hardware-encoded H.264/HEVC/VP9 are unaffected.
  • APNG encoding of long, large captures is slow (minutes) and produces very large files; it is unchanged in this release.

v2.5.5

September 4, 2026
Added
  • Desktop media export and recording — Export complete or segmented timelines as H.264, H.265, WebM, APNG, or GIF; capture PNG, JPG, and WebP stills; and record live state-machine pointer and ViewModel interaction with an optional cursor. RAV chrome and audio stay outside the capture.
  • Complete media automation — Eight new MCP tools discover encoder capabilities, start timeline/still exports, start and stop recordings, report or cancel jobs, advance exact frames, and inject normalized pointer input. Timed recording schedules can apply typed ViewModel values, triggers, images, and pointer operations on the frame clock.
Changed
  • Compact Export workspace — Media and web/code outputs share one concise chooser. Each media screen keeps capture settings and output settings compact, uses a persistent format selector, opens a native filename/location picker from a yellow folder button, and anchors the resolved output beside its primary action.
  • Frame-complete recording — RAV advances and renders each requested frame at a fixed simulation interval, uses bounded capture/encoder queues, streams supported video configurations, and reports wall-clock lag separately. Manual recording has no product duration limit; available disk space is the practical boundary.
  • Media status — Capture, draining, encoding, verification, and saving progress appear in the bottom status bar. EXPORT remains the one entry point for completed results.
  • Live dependency inventory — About reports the active Rive Web runtime and the exact FFmpeg, ffprobe and optional gifski versions returned by the desktop capability service, while missing tools remain labeled unavailable.
  • Bundled production encoders — macOS and Windows packages include pinned, hash-verified Jellyfin FFmpeg/ffprobe 7.1.4-3 resources, required GPL notices, and exact corresponding source. Production does not fall back to arbitrary encoders on PATH; GIF uses the bundled FFmpeg palette path when optional gifski is unavailable.
Fixed
  • Export presentation — Capture does not move a centered preview to the top or reduce the live canvas backing resolution. Modal export and snippet surfaces block all pointer input to drawers and controls below them.
  • Consistent export chrome — Media, snippet, and standalone export windows use the same compact ghost close control and shared overlay dismissal behavior.
  • ViewModel initialization — Authored enum choices populate on the first file load, and cold-load authored values become the compact-snippet baseline instead of making every property look changed.
  • Playback validation and recovery — MCP rejects unknown playback names before staging or exporting them. A native activation watchdog recreates a playback child once when WebKit stops responding during load.
  • Repository and encoder gates — Native linting and standalone media-harness hygiene are release gates, and production media availability requires pinned, hash-verified encoder resources with documented provenance.
  • Release validation — The final desktop candidate passed all eight decoded formats, exact segment matching, fixed-clock timed and manual interaction recordings, cancellation, GIF target search, cold enum population, lean snippets, playback rejection, overlay isolation, and status/About presentation before signed staging.

v2.5.4

September 1, 2026
Added
  • Authoritative MCP evaluation — rav_eval can target auto, host, or playback. Automatic evaluation follows the active isolated playback surface and reports the resolved surface and session.
  • Documentation reader — The documentation site adds search, section navigation, article tables of contents, previous/next links, and release-matched screenshots.
  • Timeline scrubber — Linear animations now show a dedicated row above the status bar with frame/second modes, duration ticks, an unclipped current-time indicator, and drag-to-seek. State machines do not show the row, and the playhead advances on every rendered animation frame.
Changed
  • Web 2.41.1 playback compatibility — This release targets Web 2.41.1 / runtime-v0.1.344. A single state machine uses the released singular stateMachine option. Multiple state machines, mixed animation/state-machine playback, older 2.x runtimes, and explicit no-target loading keep their existing behavior across the viewer, reset flow, snippets, and standalone demos.
  • Dependency maintenance — Compatible website, application, MCP, and Rust lockfile updates remove the currently reported npm advisories while retaining existing major-version gates.
  • Lean property snippets — CDN and local snippets now expose only the selected typed property accessors on window.riveProperties. Standalone HTML export remains the self-contained output with runtime, UI chrome, controls, and selected-value restoration.
Fixed
  • Host/child authority mismatch — Playback-targeted evaluation now executes in the same authoritative child used by typed MCP controls, uses a bounded result preview, and never falls back to stale host state after a child failure.
  • Console authority wording — The MCP documentation states that console tools read and execute against the host UI transcript; isolated-child console.* and live Luau output are not forwarded.
  • Property control sizing — Color controls use compact square swatches, and numeric inputs are wide enough to keep digits visible beside their spinner controls.
  • Desktop visual export selection — MCP visual export now carries the exact property selection, package source, and snippet mode through the native export overlay into the saved standalone file, then closes the overlay cleanly.
  • Live standalone property editing — Generated string, number, and color-alpha controls write to Rive while the field is active, so the synchronization loop cannot erase an edit before blur. Numeric controls format to two decimals after commit.
  • One-click macOS .riv ownership — MAKE DEFAULT issues one macOS request for the effective .riv association. Dynamically discovered identifiers remain internal diagnostics and compatibility data; Settings no longer exposes identifier counts or a click-through claim workflow.
  • Centered title metadata — File metadata uses its intrinsic width inside equal flexible title-bar columns, so its visible center stays aligned with the window center while long paths still truncate.

v2.5.3

August 29, 2026
Added
  • Global VM controls — Files can expose multiple global ViewModels alongside the artboard-bound ViewModel. RAV labels the collection GLOBAL VM above ROOT VM, keeps it collapsed by default, and provides a separate expandable tree for every global instance.
  • MCP inspection and capture — The bundled native MCP sidecar now advertises 49 unique tools, including six global-ViewModel inspection/control tools and rav_capture_canvas for PNG image content from the currently rendered RAV canvas.
Changed
  • Development isolation — The 2.5.3 DEV bundle preserves the 2.5.2 native overlay ordering while using an isolated app identity, build output, local server, and MCP bridge port.
Fixed
  • Rounded overlay clipping — Overlay surfaces now respect their rounded bounds while remaining above the playback surface.
  • Console severity and first-open stability — Console output uses distinct severity theming, and the first console open is stabilized to prevent the visible flicker during initial measurement and hydration.

v2.5.2

August 27, 2026
Added
  • Timeline progress readout — Timeline playback now shows current and total progress in a compact meter that can switch between frames and seconds. The meter is hidden for state machines and keeps a reserved footprint so playback controls do not shift.
  • macOS default-app controls — Settings identifies the application macOS currently uses for .riv files and provides deliberate MAKE DEFAULT and REPAIR ICON actions. RAV still registers as an alternate viewer and never takes ownership silently; Quick Look remains a separate macOS provider.
Changed
  • Anonymous Usage opt-out receipt — Turning Anonymous Usage off sends one final anonymous telemetry_off status and then stops reporting. A failed final status is retained and receives at most one retry per later launch until acknowledged, without resuming installation or activity reporting.
  • Authoritative playback control — UI and MCP commands now read from and write to the visible playback surface, including artboard, playback target, ViewModel instance, scalar, image, list, reset, layout, and timeline state.
Fixed
  • Flicker-free surface replacement — Opening a file or changing artboard, animation, state machine, or ViewModel instance keeps the previous confirmed frame visible until the replacement surface is ready. Stale rapid-switch results are discarded instead of producing blank frames, first-frame errors, or selection rollback.
  • ViewModel and image synchronization — Boolean controls persist, live values flow back to Properties, authored and runtime-list instances remain selectable, independent image slots no longer overwrite one another, and both reset paths update the canvas and controls together.
  • Warm file opening — Double-clicking or opening another .riv while RAV is already running now queues and activates the new file reliably instead of racing the existing playback surface.
  • Overlay continuity and styling — Settings, MCP Setup, About, and export surfaces remain above playback without stopping it, close from any outside click, retain complete RAV-yellow chrome, avoid forced focus and native-blue outlines, and use styled scrollbars only where content is intentionally scrollable.
  • Canvas validation and presentation — Fixed dimensions reject unsupported values without sending invalid render actions, while logical pixel sizing, centering, overflow origin, background, fit, and nine-way alignment remain synchronized after playback begins.
  • Readable playback errors — Structured native and playback failures now preserve their useful message instead of collapsing to generic text such as [object Object].

v2.5.1

August 22, 2026
Fixed
  • Playback-surface control synchronization — The dedicated playback surface now continues to receive background, fit, alignment, canvas-size, playback, and ViewModel control changes after a file has opened. Settings and other main-interface overlays also remain usable above playback.
  • Fixed-canvas presentation — Switching between Auto and Fixed uses logical canvas pixels, keeps a fitting fixed canvas centered in the viewer, and preserves its selected fit and art alignment. Oversized canvases remain scrollable from their authored origin.
  • In-place reset and default restore — Toolbar Reset and Properties DEFAULT now reset the active playback in place. They no longer recreate the playback surface, flash its readiness state, or shift the toolbar while an animation resumes.
Documentation
  • Canvas sizing and art alignment — Fixed size defines the playback canvas viewport, not the Rive artboard. With Contain, one axis always fills the viewport, so alignment only has a visible effect on the axis with remaining space.

v2.5.0

August 22, 2026
Added
  • Dedicated desktop playback surface — Packaged desktop builds now place visible Rive playback in a dedicated child WebView. The main WebView keeps the controls, drawers, code editor, export, MCP, and diagnostics, while the playback surface receives synchronized file, runtime, layout, playback, and control state. This separates the visible animation's render loop from most interface DOM and control work without removing RAV features.
  • Anonymous Usage reporting — Official 2.5.0 builds anonymously count installations and monthly active installations by default. A first-run notice appears before reporting, and the feature can be turned off in Settings. Privacy Policy links are available from the notice and About.
  • Public installation counter — The RAV website now displays the aggregate anonymous installation count above the changelog.
Changed
  • ViewModel control updates — Visible scalar controls update on a separate interface cadence, list controls rebuild only when list membership changes, and scalar syncing is skipped for hidden or collapsed controls.
  • Hidden console rendering — Event and JavaScript console history remains available while closed or collapsed without repeatedly rebuilding invisible rows.
  • Automatic runtime selection — Fresh or unset runtime preferences now use Latest (auto). Existing explicit runtime choices remain unchanged.
  • Drawer reveal controls — The left and right drawer buttons now live in the main interface strip so they remain accessible beside the separate playback surface.
Performance
  • Recorded large-file comparison — In two 60 FPS recordings of the same Rive asset exposing 999 live control paths and 10 embedded runtime script assets, the earlier single-WebView run held visible transition frames for 4–16 captured frames (about 67–267 ms); the later dedicated-surface run held them for 1–2 frames (about 17–33 ms). The worst observed hold was approximately 8× shorter, and the median per-transition maximum was approximately 3× shorter (100 ms versus 33 ms). Because build profiles, runtime and viewport settings, transition sequences, and capture setups differed, these figures describe the observed runs rather than a controlled or universal performance guarantee.
Fixed
  • Accurate export counts — Export summaries now report the actual number of serialized controls, including controls generated from repeated lists.

v2.4.3

August 15, 2026
Added
  • Canonical ViewModel list labels — Auto-generated list rows use a direct authored instance name when available. When the Web wrapper exposes only the ViewModel definition name, RAV uses a unique match between that definition's canonical instance-name set and a readable string property; ambiguous or missing matches fall back to Row N. viewModelName is never presented as an authored row label.
  • Embedded image controls — Each ViewModel image property uses one full-width select containing every embedded raster asset followed by Open file… and Clear. Open file… invokes a hidden file input; there are no separate folder/Clear buttons and no Embedded image… placeholder. The catalog uses uniqueFilename identity, magic-byte MIME detection, and numbered labels for duplicate display names. The same embedded bytes and control carry into standalone exports.
  • Standalone editor-config preservation — Applied editor JavaScript/config, including lifecycle callbacks, is embedded in standalone exports and executed in editor source mode after RAV binding and snapshot restoration; unsaved drafts are not exported as active config.
  • .riv desktop declarations — macOS Launch Services declares both the official app.rive.editor.rive-file UTI and the pre-2.4.3 app.rive.animation.viewer.riv compatibility UTI as alternate Viewer types, each backed by RiveFileIcon.icns. A version-and-schema-gated post-update first launch refreshes the installed bundle with lsregister -f without restarting Finder, changing the Viewer/Alternate rank, or taking over the default handler.
  • Windows .riv document icon — Windows NSIS and MSI bundles include the dedicated ten-resolution RiveFileIcon.ico generated mechanically from the supplied 1024 px master. NSIS replaces Tauri's executable-based document icon during installs, repairs, and updates, preserves the pre-RAV association for later uninstall, and notifies Explorer. MSI owns its corresponding icon value as an upgrade-aware component removed on uninstall.
Changed
  • Release availability — 2.4.3 was the current public GitHub release and was available through the normal latest.json updater feed.
  • Safe runtime default — Web 2.40.0 / runtime-v0.1.271 remains selectable, but live RAV MCP testing proved that it can double-offset nested, data-bound images in both WebGL2 and Canvas. RAV defaults to 2.39.2, where the authored layout is preserved. A one-time migration changes stored latest and 2.40.0 preferences to 2.39.2; explicitly choosing either again shows an authored-layout warning. Canary v0.1.272 remains separate.
Fixed
  • Fixed-canvas centering and overflow — Overflow-safe auto margins keep a fixed canvas centered while it fits, then collapse safely so oversized content scrolls from its authored top-left origin. The central scroller uses a styled 10px scrollbar track, thumb, and corner.
  • Clean release build identity — Distribution builds capture Git worktree state before creating the local build counter, preventing clean CI packages from self-reporting as -dirty while retaining the marker for genuinely modified checkouts.
Validation
  • Release gates passed — The consolidated JavaScript suite (51 files / 266 tests), Rust tests (13 app tests plus 1 rav-mcp test), clippy, NSIS/MSI document-icon packaging gates, and the clean/dirty build-identity regression passed on the release line.
  • Live runtime evidence — RAV MCP reproduced the 2.40.0 layout regression in both renderers and confirmed the authored layout on 2.39.2. Authored list labels remained distinct and in runtime order, every embedded raster was available to image controls, non-raster embedded resources were excluded, overflow-safe canvas centering/scrolling was exercised, and an exported standalone marker confirmed the applied editor script executed.

v2.4.2

July 25, 2026
Fixed
  • Packaged MCP sidecar discovery — RAV now resolves rav-mcp from the running application's executable directory, restoring automatic MCP bridge startup for macOS installations affected by the 2.4.1 regression and refreshing an existing stable client launcher after an update.

v2.4.1

July 25, 2026
Changed
  • Trusted macOS distribution — Apple Silicon and Intel builds are Developer ID signed, use hardened runtime and secure timestamps, and are notarized and stapled by Apple.
  • Notarized automatic updates — The macOS updater archive is created from the already-notarized app and remains protected by RAV's separate Tauri updater signature.
  • Single signed MCP sidecar — Packaged apps now ship only the signed native rav-mcp executable beside the main application binary, eliminating the redundant unsigned Resources copy.
  • Safer releases — GitHub releases remain drafts until both macOS distributions, both Windows installers, updater signatures, and the complete cross-platform update feed pass verification.
  • Patched production dependencies — Next.js and eslint-config-next now use 16.2.12; PostCSS 8.5.23 and Sharp 0.35.3 overrides remove all production dependency audit findings.
Fixed
  • Gatekeeper first launch — Current macOS downloads open normally without the previous right-click Open workaround.
  • Incomplete update feeds — Release automation refuses to publish a latest.json that is missing any supported architecture or installer.

v2.4.0

July 13, 2026
Changed
  • MCP status clarity — The runtime-strip MCP indicator is green when the bridge is healthy and ready, blue for 30 seconds after agent commands are received, yellow while connecting, red after a bridge failure, and muted when MCP is disabled.
  • Build and test toolchain maintenance — Refreshed Vite and Vitest to security-patched releases within their existing major versions, and made local build stamps explicitly identify uncommitted worktrees as dirty.
  • Atomic cross-platform releases — GitHub releases remain drafts while Apple Silicon, Intel macOS, Windows, updater signatures, and the merged latest.json are built; the workflow publishes only after the complete matrix succeeds.
  • Visual export command parity — rav_export_demo_visual now validates exact selection keys and forwards the dialog's selected controls, CDN/local package source, and compact/scaffold snippet mode to the saved demo instead of exporting with hidden defaults.
  • Website and reference refresh — Added the static annotated app overview and Script Editor guide, synchronized the MCP reference and machine-readable discovery copies, and documented the reproducible Vercel deployment path.
Fixed
  • Desktop build dependency alignment — Updated and aligned the Tauri core, build tooling, JavaScript API/CLI, desktop plugins, Rust dependency graph, and declared Rust minimum so local and release builds use one compatible, security-audited toolchain.
  • Dynamic ViewModel list population — List instances now populate on file load and rebuild whenever their controlling count changes, instead of remaining empty or stopping at the first 10 rows. Authored list entries use readable one-based labels such as Row 1, Row 2, and so on.
  • Export and snippet list parity — Standalone HTML demos and generated instantiation snippets now preserve the live player's dynamic list behavior and current row count. List-family selections expand across every current item, while excluded controls such as focusIndex stay out of the exported Properties panel and serialized control snapshot.
  • Single ViewModel instance visibility — The VM Instance selector now remains visible and populated when a file has one default instance, including a one-based fallback label for unnamed instances.
  • Playback and ViewModel load synchronization — RAV now records the actually playing or detected state machine after load, always populates the VM Instance selector, preserves the runtime's working auto-bound default, and uses a clean autoBind: false reload for explicit instance choices.
  • ViewModel instance export parity — Generated CDN/local snippets and standalone HTML demos now serialize and bind the selected ViewModel instance before applying exported control values, so their playback and triggers match RAV.
  • Live MCP ViewModel traversal — rav_get_vm_tree, rav_vm_get, rav_vm_set, and rav_vm_fire now traverse the currently bound nested ViewModels and dynamically sized lists, expose zero-based paths such as rows/0/playerName, reject stale out-of-range indices, and label list nodes consistently with the Properties panel.
  • Delayed snapshot restoration — Generated snippets and standalone demos retain unresolved ViewModel and state-machine values and retry them across binding callbacks and animation frames, allowing dynamic list items to receive their exported values after they materialize.
  • RAV MCP load reliability — File-open commands receive a longer load window for cloud-backed files, and event-log replies safely serialize cyclic runtime payloads instead of failing the MCP request.

v2.3.0

May 10, 2026
Added
  • MCP rav_console_set_mode — Flip the bottom console between Event Console, JS REPL, or closed without re-opening the panel.
  • MCP rav_console_set_filter — Drive the existing on-screen filter toggles from any MCP client. JS mode supports level (all/info/warning/error); Event mode supports sources (subset of native/riveUser/ui/mcp); both modes support search. Auto-targets the active mode when mode is omitted.
  • MCP rav_console_clear — Clear the visible transcript of the active mode (or a specified mode) without closing the panel.
  • Extended MCP rav_console_open — Optional mode, level, sources, and search apply pre-configured filter state in the same call. Backwards compatible with no-argument invocations.
  • MCP rav_export_demo_visual — Orchestrates the Snippet & Export Controls dialog visually (open → selection → package/mode → click Export → save) for screen recordings or non-default control selections.
  • Docs — MCP Integration page now lists 36 tools with the four new console-control rows and the visual export row.
  • Landing — Features section updated to advertise 36 MCP tools and console panel control.
Changed
  • Script console refactor — Internal Eruda configuration extracted into dedicated modules; capture controller now owns logger attachment and type mapping. No user-visible behavior change.
  • Regression guardrails — Documented the current prebuild protection stack around architecture drift, dependency boundaries, custom window chrome, and exported demo chrome so the 2.1.x stabilization work has explicit gates instead of relying on ad hoc manual checks.

v2.2.3

April 5, 2026
Changed
  • Status-strip palette alignment — Structured playback status icons now use the green/yellow RAV website palette instead of the old purple fallback tint, so the runtime strip matches the rest of the product language.
Fixed
  • Persistent status restoration — Transient notices like canvas sizing changes, refresh completion, restart completion, export confirmation, and runtime/layout updates now restore the last structured artboard/playback/ViewModel/instance summary instead of leaving the status strip stranded on the temporary message.

v2.2.2

April 5, 2026
Changed
  • Windows window-mode contract — Windows now uses its own explicit Tauri window config instead of inheriting the macOS overlay-titlebar settings and then mutating decorations at runtime, keeping the custom header and DWM rounded-corner hint on one consistent path.
  • Shared runtime layout mapping — The live app, generated web snippets, and standalone demo runtime now resolve fit/alignment through the Rive runtime enums rather than raw string tokens, so export behavior matches the viewer.
  • Status-strip iconography — Structured playback status now renders with dedicated artboard, animation, state machine, instance, and ViewModel icons instead of plain-text abbreviations.
Fixed
  • Windows rounded-corner regression — Removed the decorated/undecorated hybrid startup path that was blocking the Windows rounded-corner treatment even after the DWM corner hint was applied.
  • Fixed-size export alignment — Explicit pixel-size canvases now honor the selected alignment in the exported demo and snippet runtime while remaining centered instead of drifting to the upper-left on macOS or Windows.

v2.2.1

April 5, 2026
Changed
  • Scrollbar regression guardrails — Strengthened the smoke suite so prebuild now fails if shared app/demo scrollbar owners mix WebKit pseudo-element skinning with standardized scrollbar properties on the same surfaces, which was the escape hatch behind the latest macOS scrollbar regressions.
  • Windows window-corner path — Desktop startup now applies the Windows 11 DWM rounded-corner preference for the custom RAV window instead of relying only on CSS/content clipping.
Fixed
  • macOS scrollbar regression — Restored styled scrollbars across the main app and exported demo by removing the shared scrollbar-width / scrollbar-color path that was overriding the intended WebKit scrollbar skin in WKWebView.
  • Fixed-size export centering — Fixed explicit pixel-size canvases so they stay centered in both the live viewer and exported demos instead of pinning the artboard to the upper-left corner when the canvas is larger than the viewport.

v2.2.0

April 4, 2026
Added
  • Explicit canvas sizing — Added a shared canvas sizing model with Settings controls for AUTO vs FIXED, editable pixel width/height, aspect-ratio locking, editor canvasSize support, and a new rav_set_canvas_size MCP tool plus rav_status reporting for the active sizing mode.
Changed
  • Snippet/export carry-through — Generated snippets, exported demos, and descriptor payloads now preserve the active canvas sizing mode. Fixed-size outputs emit explicit canvas pixel dimensions instead of collapsing back to host-driven layout.
  • Documentation and release notes — README, website docs, MCP reference docs, and release notes now document the canvas sizing workflow, updated MCP tool count, and the end-to-end behavior of fixed-size exports.
Fixed
  • Editor apply sizing propagation — Applying editor code that contains canvasSize now updates the live app state correctly because the UI stack receives the shared canvas sizing setter through the controller bootstrap path.
  • Windows updater handoff — Desktop update install now waits for the app-owned MCP bridge to stop before installation begins, preventing rive-mcp.exe from keeping the old install locked during Windows updates.

v2.1.1

April 4, 2026
Changed
  • Desktop window chrome — macOS now uses a supported overlay-titlebar host with the custom RAV header, corrected window controls, centered file metadata, and properly rounded outer window corners instead of the unstable square-host experiments from the late 2.1.0 cycle.
  • Runtime strip cleanup — Simplified the bottom strip so the console control is open/close only, runtime info is more compact, and the strip no longer repeats redundant build/file tokens already available elsewhere in the app.
  • Snippet/export templates — Tightened generated instantiation code so zero-control exports stay minimal, section labels preserve authored casing, manual trigger behavior is documented clearly, and runtime helpers no longer over-serialize placeholder blocks.
Fixed
  • MCP activity states — The MCP chip now distinguishes disabled, connected-idle, and actively-used states instead of staying bright while no command is running.
  • JavaScript console stability — Fixed multiple JS console regressions: toggle freezes, misplaced REPL rows, broken FOLLOW anchoring, and copy/filter behavior drifting away from the visible Eruda transcript.
  • Snippet/demo runtime errors — Exported demos no longer reference missing helper functions during bootstrap, and generated helper runtime code now handles falsy VM returns and trigger/value edge cases correctly.
  • Desktop scrollbars and About layout — Shared scrollbar theming now covers About, MCP, and export/snippet surfaces consistently, and the About dialog layout was tightened so desktop builds stay compact without full-window scrolling.

v2.1.0

April 4, 2026
Added
  • Desktop About window — Added a custom About dialog with build/runtime metadata, credits, dependency inventory, product links, and native Help-menu integration so desktop builds expose release information inside the app instead of only through Settings.
  • Architecture enforcement — Added a formal architecture budget, dependency-cruiser rules, and source generation for injected snippets so new development is constrained away from giant root modules and flat dumping-ground folders.
Changed
  • Full frontend architecture refactor — Removed root runtime entrypoint drift by moving app boot into src/app/main-entry.js, relocating the MCP frontend bridge under src/app/platform/mcp/, grouping runtime/export/session/console/editor code by domain, and converting injected snippets into source-backed modules that are generated for runtime consumption.
  • Console mode flow — The runtime strip console control now acts as open/close only, while the console header uses a compact Events / JS toggle for mode switching.
  • About dialog presentation — The desktop About surface now uses a compact non-scrolling desktop layout, two-row product links, selectable value fields, and a dependency list that scrolls internally without forcing the whole dialog to scroll.
Fixed
  • JavaScript Console follow behavior — JS FOLLOW now tracks the real Eruda transcript container, re-engages correctly, and no longer jumps to an empty viewport instead of the visible transcript.
  • Runtime and MCP strip state — Fixed runtime/MCP indicator regressions introduced during the refactor so the strip reflects the actual loaded runtime and live MCP connection state again.
  • Event console cyclic payload crash — Event-log rendering now handles cyclic MCP payloads safely instead of crashing on JSON.stringify when command metadata contains self-references.
  • Desktop About integration — Native About Rive Animation Viewer now opens the custom dialog reliably, centered and styled to match the RAV desktop aesthetic.
  • Windows shell polish — Windows startup now uses opaque dark chrome so the native menu bar remains visible in dark mode, and the bundled MCP sidecar launches without opening a stray PowerShell window.
  • Windows release workflow — Fixed the architecture-budget checker to resolve its config path with fileURLToPath(import.meta.url) instead of a raw file-URL pathname, which was producing invalid D:\\D:\\... paths on GitHub's Windows runners and aborting the release before the Windows artifact built.

v2.0.5

April 3, 2026
Fixed
  • Windows release build regression — The stable MCP launcher-path helper now compiles correctly on Windows, unblocking cross-platform release publishing after the 2.0.4 tag failed its Windows job.

v2.0.4

April 3, 2026
Added
  • rav_configure_workspace MCP tool — Agents can now idempotently open or close the left and right sidebars, switch the live runtime between internal and editor source modes, and inject or remove the VM Explorer snippet without UI clicking or state guessing.
Changed
  • Stable MCP launcher path — The MCP Setup dialog now publishes a stable client launcher path (rav-mcp-rav) instead of pointing clients at the app-bundle-internal binary path, so Codex and Claude integrations survive app replacements more reliably.
  • Auto-update retry behavior — Desktop updater failures no longer leave the chip stranded in UPDATE RETRY; the app now retries on timer, focus return, visibility return, and network reconnection.
  • Release/docs sync — README, MCP server docs, website docs, and homepage feature cards now describe the 2.0.4 MCP/Claude compatibility fixes and 31-tool surface.
Fixed
  • App-side MCP startup attach — Packaged apps now load the frontend bridge as a real ES module, so the running app actually attaches to the bundled bridge sidecar on launch instead of leaving the sidecar listening with no live RAV connection behind it.
  • Claude MCP health-check compatibility — The native rav-mcp sidecar now accepts both standard Content-Length MCP framing and Claude's newline-delimited JSON probe format, which fixes Claude's Failed to connect health checks.
  • Claude/Codex launcher install path — One-click MCP setup now installs clients against the stable launcher shim rather than the app-bundle resource path, avoiding stale registrations after app updates.

v2.0.3

April 3, 2026
Changed
  • JavaScript console presentation normalization — Command, result, warning, error, and application log rows now share the same timestamp-and-badge chrome while preserving Eruda's native lazy object inspection for live runtime objects.
  • Console transcript copy fidelity — Copy now serializes exactly the rows currently visible in the JavaScript console, in the same newest-first order and with the same badges shown on screen.
  • Documentation refresh — README, website docs, and homepage feature cards were updated to reflect the normalized JS console behavior and current 2.0.x feature set.
Fixed
  • JS console filter behavior — Level and search filters now operate on the rendered JavaScript console transcript instead of Eruda's internal filter API, so REPL command/result rows no longer bypass filtering.
  • JS console spacing consistency — Timestamp, badge, and message spacing is now consistent across REPL entries and app-generated log lines.

v2.0.2

April 3, 2026
Changed
  • Toolbar control layout refinement — Moved the runtime renderer selector into the central playback/layout control cluster, tightened the OPEN button to icon-plus-label width, and kept the primary file-open affordance bright green instead of dimming it while no file is loaded.
  • Default workspace layout — The app now starts with the right properties panel open while the editor and console stay closed by default, matching the streamlined inspection-first workflow.
  • Console action affordances — Event Console and JavaScript Console now use outlined SVG icon buttons for FOLLOW, COPY, and CLEAR, with consistent button ordering after the search field and clearer active-state styling.
  • Console chip styling — MCP and OPEN CONSOLE in the runtime strip now use the same rectangular outlined button language as the rest of the UI instead of pill chips.
  • MCP setup responsiveness — The MCP Setup dialog now paints immediately and refreshes its install-state data asynchronously, avoiding the perceived hang when opening the menu.
  • Help menu destination — The native Help menu now opens the live online RAV documentation instead of leaving Help unbound.
  • Playback naming fidelity — Playback selectors now display authored animation and state machine names exactly as they exist in the .riv file, without injected SM: display prefixes or rewritten capitalization.
Fixed
  • MCP client detection state — MCP setup detection now distinguishes between a client being installed, missing, or available for reinstall/removal rather than only reporting that the application executable exists.
  • Console copy support — Event Console now has clipboard copy parity with the JavaScript Console through a dedicated copy action.
  • Initial console visibility — Closed-console startup no longer leaves the full console chrome visible; only the runtime strip remains until the console is opened.

v2.0.1

April 2, 2026
Fixed
  • Updater install handoff — Desktop update installation now reuses the already-checked update payload instead of performing a second network check before install, which avoids stale-state failures and makes the relaunch path more reliable.
  • Updater check timeout — Added an explicit desktop updater timeout so the update chip no longer waits indefinitely when the update endpoint is slow or unavailable.
  • CI release sidecar packaging — The native rav-mcp sidecar build now creates the Tauri src-tauri/resources directory before Cargo evaluates the app package, fixing cross-platform release workflow failures in fresh CI checkouts.
  • Updater signing configuration — Provisioned a valid Tauri updater signing keypair and GitHub Actions secrets for the 2.0.1 release path so updater artifacts can be signed and published successfully.
  • Merged updater manifests — Release publishing now produces a single latest.json feed that carries Apple Silicon, Intel macOS, and Windows entries together instead of leaving the updater endpoint stuck on the last publishing job.
  • Installed-app patch validation — Verified the signed desktop updater end to end by installing 2.0.0 into /Applications, updating to 2.0.1, relaunching, and confirming the relaunched app reports available: false.

v2.0.0

April 2, 2026
Added
  • Bundled native rav-mcp sidecar — Packaged desktop builds now ship with a Rust rav-mcp binary, so end users no longer need Node.js to use MCP.
  • One-click MCP client setup — The MCP Setup dialog now detects Codex, Claude Code, and Claude Desktop, reports whether rav-mcp is already installed there, and exposes ADD, REINSTALL, and REMOVE.
  • Configurable MCP bridge port — The bridge port is now configurable from the MCP Setup dialog and all generated snippets/install actions stay in sync with the selected port.
  • MCP Script Access toggle — JavaScript execution through MCP is now explicitly gated behind a dedicated toggle. Read-only control tools remain available even when script access is disabled.
  • Native JS transcript console — The JavaScript console is now a first-class RAV console with timestamps, newest-first ordering, filters, search, and FOLLOW.
  • Unified console follow behavior — Both Event Console and JavaScript Console now expose a sticky FOLLOW toggle that auto-disables when you scroll away from the latest message and re-enables when you return.
  • generate_web_instantiation_code MCP tool — Generates canonical web-instantiation snippets for either CDN or local-package usage based on the exact live animation state.
  • Snippet & Export Controls dialog — New in-app dialog for previewing snippets, choosing package source, and selecting which ViewModel and state-machine values are serialized into snippets and exported demos.
  • Selectable control export — Branch-level checkboxes select nested control groups, leaf checkboxes select individual controls, and untouched dialogs default to the changed-control set.
  • Exported demo toolbar code copy — Exported demos now include a Copy Instantiation Code action and bundle the current canonical snippet variants.
  • window.ravRive helper API in snippets — Generated snippets and exported demos now expose helper methods for applying snapshots, reading VM paths, setting values, firing triggers, and accessing state machine inputs.
  • Desktop updater flow — Added background update checks, update chip states, install/relaunch commands, updater plugin wiring, and release-workflow support for signed updater artifacts.
  • Desktop open-file coverage — Added explicit tests for drag/drop, open-with, double-click, URI-list payloads, and startup file handoff.
Changed
  • Major UI refresh — The editor header, runtime strip, consoles, MCP dialog, and export flow were refined into the new 2.0.0 interaction model.
  • Editor live-source signaling — The editor title block now acts as the live-source indicator. Neutral gray means internal wiring is active; green/pulsing means the applied editor config is driving the runtime.
  • Apply action styling — The script editor now uses a dedicated APPLY action with neon emphasis instead of a subtle icon-only affordance.
  • Console toggle behavior — The runtime strip now exposes a simpler open/close console affordance and hides the console toolbar entirely while the console is closed.
  • Unified console direction — Event Console and JavaScript Console now grow in the same direction, use the same timestamp format, and present the newest entry at the top.
  • Layout controls surfaced — Fit and alignment controls moved into the primary toolbar next to playback controls and are mirrored into exported demos.
  • Snippet generation semantics — Snippets now emit organized override blocks instead of giant value dumps, round floating-point numbers to 2 decimals, and include enum option comments plus startup trigger lists.
  • Demo export semantics — Exports now mirror the live source mode, current artboard/playback selection, selected control snapshot, fit/alignment toolbar placement, and instantiation snippet variants.
  • MCP setup messaging — Simplified setup status to MCP ready / MCP disabled, removed outdated Node wording, and clarified the difference between bridge readiness and active client connection.
  • MCP bridge resilience — Hardened bridge reconnect behavior, initial sidecar handshake timing, fresh-stdio first-call behavior, and post-reload reconnect persistence.
  • Resizing behavior — Sidebars and console resize more smoothly by deferring expensive canvas resizes until the drag completes and widening the drag hit targets.
  • Runtime version picker — Fallback runtime versions are now derived from the latest available versions instead of being hardcoded.
  • Build pipeline — npm run build now compiles the native rav-mcp sidecar before the frontend dist build, and packaged apps bundle/sign the sidecar automatically.
  • Architecture — app.js was reduced to a composition root by extracting runtime loading, export, shell/status, VM controls, transparency, state machine defaults, and other subsystems into focused modules.
Fixed
  • Black-window startup trap — Dev startup now fails fast when the Vite port is occupied instead of launching a transparent shell against the wrong port.
  • MCP setup detection — Corrected false “Node not detected” messaging, broken install button behavior, and stale setup-state reporting.
  • MCP reconnect race — Fixed the bridge race that produced InvalidStateError during handshake when the app and sidecar connected simultaneously.
  • First-call MCP write failures — Fresh stdio MCP sessions now wait for the app bridge before failing write commands, preventing RAV is not connected on the first rav_set_editor_code / rav_apply_code.
  • Exported HTML script escaping — Fixed broken standalone demos caused by unescaped </script> content inside generated config/snippet payloads.
  • Manual export parity — Manual exports and MCP-triggered exports now use the same snippet/export builder path.
  • Autoplay on file load — File picker, drag/drop, open-with, and MCP file loads now consistently autoplay on open.
  • Snippet/export tree UX — Nested branches remain open while you check or uncheck child controls in the Snippet & Export Controls dialog.
  • Bridge-side object URL cleanup — Added final object-URL cleanup for open-file sessions.
  • Runtime version picker injection risk — Replaced unsafe innerHTML option interpolation for custom runtime versions.
  • rav_get_event_log ordering — Event log reads now return the newest matching entries first.
  • rav_status detail completeness — Status now includes alignment and the active instantiation mode/draft state.
  • ViewModel trigger resume logic — Corrected paused/playing detection used around VM trigger behavior.
  • FOUC and panel state mismatches — The shell layout now avoids initial panel-state flashes and keeps the UI state aligned with the DOM defaults.
  • Desktop drag targets — Sidebar and console resize hit zones are more forgiving and less jerky.
  • Code coverage regressions — Recovered full green tests around the new modularized controllers, export flow, MCP bridge, open-file path, updater flow, and console behavior.

v1.9.9

April 1, 2026
Added
  • Apply & Reload documentation — Full docs section on the website under Configuration explaining the button's purpose, workflow, and all supported Rive constructor options (artboard, stateMachines, animations, autoplay, autoBind, layout, callbacks).
Changed
  • Bumped app/package/runtime version from 1.9.8 to 1.9.9.
Fixed
  • Text selection blocked on UI chrome — Drag-select is now disabled across all UI labels, headers, buttons, and panel text. Selection remains enabled in editable fields (inputs, textareas, script editor) and copyable areas (MCP snippet blocks, server path).
  • Server path wraps and is copyable — The MCP Setup dialog server path is now displayed as a wrapping snippet block with its own copy button, matching the other snippet sections. No more horizontal scrolling or truncation.
  • VM Explorer inject button hidden — The terminal icon in the script editor toolbar is hidden until the browser console feature is rolled out. The underlying injectCodeSnippet() function is preserved.
  • Apply & Reload tooltip — Updated to "Apply editor config and reload animation" for clarity.

v1.9.8

March 31, 2026
Changed
  • Bumped app/package/runtime version from 1.9.7 to 1.9.8.
Fixed
  • MCP Setup dialog clipped at top — Removed position: fixed + transform centering that conflicted with native <dialog> positioning. Now uses margin: auto (the correct method for <dialog> elements), which centers the dialog properly without clipping the header.
  • Dialog header visible — The "MCP Setup" title and close button are now always visible at the top of the dialog. The body scrolls independently below it.

v1.9.7

March 31, 2026
Changed
  • Bumped app/package/runtime version from 1.9.6 to 1.9.7.
Fixed
  • MCP Setup dialog centered — Dialog now opens centered on screen using position: fixed with translate(-50%, -50%) instead of default browser dialog positioning.
  • Server path fully visible — Path row now scrolls horizontally and text is selectable, no longer truncated with ellipsis.
  • Copy button repositioned — Copy buttons moved to a header bar above each snippet block so they never overlap or obscure code text.
  • Sticky dialog header — The MCP Setup title bar with close button stays pinned at the top when scrolling through the snippet list.
  • Node.js status indicator — Shows green dot + "installed" when MCP bridge is connected (confirms Node.js is working), or red dot + "not detected" with an INSTALL button linking to nodejs.org when not detected.

v1.9.6

March 31, 2026
Changed
  • Bumped app/package/runtime version from 1.9.5 to 1.9.6.
Fixed
  • CI build failure — MCP server bundler now auto-installs its npm dependencies before esbuild runs, fixing the Windows/macOS CI builds that failed because mcp-server/node_modules wasn't present.

v1.9.5

March 31, 2026
Added
  • MCP Setup dialog — New in-app dialog (cable icon in toolbar) with ready-to-copy configuration snippets for Claude Code, Claude Desktop, OpenAI Codex/ChatGPT, and generic MCP clients. No repo cloning or npm install required.
  • Bundled MCP server — The MCP server is now compiled into a single self-contained .js file (831KB, zero dependencies) and shipped inside the app bundle as a Tauri resource. Users only need Node.js installed.
  • Tauri get_mcp_server_path command — Returns the absolute path to the bundled MCP server for use in setup snippets.
  • esbuild MCP bundler (scripts/bundle-mcp-server.mjs) — Bundles the MCP server + all npm dependencies into one file at build time.
Changed
  • Bumped app/package/runtime version from 1.9.4 to 1.9.5.
  • Build script now runs MCP server bundling before dist build.
  • MCP documentation rewritten across README, website docs, and MCP server README to be user-friendly for non-developer users.

v1.9.4

March 31, 2026
Changed
  • Bumped app/package/runtime version from 1.9.3 to 1.9.4.
  • Website feature cards now show 14 features including Artboard Switcher.
  • Website docs include full Artboard Switcher documentation section.
Fixed
  • MCP setup documentation — Rewrote MCP setup instructions across docs page, README, and MCP server README to be user-friendly for people who downloaded the desktop app (not just repo contributors). Added prerequisite info (Node.js 18+), clone step, explanation of what MCP is, and a "how it works" section.
  • Website changelog — Fixed stale web/CHANGELOG.md that was not being synced from the root changelog, causing the website to show outdated version history.

v1.9.3

March 31, 2026
Changed
  • Bumped app/package/runtime version from 1.9.2 to 1.9.3.
Fixed
  • Export cancel no longer shows error — Dismissing the native save dialog without saving now shows "Export cancelled." in the info strip instead of a red error banner. Cancellation is detected by checking for "cancel" in the Tauri error message.

v1.9.2

March 31, 2026
Changed
  • Bumped app/package/runtime version from 1.9.1 to 1.9.2.
Fixed
  • VM Instance selector scoped to current artboard — The VM Instance dropdown now only shows instances belonging to the current artboard's own ViewModel definition (via defaultViewModel()). Previously it incorrectly enumerated ALL ViewModel definitions across the entire file, polluting the dropdown with unrelated instances from other artboards and nested VMs.
  • VM Instance switching — Selecting an instance from the dropdown now correctly calls bindViewModelInstance() on the current artboard's ViewModel definition and re-renders the VM controls with that instance's values. Removed the broken composite key format.
  • VM section label casing — Section labels now preserve the exact original spelling from the ViewModel (lowercase, dashes, special characters). The forced toUpperCase() call was removed.

v1.9.1

March 31, 2026
Changed
  • Bumped app/package/runtime version from 1.9.0 to 1.9.1.
  • VM instance switching now tries replaceViewModel() as a fallback if setViewModelInstance() is not available.
Fixed
  • ViewModel section label — The root VM section now shows the actual ViewModel name (e.g. "RIGHT-BADGE-UNIT-VM") instead of the hardcoded "Root VM". Uses viewModelName or name from the ViewModel instance.
  • One-shot animation replay — Pressing Play on a finished one-shot animation now restarts it from the beginning instead of doing nothing. Calls stop() then play(animationName) when the animation has ended.
  • VM instance selector — Fixed the VM Instance dropdown never populating. instanceCount and instanceNames are properties (not functions) on the Rive ViewModel definition. The selector now correctly enumerates named instances and supports switching via instanceByName() or instanceByIndex().

v1.9.0

March 31, 2026
Added
  • Artboard / Animation Switcher — New collapsible control section in the Properties panel with two auto-populating dropdowns: • Artboard selector — lists all artboards in the loaded .riv file • Playback selector — lists state machines (prefixed "SM:") and timeline animations for the selected artboard • VM Instance selector — appears when multiple ViewModel instances are available • Default button — resets to the default artboard and state machine detected on first load
  • Switching artboard or playback target auto-plays immediately and re-populates ViewModel controls for the new artboard.
  • Export now captures the exact artboard/animation setup shown in the viewer, including animation-only playback targets.
  • MCP tools: rav_switch_artboard and rav_reset_artboard for remote artboard/animation control.
  • rav_status now includes artboard state (current artboard, playback type/name, defaults, file contents).
Changed
  • Bumped app/package/runtime version from 1.8.1 to 1.9.0.
  • loadRiveAnimation now accepts configOverrides parameter for programmatic artboard/playback switching without modifying the script editor.
  • DemoBundlePayload (Rust) now includes animations field alongside state_machines for animation-only exports.

v1.8.1

March 31, 2026
Added
  • MCP dialog-free export — rav_export_demo now accepts an optional output_path parameter that saves the demo HTML directly to disk without opening a native save dialog. Uses a new Tauri make_demo_bundle_to_path command. Without output_path, the original dialog-based flow is preserved.
  • MCP agent instructions — The MCP server now sends comprehensive usage instructions on connect, covering recommended workflow, Rive API gotchas (properties vs functions, .trigger() not .fire()), ViewModel path format, and debugging tips.
  • MCP indicator three-state design — The runtime strip MCP chip now shows three distinct visual states: OFF (very dim, bridge disabled), WAITING (dim indigo with pulsing dot, looking for agent), CONNECTED (bright indigo with glow). Clickable to toggle bridge on/off.
  • MCP indicator repositioned — Moved to the left side of the runtime strip before the runtime dot so long filenames cannot clip it.
Changed
  • Bumped app/package/runtime version from 1.8.0 to 1.8.1.
Fixed
  • MCP artboard/state machine tools — rav_get_artboards and rav_get_state_machines now correctly read contents, stateMachineNames, and animationNames as properties (not function calls), returning full artboard data including animations and state machines.
  • MCP ViewModel tree — rav_get_vm_tree now reads viewModelInstance directly from the Rive instance instead of depending on the vm-explorer-snippet injection. Returns property kinds, paths, and current values out of the box.
  • MCP vm_get/vm_set/vm_fire — All ViewModel accessors now fall back to direct viewModelInstance property access with path navigation for nested ViewModels, removing the hard dependency on the vm-explorer-snippet.
  • MCP trigger firing — rav_vm_fire now calls .trigger() (the correct Rive VM accessor method) instead of the nonexistent .fire().
  • MCP SM input tools — rav_get_sm_inputs and rav_set_sm_input read stateMachineNames as a property.

v1.8.0

March 31, 2026
Added
  • MCP Server (mcp-server/): Model Context Protocol server that exposes 31 tools for controlling RAV from Claude Code or any MCP client — open files, inspect ViewModels, drive playback, manipulate inputs, configure the workspace, read event logs, edit scripts, and export demos.
  • MCP Bridge (mcp-bridge.js): Frontend WebSocket client that auto-connects to the MCP server's bridge on ws://127.0.0.1:9274 with exponential backoff reconnection.
  • MCP connection indicator in the runtime strip — a dot + "MCP" chip that lights up indigo when the bridge is connected.
  • MCP event filter in the event console — a new "MCP" toggle button alongside Native/Rive User/UI filters, with indigo accent color.
  • Formatted MCP event logging — all MCP commands, responses, connections, and errors are logged to the event console with human-readable summaries (no raw JSON), elapsed time, and structured result formatting.
Changed
  • Bumped app/package/runtime version from 1.7.6 to 1.8.0.
  • Build dist script now includes mcp-bridge.js in the distribution bundle.

v1.7.6

February 23, 2026
Changed
  • Bumped app/package/runtime version from 1.7.5 to 1.7.6.
  • Build numbering now auto-increments per local build using a persisted counter (.cache/build-counter.txt) instead of staying pinned to git commit count.
Fixed
  • Restored reliable desktop drag/drop file opening by handling window-level drop payloads and fallback URI/path payloads (text/uri-list / text/plain) in the frontend.
  • Added native Tauri drag/drop forwarding (WindowEvent::DragDrop) to the existing open-file handoff path, so .riv drops are received even when browser-style file payloads are absent.

v1.7.5

February 23, 2026
Changed
  • Bumped app/package/runtime version from 1.7.4 to 1.7.5.
  • Added runtime semver selector in Settings with Latest (auto) plus the latest 3 prior versions and a Custom option.
  • Runtime build identifiers now use local system time (instead of UTC) for easier test-build verification.
Fixed
  • Resolved runtime latest alias handling so Latest (auto) resolves to a concrete semver before cache/load (matching direct semver selection behavior).
  • Added per-file runtime semver persistence so each .riv remembers its selected runtime version.
  • Exported standalone demos now embed the exact selected runtime semver.
  • Runtime custom version input row now appears only when Custom is selected.
  • Default playback target selection now pre-detects state machines before instantiation (avoids unintended first-animation fallback when no playback target is specified).

v1.7.4

February 15, 2026
Changed
  • Bumped app/package/runtime version from 1.7.3 to 1.7.4.
Fixed
  • VM string inputs now default to a single visible row and automatically expand to two rows only when multiline content is present.
  • State machine controls are now flattened to a single group per state machine (no extra nested "State Machines" wrapper), and only rendered when that state machine has inputs.

v1.7.3

February 15, 2026
Changed
  • Bumped app/package/runtime version from 1.7.2 to 1.7.3.
Fixed
  • VM string inputs now use multiline text areas so line breaks are preserved when rendering existing values.
  • Editing string inputs no longer collapses multiline text into a single line.

v1.7.2

February 15, 2026
Changed
  • Bumped app/package/runtime version from 1.7.1 to 1.7.2.
Fixed
  • Corrected state-machine input type detection so boolean and number inputs are not misclassified as triggers.
  • Trigger controls now fire only actual trigger inputs, restoring expected state-machine transitions and related input updates.

v1.7.1

February 14, 2026
Added
  • New No BG control to return canvas background to transparent mode.
  • New Transparency mode toggle in player settings.
  • New desktop Click Through toggle (best-effort transparent-pixel passthrough sampling).
Changed
  • Bumped app/package/runtime version from 1.7.0 to 1.7.1.
  • Exported demo bundles now persist active player layout state (panel sizes/visibility, event console collapse/filter state, and transparency-related settings) from the moment export is triggered.
  • Continued build traceability with numbered build identifiers (bNNNN-YYYYMMDD-HHMM-<gitsha>) for test installs.
Fixed
  • Demo export hydration now restores right-panel width/visibility and event-console layout state instead of always using defaults.
  • Desktop click-through transparency now uses continuous cursor-position sync (no pulse mode), reducing focus flapping and improving pass-through reliability.
  • Reset control now performs a full autoplay-style reload instead of leaving playback stopped.
  • VM/state-machine property values set in the Properties panel are now captured and restored after reset/restart (trigger inputs excluded).
  • Exported demo template now disables transparency toggle UI to avoid exposing a non-functional desktop-only control.

v1.7.0

February 13, 2026
Changed
  • Bumped app/package/runtime version from 1.6.3 to 1.7.0.
  • Updated docs and release notes for current runtime and UI behavior.
Fixed
  • Event console filter toggles now remain single-line in narrow layouts (prevents RIVE USER wrapping).
  • Refreshed app icon assets across desktop/mobile icon sets in repository.

v1.6.3

February 13, 2026
Changed
  • Bumped app/package/runtime version from 1.6.2 to 1.6.3.
Fixed
  • VM and state-machine control UI now continuously syncs live runtime values, including booleans changed by animation/listener logic.
  • Preserved in-progress user edits while syncing by skipping active focused inputs.

v1.6.2

February 13, 2026
Changed
  • Bumped app/package/runtime version from 1.6.1 to 1.6.2.
Fixed
  • Hardened Tauri v2 frontend bridge resolution for packaged builds by supporting window.__TAURI_INTERNALS__.invoke.
  • Prevented broken bare-module bridge imports in packaged protocol mode (tauri://) and restricted module imports to local dev server usage.
  • Kept open-file polling active in desktop mode so newly opened .riv files are detected reliably even when event listeners are unavailable.
  • Switched native pending open-file state to a queue (not single slot), preventing dropped files when multiple open events arrive quickly.
  • Added single-instance argument forwarding in Tauri so double-click/open-in arguments are forwarded and focused into the running app.

v1.6.1

February 13, 2026
Added
  • Visible app build identifier in the runtime info strip (build YYYYMMDD-HHMM-<gitsha>).
  • Build metadata injection in npm run build, including UTC timestamp + git short SHA.
Changed
  • Bumped app/package/runtime version from 1.6.0 to 1.6.1.
  • Version panel now shows both release and build identifier.
Fixed
  • Improved cold-launch file handoff reliability for .riv open events in Tauri v2 by: • persisting pending opened-file state in Rust, • emitting open-file at app scope, • adding frontend polling fallback for startup race conditions.

v1.6.0

February 13, 2026
Added
  • Dynamic VM input control generation for all discovered ViewModel inputs with nested, collapsible sections.
  • State machine input support (legacy control schema) for number, boolean, and trigger inputs.
  • Multi-source event console filtering with independent toggles (Native, Rive User, UI) plus text search.
  • Desktop open-file flow support for .riv files via system open actions (Open With, double-click association launch path handling).
  • Embedded VM hierarchy payload support in exported standalone demo bundles.
Changed
  • Upgraded app release versioning to 1.6.0 across frontend and Tauri package manifests.
  • Default startup layout now opens with the code editor panel hidden.
  • VM control tree defaults to root open, with nested ViewModels and state-machine groups collapsed by default.
  • Event drawer resize now triggers immediate canvas redraw/resizing to prevent squashed rendering.
  • Event log UI changed from single-select source dropdown to multi-toggle filters and search-first workflow.
  • Opened-file path normalization improved for file:// URIs, quoted paths, and Windows-style path separators.
Fixed
  • Trigger execution reliability for VM/state-machine controls by resolving accessors per-control-source.
  • Root VM duplicate-input suppression now keys by full input path (not name only), preventing accidental hidden controls.
  • File-open error handling robustness for invalid/empty open-file payloads.
  • Runtime resize consistency during panel drag and panel visibility transitions.

v1.5.0

February 11, 2026
Added
  • Introduced redesigned player shell aligned to the design system direction.
  • Added nested VM control presentation and event console surface as part of redesign baseline.
Changed
  • Updated layout structure to support collapsible side panels and expanded control density.

v1.4.3

November 19, 2025
Changed
  • Bumped manifests to 1.4.3.
  • Stabilized release automation triggering from commit subject parsing.

v1.4.2

November 19, 2025
Fixed
  • Corrected VM Explorer type detection edge cases.
  • Reduced source map warning noise in app/runtime output.

v1.4.1

November 19, 2025
Fixed
  • Improved UI flexibility and code organization for desktop/player surfaces.

v1.4.0

November 19, 2025
Added
  • CodeMirror 6 script editor integration.
  • VM Explorer tooling and helper command injection for runtime inspection.
  • Expanded developer-focused workflow in app UI.

v1.3.0

November 18, 2025
Added
  • Fullscreen mode with improved user experience.
  • Fullscreen support in exported demo flow.

v1.2.6

November 11, 2025
Changed
  • Bumped manifests to 1.2.6.
  • Consolidated latest build and packaging updates into patch release.

v1.2.5

November 11, 2025
Fixed
  • Verified ad-hoc signing flow for separated architecture builds.
  • Hardened macOS CI packaging behavior.

v1.2.4

November 11, 2025
Fixed
  • Prevented CI double-build by explicitly setting tauriScript in workflow.

v1.2.3

November 11, 2025
Changed
  • Improved release documentation and user-facing download instructions.

v1.2.2

November 11, 2025
Changed
  • Bumped manifests to 1.2.2.
  • Aligned patch release process with local versioning scripts.

v1.2.1

November 11, 2025
Added
  • Local version bump workflow and pre-push enforcement tooling.
  • Version synchronization scripts across package.json, Tauri config, and Cargo.

v1.2.0

November 11, 2025
Added
  • Build and distribution optimizations for packaged desktop output.
  • Service worker and build pipeline updates for improved artifact behavior.

v1.1.7

November 11, 2025
Changed
  • Optimized build size and architecture handling for release artifacts.

v1.1.6

November 11, 2025
Fixed
  • Enabled full bundle target generation for Windows installers.

v1.1.5

November 11, 2025
Fixed
  • Improved release workflow permissions and reliability for creating release artifacts.

v1.1.4

November 11, 2025
Fixed
  • Added package-lock.json support to stabilize npm cache behavior in CI.

v1.1.3

November 11, 2025
Changed
  • Standardized automated patch bump workflow and release commit handling.

v1.1.2

November 11, 2025
Added
  • Initial semantic-version CI/CD release automation.
Fixed
  • Cargo.lock handling in automated bump flow.
  • Permissions for workflow write operations.

v1.1.1

November 11, 2025
Fixed
  • Demo bundle button behavior and Tauri integration stability.
  • Template defaults (autoBind) in exported demo HTML.

v1.1.0

November 11, 2025
Added
  • Standalone demo bundle generation with embedded HTML export.

v1.0.0

November 11, 2025
Added
  • Initial Rive Animation Viewer foundation.
  • Baseline desktop wrapper, runtime loading, and demo-bundle infrastructure.