For web and app developers

Animations your code can talk to.

Load one .egg file, start its state machine and set inputs and data from your app. The open-source runtime draws it on a canvas or a native view and reports events back.

In short

Ova Motion gives developers interactive animations as data: an .egg file with state machines and view models that your code drives through a small API (set_bool, set_number, fire, view model setters, events). Runtimes exist for web, iOS and macOS, Android, Flutter, Unity, Unreal and a C API, under MIT or Apache-2.0.

Runtimes
Web (WebAssembly), Swift, Kotlin, Dart and Flutter, Unity C#, Unreal, C and C++
License
MIT or Apache-2.0 (runtimes)
Inputs
Booleans, numbers, triggers, pointer, keyboard, gamepad, text input
Data
View models: number, bool, string, colour, enum, trigger, picture and lists
Events
Named events, open URL and sounds, delivered to your code
Accessibility
Tappable shapes mirrored as accessible elements on the web

One small API on every platform

Every runtime exposes the same calls, so a file behaves the same in a React app, a SwiftUI screen or a Unity HUD.

CallDoes
start a state machineRuns the logic the designer made
set_bool, set_number, fireSets an input or fires a trigger
vm_set_number, vm_set_string, vm_fire …Writes a view model property bound to text, colour or motion
state name, eventsReads where the machine is and what it reported
node_id, node_boundsFinds a named shape and its bounds, to place your own UI next to it

On the web

main.jsweb runtime
import init, * as egg from "./player/egg_web.js";
import { mount } from "./player/egg-player.js";

await init();
const bytes = new Uint8Array(await (await fetch("hatch.egg")).arrayBuffer());
const view = mount(egg, document.querySelector("canvas"), bytes, { machine: "hatch" });

view.player.fire("tap");

The player sizes the canvas, runs the frame loop and forwards pointer, wheel, keyboard and text input. The web runtime package also has a React component.

Compared with Lottie, GIF, video and CSS

  • Lottie plays a timeline; interaction needs extra tooling. An .egg file carries its own states, listeners and data bindings.
  • GIF and video are pixels: blurry when scaled, large, and they cannot react. An .egg file is vector and reacts to input.
  • Hand-written CSS or native animation code is exact but slow to change. With Ova Motion the designer changes the file and your code stays the same.

Last checked against the product on 2026-10-15.

Examples you can play

All templates

Questions

Is the runtime open source?

Yes. The runtimes are licensed MIT or Apache-2.0. The editor is a separate product.

How big is an .egg file?

Usually tens of kilobytes. The Hatch scene on the home page, with its art, animations and state machine, is about 86 KB.

Does it work with React, Vue or Svelte?

Yes. The web runtime mounts on any canvas, so it works in any framework. A React component is included.

Can I set text and numbers from my app?

Yes. View model properties bound in the file (text, numbers, colours, lists, pictures) are set from code at run time.

Is there a React Native runtime?

Not yet. There are runtimes for the web, Swift, Kotlin, Flutter, Unity, Unreal and a C API.

Start with an egg.
Ship an interface.

Open the editor in your browser, or download it for macOS, Windows and Linux.