Runtimes · Android

Interactive animation on Android.

The Kotlin runtime wraps the native library for Android (arm64-v8a and x86_64) and the desktop JVM. Load a file, start its state machine, advance it each frame and render it.

In short

On Android, add the Ova Motion runtime AAR, load the .egg with EggPlayer.load(bytes), start a state machine, then advance and render it each frame into a bitmap or a GPU surface. Set inputs with setBool, setNumber and fire, and view model properties from Kotlin.

Platform
Android (arm64-v8a, x86_64) and the JVM
Binding
Kotlin, packaged as an AAR
Draws with
RGBA pixels, or the GPU
Same file everywhere
One .egg plays the same on every runtime
License
MIT or Apache-2.0

In Kotlin

Switch.ktkotlin
EggPlayer.load(bytes).use { p ->
    p.startStateMachine("switch")
    p.setBool("on", true)
    p.advance(1.0 / 60)
    val rgba = p.renderRgba(256, 128)
}

The AAR holds the native library for each ABI and the Kotlin wrapper; it uses JNA to reach the library.

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

Examples you can play

All templates

Questions

Does it work with Jetpack Compose?

Yes. Draw the rendered frame into a Compose Canvas or an Image and forward pointer input to the player.

What can my code change at run time?

State machine inputs (booleans, numbers, triggers), view model properties bound in the file (text, numbers, colours, enums, pictures, lists), and pictures, sounds and fonts handed over by your app. Your code also reads the current state and the events the file reports.

Is the runtime free to use in commercial apps?

Yes. The runtimes are licensed MIT or Apache-2.0, and what you make in the editor is yours.

Start with an egg.
Ship an interface.

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