Changelog
All notable changes to the LERP (Luau Education for Rive Professionals) course are documented here.
[1.2.12] — 2026-06-14
Added
- While-loop freeze guard guidance (LERP-GAP-016) — strengthened the Fundamentals -> Iteration infinite-loop warning and added an Exercise 4 safety note in Fundamentals -> Control Flow. Reported by Rive Community user Avo. The note calls out the exact failure mode from the reported
Exercise4_WhileCountdownscript: awhile energy > 0 doloop that incrementsstepsbut never changesenergy, causinginit()to never return.
Fixed
- Control Flow Exercise 4 learner-safety gap — the exercise now explicitly warns not to run a while loop unless the loop body changes the countdown value, because a non-ending loop in
init()can make affected Rive editor builds unresponsive. Reported by Rive Community user Avo.
[1.2.11] — 2026-06-12
Fixed
- Exercise 3 triangle winding (LERP-ERR-015) — the Node Protocol drawing exercise described its triangle points in counter-clockwise order, which the current clockwise-fill renderer does not draw, so following the exercise exactly produced an invisible shape. Point order corrected to clockwise. Reported by GitHub user belal-sweileh in issue #2; reproduced live in the Early Access editor (2026-06-12) with a side-by-side CW/CCW probe.
Added
- Winding-direction guidance — new warnings in the Exercise 3 premise, the Path API reference, and the quick reference: fills require clockwise winding (y points down in artboard coordinates), and the scripting API currently exposes no fill-rule control on
PathorPaint. - Errata entry LERP-ERR-015 — full evidence trail for the winding behavior, including the runtime's clockwise fill pipeline.
[1.2.10] — 2026-06-12
All items in this release were validated live in the Rive Early Access editor (2026-06-11) using instrumented probe Node scripts and Test-protocol runtime checks driven through the Rive MCP, cross-checked against the editor's built-in scripting reference.
Added
- Node advance two-clock model (LERP-GAP-012) — new "Playback vs Design Mode: The Two advance() Clocks" section in
rive/protocols/node-lifecycleplus an advance-semantics admonition inrive/protocols/node-protocol: returningfalseunsubscribes from the playback advance loop only (a false-returning probe received zero advance calls during ~10 s of playback while drawing ~600 frames);drawis fully independent; design-modeadvancefires as event-driven settle passes withseconds = 0and ignores the return value. Includes guard rules for time-based math. Color.toFloatin the Color reference — surfaced inapi/core-types(previously only documented in the GPU shaders page) with runtime-confirmed output values.- Color runtime representation — documented that
Coloris a plain Luaunumber(ARGB packed integer) and that raw hex literals such as0xFFFF0000are validColorvalues. - Vector
zcomponent and[3]indexing — documented inapi/core-types(always0for 2D vectors; populated by 3D APIs such asMat4:transformPoint). - Errata tracker entries — added LERP-ERR-011, LERP-GAP-012, LERP-ERR-013, and LERP-GAP-014 with live-probe evidence, including the upstream Rive report (the editor reference's
Paint.withexample usesColor.hex, which does not exist at runtime, and itsadvancecomment contradicts measured behavior).
Fixed
- Node
drawrequirement (LERP-ERR-011) —drawwas incorrectly documented as required for a Node script to appear in the add-to-scene menu. Editor-validated: a draw-less script compiles cleanly, appears in the menu, places as a script node, and runsinit/advance. Updated the requirements block, protocol table, AE/JS comparison, common-mistakes section, exercise premise, and quiznode-protocol-q1inrive/protocols/node-protocol. - Deprecated Vector instance-method usage (LERP-ERR-013) — the glossary Vector entry and the environment Vector exercise still taught
vec:length()/vec:normalized()despite the core-types deprecation table; both now use staticVector.length(...)/Vector.normalized(...). - Styling/Path reference drift (LERP-GAP-014) —
PaintDefinition.gradientis now typed(Gradient | false)?with a note that assigningfalsealso clears the livepaint.gradientproperty (reads backnil); the path mutation rule is now stated generally (any mutation after drawing requires waiting a frame, not justreset());path:addaccepts anyPathData;positionAndTangentdocuments distance clamping and the normalized tangent;extractdocuments clamping and thestartWithMovedefault oftrue.
Changed
- Course metadata refresh — sidebar "Last reviewed" date updated for this errata pass.
[1.2.9] — 2026-06-04
Added
- Script save/recompile onboarding note — added an early first-script warning with the save-state indicator screenshot so learners know the blue tab dot means unsaved changes and saving recompiles the script. Reported by Rive Community user Avo.
- Avo-reported errata tracker entries — added resolved errata entries for script save/recompile workflow, Node script placement/code-access wording, and exercise validator whitespace feedback.
Changed
- Runtime compatibility baseline revalidated — updated the current public runtime package line from
2.37.6to2.37.8, pinned npmgitHeadbc560112ab2ee7d0afd3418bd97970c2fcb36532, revalidated source-level API rows againstruntime-v0.1.106(5360c834eac2adbdfc49c808d1b2a8c61b014bbf), and clarified that shader/GPU lessons remain Rive Early Access editor-only. - Node script placement language clarified — reworded setup steps across lessons, exercises, project pages, API references, and the exercise registry from "attach to a shape" toward "add to the artboard, position or nest the script node." Reported by Rive Community user Avo.
Fixed
- Node placement code-access gap (LERP-GAP-008) — clarified that nesting a Node script under a shape/group affects normal hierarchy behavior, but does not pass parent
NodeDataor existing shapePathDatainto Node callbacks. Reported by Rive Community user Avo. - Exercise validator whitespace feedback (LERP-ERR-010) — failed-answer displays now preserve exact spaces/tabs and call out whitespace-only mismatches, so copying a displayed failed answer cannot silently normalize spacing. Reported by Rive Community user Avo.
[1.2.8] — 2026-06-04
Added
- ScriptedInterpolator protocol coverage — added
rive/protocols/scripted-interpolator-protocolwith runtime-backed behavior, fallback semantics, exercise, and quiz. - Interpolation API page — added
api/interpolationand linked it in API Reference navigation so ScriptedInterpolator has a direct API location. - Mat4 API coverage — expanded
api/core-typeswith full Mat4 constructors, static helpers, transforms, buffer write, and operator semantics. - Promise/async/await reference — added Promise runtime coverage to
api/systemand quick-reference usage snippets for async image decode workflows. - Context advanced rendering coverage — added
context:canvas,context:gpuCanvas,context:features,context:preferredCanvasFormat,context:loadShader, andcontext:decodeImagetoapi/data-input. - GPU Shaders and 3D Rendering course chapter — added
advanced/gpu-shaderswith early-access shader workflow guidance,drawCanvaslifecycle positioning, WGSL/Luau examples, 3 exercises, and 5 quizzes. - GPU Shaders API reference — added
api/gpu-shaderscoveringGPUCanvas,Shader,GPURenderPass,GPUPipeline,GPUBuffer,GPUTexture,GPUSampler, bind groups, descriptor types, string literal types,GPUFeatures,Image:view(), and shader troubleshooting. - GPU Shader Example Labs project — added
projects/gpu-shader-labsas a guided 10-lab path based on the corrected local Rive shader example pack, covering first triangle setup, uniform animation, UV debugging, image sampling, sampler modes, dissolve masks, two-pass blur, depth-tested 3D geometry, ray marching, and glass distortion. - Shader lab exercises and quizzes — added 3 validator-backed project exercises and 4 quizzes focused on typed descriptors, guarded shader/image setup,
UBOEntry.size, and explicit render-to-texture source strategies. - Release and deployment workflow — added
release-workflowas the canonical maintainer protocol for drafting, local review, commit/tag release, Vercel production deploys, verification, and rollback.
Changed
- Runtime compatibility baseline updated — refreshed
rive/runtime-compatibilityto the May 12, 2026 course-wide audit with upstream runtime snapshotruntime-v0.1.64(b25a32218c6308ac8dc4b1cb69df62de84d78ba4) and npm C++ WASM runtime line2.37.6(gitHead2833de372c0d22596494c89c328008ce5b1106d7, published May 8, 2026 UTC). - Release-tier alignment for advanced rendering APIs — reclassified GPU/shader object families as
Preview / rollout-dependentwhile keepingCanvas+decodeImage/DecodedImageas officially released advanced surfaces; updatedapi/data-input,api/assets, andrive/runtime-compatibility. - Listener payload coverage expanded — updated Events and ListenerAction docs with gamepad payload guards/accessors and explicit invocation field mapping.
- Node lifecycle coverage expanded — added keyboard/text callback handling guidance and propagation semantics (
return truestops propagation). - Artboard input typing guidance improved — updated Inputs docs to include
Input<Artboard<Data.X>>andInput<Artboard<nil>>patterns, plusinstance(viewModel)guidance. - Current shader naming adopted — new examples now use
context:shader(name)andGPUCanvas.format, and explicitly flag oldercontext:loadShader(name)/context:preferredCanvasFormat()references as stale for new LERP shader material. - Lifecycle docs expanded —
drawCanvas(self)is now documented in Node, Layout, lifecycle, capability matrix, quick reference, glossary, and shader lessons as the correct phase for offscreenCanvasandGPUCanvasrendering. - Shader lesson updated for type-safe runtime-v0.1.106 patterns — rewrote the minimal triangle and supporting snippets to use non-null local GPU resources, typed descriptor helpers, local optional-field guards in
drawCanvas, and byte-accurate uniform binding sizes. - GPU API reference tightened — documented descriptor-local construction,
getBindGroupLayoutauto-layout caveats, optionalcontext:shader(name)failure causes, image asset requirements, sampler blur checks, WGSL swizzle assignment limits, and explicit source-texture requirements for glass effects. - Runtime compatibility shader baseline clarified — updated
rive/runtime-compatibilityto label the runtime-v0.1.106 shader baseline as Rive Early Access only, while preserving the May 12, 2026 course-wide runtime audit as the main baseline. - External editor tooling documented — added Rive Luau LSP / VS Code extension recommendations for writing
.luauscripts in VS Code, Cursor, Windsurf, and other LSP-capable editors, including shader-specific syntax and descriptor-checking guidance. - Course metadata refreshed — updated sidebar review date, site map, progress registry, quiz tracking, discoverability artifacts, and course counts for the roll-up release.
Fixed
- PropertyList inconsistency (LERP-ERR-006) — replaced stale
list.count/list:item(index)usage withlist.length/list[index]and documentedclear,removeAt, andremoveAllOfin API and advanced lessons. - Version alignment drift — synchronized runtime-version references across API, protocol, matrix, and compatibility pages to a single May 12, 2026 audit baseline.
[1.2.7] — 2026-04-27
Added
- Runtime compatibility baseline page — added
rive/runtime-compatibilitywith both a pinned runtime source snapshot (npm gitHead@5581955for runtime line2.37.4, published April 24, 2026 UTC) and the current C++ WASM npm runtime release line (2.37.4across@rive-app/canvas,@rive-app/canvas-lite,@rive-app/webgl2,@rive-app/canvas-advanced), plus a live/partial/not-exposed matrix for docs-labeled "Coming soon" surfaces.
Changed
- API pages aligned to runtime baseline — Events now documents ListenerContext payload kinds (pointer/keyboard/text/focus/reported/view-model-change/none), Assets documents
AudioSource.duration, and Hierarchy explicitly marksNodeReadData.paint/asPath/asPaintas baseline-validated. - System + Glossary output wording —
Output<T>is now documented as not currently exposed in this baseline C++ Luau binding surface. - Listener lessons/quizzes updated — ListenerAction and Listeners protocol pages now teach the payload-guard pattern (
is...+as...) as the safe default. - Metadata and navigation sync — Intro, Quick Reference, Site Map, and sidebar metadata now include runtime baseline tracking links and updated review date.
- Audit protocol documentation — runtime baseline page now records how verification was executed (npm release checks, runtime commit pin, docs
(Coming soon)diffing, and binding-level confirmation) and defines required fields for future changelog runtime-audit entries.
[1.2.6] — 2026-04-26
Fixed
- OOP Exercise 6 (Read-Only Table) — corrected the exercise to use a proxy-table read-only pattern (
source+proxy) so writes to existing keys are properly blocked through__newindexon the proxy. Reported in GitHub issue #1. - Exercise registry sync — updated
oop-indexmeta-6hints and explanation to reflect true Luau metamethod behavior from issue #1.
[1.2.5] — 2026-04-26
Added
- Rive errata tracker review pass — integrated corrections from
docs/rive/rive-doc-errata.mdxand marked this batch as resolved in LERP.
Fixed
- ListenerAction callback guidance — docs now prefer
performAction(self, listenerContext)and markperform(self, pointerEvent)as legacy. - Path Effect command checks — replaced runtime
CommandType.*examples with editor-validated string comparisons and clarifiedCommandTypeis not a guaranteed global Luau table. - ViewModel context semantics — corrected
context:viewModel()wording to immediate data-context behavior and clarifiedcontext:rootViewModel()for root/artboard state. - Property listener lifetime warnings — added guidance to retain VM/property handles on
self(or use anchored overloads) for long-lived listeners. - Node pointer-event consumption guidance — replaced boolean return consume/propagate wording with
event:hit()/event:hit(true).
Changed
- Course metadata — updated Intro snapshot date/counts and sidebar "Last reviewed" date for the errata pass.
[1.2.4] — 2026-03-23
Added
- Tips and Tricks page — new reference index of proven workarounds and non-obvious patterns: Bus Module Pattern (with use cases for bounds, Input types, and EventBus),
advance()return value gotcha,and/orstring literal type widening, Sustained-Boolean Pattern (with boolean reset and trigger listener bug note), cubic bezier easing in pure Luau, and debug toggle convention - Bus Pattern documentation — new section in Util Protocol explaining intentional shared state via
require()caching for cross-script communication, with production-tested code examples (HitboxBus, PathEffect-to-Node data sharing)
Changed
- Util Protocol reframed — replaced blanket "avoid global state" language with nuanced guidance distinguishing accidental shared state (dangerous) from intentional bus architecture (legitimate pattern); updated quiz explanation, gotcha section, and summary accordingly
- Sidebar — added Tips and Tricks entry between API Reference and Quick Reference
Fixed
- Internal contradiction resolved — Listener Protocol already taught EventBus as legitimate shared state via Util scripts, while Util Protocol labeled all module-level state as BAD/WRONG; both pages now present a consistent position
[1.2.3] — 2026-03-14
Added
- Complete Input type reference — every
Input<T>type now has its own section in the API reference with when-to-use explanation, factory default, how-to-read, complete code example, and editor setup steps (for types that need it) Input<Trigger>documentation — new "Trigger Inputs" section in Inputs guide, empirically validated in the Rive editor with 5 test scripts- Trigger execution order — documented the ground-truth frame order: trigger fn → advance → update (trigger function is called directly, not through update)
- Changelog page — new sidebar entry after Trust & Transparency linking to rendered changelog
Changed
- Input API reference rewritten — replaced bare code-block type list with per-type sections:
Input<number>,Input<boolean>,Input<string>,Input<Color>,Input<Data.X>,Input<Artboard>,Input<Trigger>, and Change Handling — all written for non-programmers - Trigger moved from Events to Data & Input —
Triggeris a data input type, not a pointer event; Events page now redirects to the correct location - Events page — simplified to PointerEvent only, with redirect link for Trigger
- Sidebar author metadata — "Last reviewed" updated to March 14, 2026
Fixed
- Trigger factory default — documented that
late()causes runtime error "expected trigger X to be a function"; must usefunction() end - Removed incorrect claims —
Input<Trigger>?does NOT hide triggers from the UI; you CAN assign to trigger inputs in init (and it sticks)
[1.2.2] — 2026-03-04
Added
- Path winding troubleshooting guidance — added a dedicated section in Procedural Geometry covering even-odd fill behavior, contour winding conflicts, cross-product detection, and strategy tradeoffs for multi-contour paths
- New advanced procedural exercise — added
Exercise 8: Fix Conflicting Winding in a Spike Burstwith validator IDadvanced-procedural-8 - Debugging cross-reference — added a new common error pattern for "shapes disappear with no runtime error" linking to the winding guidance
Changed
- Course snapshot metadata — refreshed intro page "Course at a Glance" counts and update date
- Trust sidebar metadata — updated "Last reviewed" date in the sidebar author meta block
[1.2.1] — 2026-02-27
Added
- Script capability matrix — new cross-protocol reference page summarizing supported callbacks and APIs by script type
- AI agent protocol guidance — added internal protocol notes (32-bit numeric bounds, pure Luau runtime rules,
noneutility semantics, and component-list generation rules)
Fixed
- Exercise expected outputs — replaced 76
ANSWER: <your result>placeholders with exact validator answers across 20 docs pages - ViewModels context API references — removed invalid
context:artboard()/context:node()calls and aligned examples with supported context methods - Exercise and quiz tracking maps — synchronized docs and local registry/index so all exercise and quiz IDs are mapped correctly
Changed
- Course consistency pass — resolved cross-page wording and metadata drift discovered during final v1.2 review
[1.2.0] — 2026-02-23
Added
- Rive AI Agent guide — comprehensive documentation of all 14 tools available to the Rive AI coding assistant, including workflow examples and tips
- ListenerAction protocol — new script protocol page for state machine listener action scripts
- TransitionCondition protocol — new script protocol page for custom state machine transition conditions
- Audio system documentation — AudioSource, AudioSound, and the Audio global API added to API reference
- Blob type documentation — binary data assets in API reference
- DataContext type — hierarchy traversal for data binding contexts
- Vector static methods —
Vector.cross,Vector.scaleAndAdd,Vector.scaleAndSuband other previously undocumented static methods - ImageSampler constructor — proper function constructor documentation replacing placeholder
- CHANGELOG.md — this file, with reconstituted version history
Fixed
- Path Effect scope wording — clarified that path effects apply to both strokes and fills (not strokes-only)
- Vector deprecated methods — instance methods (
vec:length(),vec:dot(), etc.) now marked as deprecated with static alternatives shown - ImageFilter values — corrected
trilineartobilinear(trilinear does not exist in Rive) - ImageSampler API — documented as function constructor
ImageSampler(wrapX, wrapY, filter)instead of opaque object - Context methods — added missing
rootViewModel(),dataContext(),image(),blob(),audio() - BlendMode usage — corrected from namespace access (
BlendMode.multiply) to string literals ("multiply") - PathEffect.update() signature — added missing
node: NodeReadDataparameter - PathCommand point counts — corrected to reflect Vector objects (1, 1, 2, 3) not raw number pairs (2, 2, 4, 6)
- DataValue type-check methods — corrected from property access to method calls (
dv:isNumber()notdv.isNumber) - PropertyList:insert parameter order — corrected to
insert(vm, index)per API - viewModel:getViewModel() return type — corrected to
PropertyViewModel? - artboard:instance() signature — added optional
viewModelparameter - artboard:node() return type — corrected to
NodeData? - Scene Node init() signature — added missing
context: Contextparameter - renderer:drawImageMesh signature — added full parameter list
- ContourMeasure documentation — expanded to show it has full PathMeasure capabilities, not just iteration
- NodeReadData missing methods — added
asPath()andasPaint() - PropertyList missing listeners — added
addListener()andremoveListener()
Changed
- Script types count — updated from 6 to 8 to include ListenerAction and TransitionCondition
- Quick Decision Guide — expanded mermaid chart with new script types
- Factory Functions table — added ListenerAction and TransitionCondition, removed Listener (not a script type)
- Glossary — added 8+ new terms (ListenerAction, TransitionCondition, AudioSource, AudioSound, Blob, DataContext, ImageSampler, Output)
- Strict-mode guidance — removed blanket
--!strictassumptions in docs where runtime behavior makes strict mode optional
[1.1.2] — 2026-02-17
Fixed
- Added
.vercelto.gitignore
[1.1.1] — 2026-01-24
Fixed
- Major audit fixes across documentation based on runtime testing
- Navigation routing improvements for experience-based paths
- Untracked
.claudefolders from the repository - Strict mode optionality wording clarified in docs
[1.1.0] — 2026-01-15
Added
- Rive Luau expert agent with skills integration
- Beginner-friendly "Your First Script" page
- Beginner exercise with proper template format
- Test scripts support added to gitignore
Fixed
- Categorical claims corrected based on runtime testing
[1.0.1] — 2026-01-15
Added
- Glossary expanded with 25+ new terms
- Mat2D wrapped in Term component for consistent linking
Fixed
- API claims corrected and missing documentation added (#87)
- Angle bracket escaped in MDX to fix compilation error
[1.0.0] — 2026-01-14
Added
- Complete exercise system with progress tracking
- Comprehensive lesson improvements with AE/JS comparisons
- All lessons migrated to Rive-first format with dark mode fixes
- Comprehensive lessons for Fundamentals, Types, and OOP modules
- Complete API reference and quick-reference content
- CI/CD deployment pipeline
- LERP brand assets
Fixed
- Exercise expected-output blocks switched from literal answers to guidance placeholders (later reverted in 1.2.1)
- Build warnings resolved across all exercises
[0.8.0] — 2026-01-13
Added
- Migrated to Docusaurus with interactive quizzes
- Loading indicator and fallback links
- Code exercises and quiz reset functionality
[0.5.0] — 2026-01-13
Added
- Split guide into loadable parts
- Navigation links to reference docs
- Improved layout and reference documentation
[0.1.0] — 2026-01-13
Added
- Initial LERP course added to forge platform