rive-analyzer
by nano-step
README.md
# Rive Playground
**v1.1.0 — "Living Canvas"**
> *Where your animation goes from a file to a living product.*
Inspect, validate, control, and ship Rive `.riv` animation files — from the terminal, AI assistants, or a visual playground. The complete toolchain for teams that build with Rive at scale.
---
## What's New in v1.1.0 — "Living Canvas"
| Area | Feature |
|------|---------|
| Parser | Animation `loopType` — oneShot / loop / pingPong |
| Parser | `workStart` / `workEnd` frame range per animation |
| Parser | ViewModel extraction — real data from `viewModelCount()` / `getProperties()` |
| Parser | DataEnum extraction — full enum names and values |
| CLI | `list-assets` — enumerate embedded/CDN images, fonts, audio |
| CLI | `init` — scaffold `.rive-playground/` project directory |
| CLI | `contract-generate` — generate `.rive-contract.yaml` from .riv |
| CLI | `contract-validate` — validate .riv against contract (CI-friendly) |
| CLI | `generate-platform` — codegen for Swift, Kotlin, JSON Schema, Zod, Dart |
| CLI | `compare` — diff two .riv files, detect breaking changes |
| MCP | 5 new tools: `list-rive-assets`, `generate-rive-contract`, `validate-rive-contract`, `generate-platform-types`, `compare-rive-files` |
| Playground | Events Log Panel — real-time Rive event stream |
| Playground | Preset Library — save/load/apply named configurations |
| Playground | URL deep-linking — `?file=<url>&artboard=Main&sm=...` |
| Playground | Keyboard shortcuts — Space play/pause, R reset, Ctrl+S save preset |
| Playground | Error toasts — surface silent failures visually |
| Infra | Vitest test suite (16 tests) |
| Infra | `.rive-playground/` project config directory |
---
## Overview
```
rive-analyzer CLI Terminal-first inspection, codegen, validation
MCP Server AI assistant integration (Claude, OpenCode)
Rive Playground Visual editor + preset library + event log
.rive-playground/ Project config — presets, contracts (git-trackable)
```
---
## Installation
```bash
cd /path/to/rive-mcp-analyzer
npm install
npm run build
npm link # optional: global CLI install
```
---
## CLI Reference
### inspect
```bash
rive-analyzer inspect ./animation.riv
rive-analyzer inspect ./animation.riv --json
```
### scan
```bash
rive-analyzer scan ./public/
```
### validate
```bash
rive-analyzer validate ./animation.riv ./src/constants/rive.ts
```
### generate-types
```bash
rive-analyzer generate-types ./animation.riv -o ./src/rive-generated.ts
```
### generate-platform
```bash
rive-analyzer generate-platform ./animation.riv --target swift
rive-analyzer generate-platform ./animation.riv --target kotlin -o RiveConstants.kt
rive-analyzer generate-platform ./animation.riv --target json-schema
rive-analyzer generate-platform ./animation.riv --target zod
rive-analyzer generate-platform ./animation.riv --target dart
```
### contract-generate
```bash
rive-analyzer contract-generate ./animation.riv -o .rive-playground/contracts/animation.yaml
```
Contract example:
```yaml
version: 1.1.0
file: animation.riv
artboard: Main
stateMachine: Main SM
inputs:
speed:
type: number
min: 0
max: 10
description: "Animation speed multiplier"
isVisible:
type: boolean
RESET:
type: trigger
```
### contract-validate
```bash
rive-analyzer contract-validate ./animation.riv ./animation.rive-contract.yaml
# Exits 1 if: input removed, type changed, artboard renamed
```
### compare
```bash
rive-analyzer compare ./animation-v1.riv ./animation-v2.riv
# Exits 1 on breaking changes — CI-safe
```
### list-assets
```bash
rive-analyzer list-assets ./animation.riv
```
### export-fields
```bash
rive-analyzer export-fields ./animation.riv --json
```
### init
```bash
rive-analyzer init
# Creates: .rive-playground/{presets,contracts,schedules,config.json}
```
### watch
```bash
rive-analyzer watch "./public/**/*.riv"
```
---
## MCP Server (11 tools)
```bash
node dist/mcp.js
```
Add to Claude Desktop:
```json
{
"mcpServers": {
"rive-analyzer": {
"command": "node",
"args": ["/absolute/path/to/rive-mcp-analyzer/dist/mcp.js"]
}
}
}
```
| Tool | Description |
|------|-------------|
| `inspect-rive` | Parse .riv — artboards, SMs, animations |
| `scan-rive-files` | Scan directory recursively |
| `validate-rive-config` | Check JS/TS config against .riv |
| `generate-rive-types` | TypeScript constants |
| `watch-rive-files` | Watch for changes |
| `export-rive-fields` | Deep extract ViewModels, DataEnums |
| `list-rive-assets` | Enumerate embedded/CDN assets |
| `generate-rive-contract` | Generate .rive-contract.yaml |
| `validate-rive-contract` | Validate .riv against contract |
| `generate-platform-types` | Swift/Kotlin/JSON Schema/Zod/Dart |
| `compare-rive-files` | Diff two files, detect breaking changes |
---
## Playground
```bash
cd playground
npm install
npm run dev
# Open http://localhost:5173
```
### Panels
| Panel | What it does |
|-------|-------------|
| Artboard | Select artboard and animation |
| State Machine | Live boolean/number/trigger controls |
| ViewModel | All property types with live editing |
| Text Runs | Edit text content, auto-discover from VMs |
| Events | Real-time Rive event log |
| Presets | Save / load / apply named configurations |
| Export | JSON + Markdown export |
### Keyboard Shortcuts
| Key | Action |
|-----|--------|
| `Space` | Play / Pause |
| `R` | Reset animation |
| `Ctrl/Cmd + S` | Save current state as preset |
| `Ctrl + Scroll` | Zoom canvas |
| `Alt + Drag` | Pan canvas |
| `Alt + Double-click` | Reset view |
### URL Deep-linking
```
http://localhost:5173?file=https://cdn.example.com/animation.riv&artboard=Main&sm=Main+SM
```
---
## Rive Contract System
The safety net between designers and developers. Define constraints on inputs — validate on every CI run.
```bash
# 1. Generate contract scaffold from .riv
rive-analyzer contract-generate hero.riv -o .rive-playground/contracts/hero.yaml
# 2. Edit: add min/max, required, descriptions
# 3. Validate in CI
rive-analyzer contract-validate hero.riv .rive-playground/contracts/hero.yaml
```
---
## Project Structure
```
src/
cli.ts CLI (Commander + Clack, banner + NhoNH signature)
mcp.ts MCP server (11 tools)
parser/riveParser.ts WASM headless parser
tools/
contract.ts Contract system (YAML + Zod)
compareFiles.ts Breaking change detection
generateMultiplatform.ts Swift/Kotlin/JSON Schema/Zod/Dart codegen
listAssets.ts Asset enumeration
exportFields.ts ViewModel/DataEnum extraction
[inspect, scan, validate, generateTypes, watch].ts
ui/theme.ts CLI design system
ui/banner.ts ASCII art + NhoNH signature
playground/src/
hooks/useRivePlayground.ts Core state + event capture
hooks/usePresets.ts localStorage preset library
components/panels/
EventsPanel.tsx Real-time event log
PresetsPanel.tsx Save/load configurations
components/Toast.tsx Error notifications
types.ts RiveEvent, Preset, PlaygroundState
.rive-playground/ Git-trackable project config
presets/ Named configuration snapshots
contracts/ .rive-contract.yaml files
schedules/ (v1.2.0)
```
---
## Roadmap
| Version | Theme | Highlights |
|---------|-------|-----------|
| v1.1.0 | **Living Canvas** | Contract system, multi-platform codegen, preset library, events |
| v1.2.0 | **Living Server** | LiveConfig HTTP+WS, Config Scheduler, MCP-Playground bridge |
| v1.3.0 | **Intelligence** | AI Narrator, AI Config Assistant (opt-in), SM Visual Graph |
---
*Built by [NhoNH](https://github.com/hoainho) · rive-analyzer · github.com/hoainho*
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues