Skip to content

[Community] Rive Playground β€” Open-source visual inspector & real-time ViewModel editor for .riv filesΒ #415

@hoainho

Description

@hoainho

🎨 Rive Playground

Inspect, edit, and export Rive animations β€” right in the browser.
β–Ά Live Demo Β· GitHub Β· Landing Page

The problem

Our LiveOps team manages dozens of Rive animations for in-app campaigns. They need to tweak text, colors, and toggles daily β€” but don't have access to the Rive Editor.
We built this so they can drop a .riv file and start editing instantly.

What it does

Drop any .riv file β†’ see it play β†’ edit ViewModel properties in real-time β†’ export the config
Supported types: string Β· number Β· boolean Β· color Β· enum Β· trigger Β· image Β· nested viewModel
All changes reflect on the canvas immediately. No build step. No login.

Highlights

  • πŸ”§ Full ViewModel editing β€” every property type, including nested VMs and image upload/URL
  • πŸ“‹ Animation inspector β€” all artboards, animations with fps/duration, SM inputs with type badges
  • πŸ” Canvas controls β€” zoom, pan, direct Rive event passthrough (hover, click)
  • πŸ“€ Config export β€” JSON + Markdown for LiveOps β†’ CMS handoff
  • ⌨️ CLI + MCP Server β€” inspect .riv files from terminal or AI assistants

Built with

Package Version Role
@rive-app/react-canvas v4.27 Rendering + interaction
@rive-app/canvas-advanced v2.36 Metadata extraction (zero native deps)
React 19 Playground UI
Vite 8 Build tool

Patterns we discovered

These might be useful for other developers working with rive-react:

Challenge Solution
useRive doesn't re-init on param change React key forces clean remount
defaultViewModel().defaultInstance() returns disconnected copy Use rive.viewModelInstance (live-bound by runtime)
Repeated propertyFromPath calls fail after first access Cache property objects at extraction time
Stale closures in useCallback useRef for mutable values like selected SM name

Feedback welcome

We'd love any input from the Rive team:

  • Anything in the API we're using incorrectly?
  • Would this fit in awesome-rive?
    Thanks for building such an incredible animation platform πŸ™Œ

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions