noon

An experiment in animation

Animated visuals,
written in code.

Noon is an experimental animation engine inspired by Manim. It is written in Rust, with performance in mind, and supports authoring in Python and Rust.

The goal is to make creating animated visuals feel frictionless — for explanations, simulations, interactive design, and ideas that do not fit a category yet.

Experimental software. APIs and feature coverage are still changing.

One Rust enginePython · native & browserRust · native & WebAssembly

A few things to make

Start with an example.

Browse the gallery

These are captures of real Noon scenes, not illustrations of planned features. Play a clip here, or open its source in the playground and change it.

Clips are visual excerpts, not performance measurements. For input-driven scenes, try click selection or dragging objects in the gallery.

Choose your starting point

Python or Rust. Native or web.

In your browser

The playground includes an editor and runnable Python examples. Choose a scene, edit its source, and press Run.

The engine runs as WebAssembly, with WebGPU or WebGL2 rendering and Python through Pyodide. The first run needs to load the runtime.

Open your first scene
Python · ordinary scene authoringFull example ↗
from noon import *

class Demo(Scene):
    def construct(self):
        circle = Circle(color=BLUE)
        square = Square(color=PINK)
        square.next_to(circle, RIGHT)

        self.play(Create(circle), Create(square))
        self.play(
            circle.animate.shift(UP),
            square.animate.rotate(PI / 4),
            run_time=2,
        )
        self.wait(1)
Native Python CPython + the Rust engine

From a checkout, with CPython 3.11+ and the repository-pinned Rust toolchain. These commands use a POSIX shell.

git clone https://github.com/yongkyuns/noon.git
cd noon
python3 scripts/build-native-python.py --profile dev
PYTHONPATH=build/python python3 -m noon_native \
  web/python/examples/ordinary_affine_play.py

This builds the native extension from source. It does not use a browser. Native Python setup and current limits ↗

Native Rust No Python dependency

Clone the repository and run a native example with its pinned Rust toolchain:

git clone https://github.com/yongkyuns/noon.git
cd noon
cargo run -p noon-native --example ordinary_affine_play

Browse Rust examples ↗ · Rust authoring reference ↗

About the project

An experiment,
still taking shape.

Where it started

Noon began years ago as a minimal working prototype. It was recently redesigned with AI agents, which now contribute much of the development. It is an ongoing experiment, not a finished product.

Its relationship to Manim

Noon follows much of Manim Community Edition’s authoring semantics and visual behavior for supported features. It is not a drop-in implementation of every Manim API. Compatibility is useful, but it is not a strict long-term constraint; new features may take Noon in different directions.

What to expect today

Python works in the browser and natively; Rust has native and WebAssembly paths. Feature coverage and playback capabilities differ between hosts. Some callback-driven or interactive scenes have replay restrictions. Start with a runnable example, and consult the reference before depending on a particular feature.

Implementation reference ↗ · Architecture ↗ · Issues ↗