Skip to content

Alive by design

Real-time character systems
Rive / State / Input

02 — State machine anatomy

The same character, the same file. Five moods, a boolean, a trigger — set from outside, resolved inside one Rive state machine with six layers that each own different properties, so combinations never fight.

One character Many states No video

Rive owns
expression, gaze, proximity, blinking, transitions
App owns
mood · isLooking · surprise (view-model properties)
  • Try → curious + come close
  • Try → sleepy + click it
  • Try → angry + shake the pointer
Oko responding to mood controls

loading…

03 — Eyes / pointer lab

One pointer listener aligns one node. Its position is written into the view model and read back by six systems, each through its own converter chain: different lag, a mirrored range, a leash, a shared target. No React involved in the gaze.

Rive owns
tracking, smoothing, avoidance, proximity zones, blinking
App owns
window blur only (Rive can't see focus loss)
Six eye systems reacting to the pointer: direct, lazy, nervous, avoidant, curious and a coordinated group

01 — Direct

02 — Lazy

03 — Nervous

04 — Avoidant

05 — Curious

06 — Group

Edge cases handled in Rive: pointer leaving the canvas (exit listener + dispatchPointerExit) · rapid movement (interpolators retarget mid-flight) · touch (pointer events) Handled by the app: losing window focus.

04 — Creature ecosystem

Every creature is its own instance with its own state machine, created from one loaded file. The page runs the ecosystem — where things are, how far your pointer is, who is close to whom, how long you've been still — and writes those facts into each instance. What a fact means is decided inside Rive: one hides, one watches, one gets excited, one dozes, one follows.

Rive owns
each species' response, smoothing, clicks (its own listener)
App owns
positions, distances, neighbours, scroll, inactivity (~30 Hz)

4 instances · ≈0 fps · defaults to 4 on touch / low-power devices

05 — Scroll becomes input

Scroll is an input

A form that changes from seed to creature to machine to abstract object as you scroll
  1. Seed
  2. Creature
  3. Machine
  4. Abstract

progress = 0.0 · state-machine number input

06 — Drag / direct manipulation

Pull the tail, tug an ear, stretch the eye stalk. Each appendage is a chain of bones solved by inverse kinematics toward a handle. Releasing doesn't animate back on a timeline: the handle's constraint strength springs to zero through an elastic converter — the overshoot is physics-like, and entirely Rive.

Rive owns
grab, drag, IK, spring-back, sympathy, strain
App owns
release outside the canvas (window pointerup)
A long soft creature with draggable ears, tail and eye stalk

dragTail – · dragEarL – · dragEarR – · dragStalk – · strained –

pull tail → eyes widen · drag one ear → the other flicks · pull too far → it resists and sweats

07 — Mascot as interface

Hover the left or right of the character and it looks there — Rive writes lookDir, the page highlights the matching button. Click a side to navigate, the body for details, the orb to switch view. Saving never shows a spinner or a tick: the character carries the status.

Rive owns
gaze, hover zones, clicks → triggers, all status expression
App owns
navigation, content, the save request (status 0–3)
A guide character used as navigation. It looks toward the side you hover.

Specimen 01 / 04 · oko.riv

Oko

Click the character’s body for details.

status: Ready

08 — Data binding / live information

An abstract organism whose shape, colour and motion are driven by live values

React owns the numbers; Rive owns what they look like. Values flow into one bound view-model instance — nothing is re-created, nothing re-renders around the canvas. Rive smooths each change with its own interpolators.

Theme (colour binding)
rapid updates test
Rive owns
extension, colour blends, motion blends, smoothing, text layout
App owns
level · temperature · activity · score · label · theme

09 — Event round trip

User to Rive to app to Rive

A tall character holding a strange object. Click the object.

Offer

phase 1 / 4 · round trips 0 · object sphere

  1. Click the object the character holds.
A second, independent Rive instance that echoes the app's state
Rive owns
the click, the waiting pulse, both objects' morphs
App owns
what the click means: the next phase, colour, words, and telling both instances

User → Rive → App → Rive. The loop is the composition: background, type, metadata and a second instance all answer one click.

10 — Nested artboards

The same Face artboard — itself made of two nested Eye artboards — lives on three unrelated bodies. One value set at the top travels down three levels through keyed nested inputs; every component keeps its own life: eyes blink on their own clocks, accessories bob, companions orbit.

Bodies ─┬─ Tall ────┬─ Face ─┬─ Eye
        ├─ Round ───┤        └─ Eye
        └─ Crawler ─┼─ Solo [Hat · Antenna · Halo]
                    └─ Companion
Three different creatures sharing the same nested face and eye components

hover left · middle · right → shared look direction

Rive owns
propagation, swapping (Solo), independent component life
App owns
two inputs at the top level: mood, accessory

11 — Keyboard / focus / accessibility

Edge case Input ≠ pointer only

Tab into the selector, move with the arrow keys, choose with Space or Enter. Focus is a real DOM focus with a real accessible name; Rive renders what focus feels like — the lift, the ring drawing itself, the others turning to look.

checking runtime…

Rive owns
focus ring, gaze of the others, selection, confirm hop
App owns
focus, keyboard, ARIA (listbox), mirroring Rive-side clicks
Four creatures; the focused one lifts and the others look at it
Round
Square
Peak
Pill

Nothing selected

12 — Interrupted state machine

Each layer owns its properties: body, expression, attention, gaze, reactions, blinking. A reaction overrides expression only while it plays, then blends back to wherever the expression layer has moved in the meantime. Repeated triggers bounce between twin states, so nothing restarts with a snap.

Rive owns
arbitration — which layer wins, blending, re-triggering
App owns
the collisions below (timed writes to the view model)
Oko under conflicting inputs
  1. Press “Everything at once”. Then interfere with the pointer.

13 — Responsive creature

Not a scaled rectangle. With a layout fit the runtime resizes the artboard itself; the artboard’s width and height are bound back into its view model, and the state machine recomposes: full scene when wide, simplified in the middle, a tight portrait when narrow. Resizing never resets the state machine.

Rive owns
composition, anchoring props to edges, transitions between layouts
App owns
the frame size (and nothing else)
frame 1200×620 · artboard (written by Rive) –×– · dpr –
The same creature recomposed for the available space

14 — Performance / many instances

Each cell is a separate Rive instance drawing to its own canvas. The file is fetched and parsed once; instances share it. Offscreen cells stop rendering, a hidden tab pauses everything, and unmounting disposes each instance — the counters below should balance.

frame rate
≈ 0 fps
live instances
0
created / disposed
0 / 0
cells on screen
0 rendering · 12 paused
Rive owns
idle loop, hover (own listener per cell)
App owns
count, mounting, visibility pausing

Measure: CPU in the Performance panel, memory via heap snapshots before/after “Remount all”, resize the window while hovering.

15 — Collaborators in Rive

Collaborators in Rive

Featured work by friends, designers & Rive creators

Displayed with creator attribution and license information supplied with each project. These ten files are not made by this site — they run here unmodified, in their authors’ own state machines.

How this gallery reads its sources

Wall labels quote only the readme.md stored beside each file. Fields a README doesn’t contain are left out. The “From the file” notes come from parsing each .riv: its artboards, the state machine its author marked as default, and the kinds of input it listens for.

  1. 01Bici Speedgabrielrocha.co
  2. 02Hover HouseRyanRumbolt
  3. 03Hungry SnakeRyanRumbolt
  4. 04KeycapsMarcosVisuals
  5. 05Kuzu Kuzu Meemusaadanur
  6. 06Silly ScrollLala
  7. 07teenage engineering audio sampleraugustin.hiebel
  8. 08Vector Feathering: AvatarNovikoff
  9. 09Vintage Bikefredsalaun
  10. 10呆鸟MoukeMertens

Collaborator work 01 / 10

Bici Speed

Project
Bici Speed
Creator
gabrielrocha.co
License
CC BY
Date
24 July 2024
From the file (runtime inspection)
  • 11753-22528-bici-speed.riv
  • 3 artboards · 59 KB · format v7.0
  • playing “MASTER_BICI” → “State Machine 1”
  • default artboard → its designated default state machine
  • 0 inputs · 2 nested artboards
  • listens for: enter, move

Collaborator work 02 / 10

Hover House

Project
Hover House
Creator
RyanRumbolt
License
CC BY
Description
Little Wonders is a series of interactive illustrations crafted entirely in Rive - playful, living artworks that invite you to hover, click, and smile.Each series is created in collaboration with a different illustrator, celebrating their unique style through motion and interactivity. For the first edition, we partnered with long-time collaborator Justyna Stasik, whose whimsical characters and clean, expressive shapes translate beautifully into Rive’s world of dynamic animation.
Date
11 November 2025
From the file (runtime inspection)
  • 24967-46593-hover-house.riv
  • 1 artboard · 383 KB · format v7.0
  • playing “Instagram story - 1” → “State Machine 1”
  • default artboard → its designated default state machine
  • 13 inputs · 0 nested artboards
  • listens for: exit, enter, click, move, down, up

Collaborator work 03 / 10

Hungry Snake

Project
Hungry Snake
Creator
RyanRumbolt
License
CC BY
Description
Little Wonders is a series of interactive illustrations crafted entirely in Rive - playful, living artworks that invite you to hover, click, and smile.Each series is created in collaboration with a different illustrator, celebrating their unique style through motion and interactivity. For the first edition, we partnered with long-time collaborator Justyna Stasik, whose whimsical characters and clean, expressive shapes translate beautifully into Rive’s world of dynamic animation.
Date
11 November 2025
From the file (runtime inspection)
  • 24964-46590-hungry-snake.riv
  • 1 artboard · 365 KB · format v7.0
  • playing “Artboard” → “State Machine 1”
  • default artboard → its designated default state machine
  • 5 inputs · 0 nested artboards
  • listens for: event, exit, enter, up, move, down
Hungry Snake
Keycaps

Collaborator work 04 / 10

Keycaps

Project
Keycaps
Creator
MarcosVisuals
License
CC BY
Date
7 July 2025
Tags
#3d #Icons #blender
From the file (runtime inspection)
  • 21725-40780-keycaps.riv
  • 1 artboard · 2790 KB · format v7.0
  • playing “Artboard” → “State Machine 1”
  • default artboard → its designated default state machine
  • 4 inputs · 0 nested artboards
  • listens for: up, down, exit, enter
  • 2 view models (data binding)

Collaborator work 05 / 10

Kuzu Kuzu Mee

Project
Kuzu Kuzu Mee
Creator
musaadanur· For Hire
License
Not specified in supplied README
Description
Want to get an animation?Feel free to contact: musa-adanur@hotmail.comMore about me👇
Creator networks
Email ↗Linktree ↗
From the file (runtime inspection)
  • 28304-53466-kuzu-kuzu-mee.riv
  • 6 artboards · 128 KB · format v7.2
  • playing “contra” → “State Machine 1”
  • default artboard → its designated default state machine
  • 0 inputs · 2 nested artboards
  • no pointer listeners on the main state machine
  • 1 view models (data binding)
Kuzu Kuzu Mee

Collaborator work 06 / 10

Silly Scroll

Project
Silly Scroll
Creator
Lala
License
CC BY
Description
Testing scrolling layouts
Date
4 September 2025
From the file (runtime inspection)
  • 23391-43763-silly-scroll.riv
  • 42 artboards · 1109 KB · format v7.0
  • playing “SillyScroll” → “State Machine 1”
  • default artboard → its designated default state machine
  • 0 inputs · 27 nested artboards
  • no pointer listeners on the main state machine
Silly Scroll
teenage engineering audio sampler

Collaborator work 07 / 10

teenage engineering audio sampler

Project
teenage engineering audio samplerRemix
Creator
augustin.hiebel
License
CC BY
Description
A skeuomorphic animation inspired by teenage engineering audio samplers.Sliders and dials use click-and-drag gestures thx to @drawsgood
Date
14 June 2024
Tags
#realistic #skeuomorphic #toggle #button #slider #on #off #teenageengineering #machine #volume #click #button #audio #productdesign #audiosampler #electronicproduct
From the file (runtime inspection)
  • 11087-21237-teenage-engineering-audio-sampler.riv
  • 11 artboards · 954 KB · format v7.0
  • playing “Teenage Engineering sample recorder” → “State Machine 1”
  • default artboard → its designated default state machine
  • 1 inputs · 48 nested artboards · 15 text runs
  • listens for: down
Vector Feathering: Avatar

Collaborator work 08 / 10

Vector Feathering: Avatar

Project
Vector Feathering: Avatar
Creator
Novikoff
License
CC BY
Description
Imitation of Flutted glass, depth and cromatic abbetation.
Date
14 February 2025
From the file (runtime inspection)
  • 17013-31960-vector-feathering-avatar.riv
  • 2 artboards · 5 KB · format v7.0
  • playing “Artboard 2” → “State Machine 1”
  • default artboard → its designated default state machine
  • 0 inputs · 0 nested artboards · vector feathering
  • no pointer listeners on the main state machine
Vintage Bike

Collaborator work 09 / 10

Vintage Bike

Project
Vintage Bike
Creator
fredsalaun· For Hire
License
CC BY
Description
A project for vintage bike fans! Discover 4 iconic brands from the 60s. Enjoy.
Date
2 June 2026
Tags
#bike #vintage #tourdefrance #menu
From the file (runtime inspection)
  • 27842-52603-vintage-bike.riv
  • 9 artboards · 4405 KB · format v7.1
  • playing “Menu” → “State Machine 1”
  • default artboard → its designated default state machine
  • 0 inputs · 8 nested artboards · 1 text runs
  • no pointer listeners on the main state machine
  • 11 view models (data binding)

Collaborator work 10 / 10

呆鸟

English display aid: “dumb bird”

Project
呆鸟
Creator
MoukeMertens· For Hire
License
CC BY
Description
呆鸟一只
Date
26 February 2026
From the file (runtime inspection)
  • 26553-49787-.riv
  • 1 artboard · 12 KB · format v7.0
  • playing “Artboard 2” → “State Machine 1”
  • default artboard → its designated default state machine
  • 3 inputs · 0 nested artboards
  • listens for: enter, move, click, exit
  • 1 view models (data binding)
呆鸟

Work by others

The ten collaborator Rive files shown above belong to their respective creators. They are displayed unmodified, with the creator name and the license stated in the README supplied with each work. This site claims no ownership of them; where a README states no license, none is assumed.

Credit, links and license text are reproduced exactly as supplied. Where a creator listed a profile or contact, it is linked; nothing else is added.

WorkCreatorLicenseLinks
Bici Speedgabrielrocha.coCC BY—
Hover HouseRyanRumboltCC BY—
Hungry SnakeRyanRumboltCC BY—
KeycapsMarcosVisualsCC BY—
Kuzu Kuzu MeemusaadanurNot specified in supplied READMEEmail ↗Linktree ↗
Silly ScrollLalaCC BY—
teenage engineering audio sampleraugustin.hiebelCC BY—
Vector Feathering: AvatarNovikoffCC BY—
Vintage BikefredsalaunCC BY—
呆鸟MoukeMertensCC BY—

16 — Rive as typography

Type has state

The words Type Has State, rendered by Rive, changing temperament

The statement on the left is not HTML. A variable font is embedded in the .riv; its softness, optical size and wonk are bound axes, twelve single-glyph modifiers rotate, lift and stretch letters, and a blend state shakes them. Rive does not have to mean “character animation”.

Rive owns
font axes, per-glyph transforms, jitter, the shape behind
App owns
three numbers: absurd · soft · chaos

17 — Rive as microinteraction

Eight controls, 40–64 px each. Every one is a real button with a real accessible state; the drawing, the hover and every in-between frame is Rive. Expression doesn’t need a mascot.

Rive owns
hover (own listener), transitions, micro-motion
App owns
semantics, focus, pressed/expanded state

loading micro.riv…

18 — Edge case lab

Twenty things that go wrong in real products, tested on purpose. Some run here; others point at the section that exercises them, with the reading this page is taking right now.

  1. 01 Rapid pointer movement

    Interpolators retarget mid-flight instead of queueing. Pointer speed now: – px/ms — the hero’s pupils constrict above ~2.
  2. 02 Pointer leaving canvas

    Exit listeners + dispatchPointerExit: characters drift back to wandering. See the eye lab — leave the canvas fast.
  3. 03 Resize while active

    Fit.Layout resizes the artboard in place; the state machine keeps running. Try the responsive frame’s handle mid-transition.
  4. 04 Rapid repeated triggers

    Twin states let a trigger restart a one-shot without a snap. Fired: 0
    Favorite button used for trigger spam
  5. 05 Scroll reversal

    Progress is recomputed from layout each frame, never accumulated. Reversals seen: 0 · large jumps: 0
  6. 06 Transitions interrupted halfway

    Each new transition starts from the current blended pose, not the previous target.
    Small Oko for interruption test
  7. 07 Multiple Rive instances

    Live right now: 0 instances on this page (offscreen ones stop rendering).
  8. 08 Unmount / remount

    Created 0 · disposed 0
  9. 09 Delayed .riv loading

    The stage shows a quiet placeholder, then fades in — layout never shifts.
  10. 10 Failed asset loading

    Contained failure, surrounding content intact. Load errors: 0
  11. 11 Slow devices

    Cores ? · memory n/a GB. Below 4/4 the ecosystem starts at 4 creatures and the stress grid stays at 12.
  12. 12 High DPR displays

    devicePixelRatio – · the cell above draws into a –×– backing store for a 56px box.
  13. 13 Mobile touch

    Last pointer type: –. Touch-scroll stays enabled except on the drag creature, where the canvas claims the gesture.
  14. 14 Keyboard navigation

    The selector (11) and every microinteraction (17) are real DOM controls. Tab through them — Rive renders focus, the DOM owns it.
  15. 15 Focus loss

    Window blurred 0 times. On blur the hero and lab set present = false; the drag creature releases.
  16. 16 Tab hidden / visible

    Hidden 0 · shown 0. Every live instance pauses while hidden and resumes on return.
  17. 17 Returning via back

    Back/forward-cache restores: 0. On restore, canvases are resized and playback resumed.
  18. 18 State restoration

    The anatomy mood is kept in session storage and re-applied on load: stored none.
  19. 19 Nested state machine events

    Values set on the top artboard travel through keyed nested inputs three levels down (10). Rive events from the keeper arrive alongside its view-model trigger (09).
  20. 20 React + Rive changing together

    Stream the organism (08) and drag a slider: last write wins. Overlapping writes so far: 0 · total writes 0

Make it respond. Not just move.

Oko, sitting almost motionless, still following your pointer with its eye

Rive
State / Input / Character / Interface