Download Latest Version Manim v0.21.0 source code.zip (7.6 MB)
Email in envelope

Get an email when there's a new version of Manim

Home / v0.21.0
Name Modified Size InfoDownloads / Week
Parent folder
manim-0.21.0.tar.gz 2026-08-10 580.4 kB
Manim v0.21.0 source code.tar.gz 2026-08-10 6.9 MB
Manim v0.21.0 source code.zip 2026-08-10 7.6 MB
README.md 2026-08-10 13.1 kB
Totals: 4 Items   15.0 MB 13

See our rendered changelog.

What's Changed

Breaking Changes ๐Ÿšจ

Code no longer honors foreground color overrides passed through paragraph_config={"color": ...} or Code.default_paragraph_config["color"]; syntax and line-number colors now come from the selected Pygments formatter_style. To customize them, pass a custom Pygments Style subclass through formatter_style and configure its token styles and line_number_color. Background colors can still be overridden with background_config={"fill_color": ...}; otherwise, the selected Pygments style provides the background. See the note in the documentation of Code for an explicit example.

Cairo path construction now uses vectorized subpath splitting, and pixel-array handling avoids redundant copies while producing pixel-identical output. This changes Camera.convert_pixel_array(): the convert_from_floats argument has been removed, and the method now always converts floats to the camera's pixel format. Omit the argument if it was previously True; use np.array(pixel_array) instead if relying on the old default copying behavior.

Highlights ๐ŸŒŸ

The new Typst and TypstMath mobjects compile Typst markup and mathematical expressions directly to SVG without requiring a TeX installation. They support label-based subgroup selection, {{ ... }} expression grouping, and integration with existing label APIs. Install the optional dependency with pip install "manim[typst]".

NumPy arrays in scene cache keys are now represented by deterministic hashes of their complete logical contents instead of sampled JSON data. This prevents stale cache hits when visible image data changes and reduces hashing CPU time by roughly 94โ€“98% in representative benchmarks.

The new max_inflight_encoders configuration option allows partial movie encoding to overlap with rendering while bounding the number of encoder workers. Try it with manim render --max-inflight-encoders 4 --encoder-queue-size 8 scene.py Scene; --encoder-queue-size limits the pending frame buffers held by each encoder. The default of one in-flight encoder preserves serial behavior; higher values reduced an encoding-heavy benchmark by 56% and larger real-world renders by roughly 8โ€“11%.

New Features โœจ

Enhancements ๐Ÿš€

Bug Fixes ๐Ÿ›

Documentation ๐Ÿ“š

Testing ๐Ÿงช

Infrastructure & Build ๐Ÿ”จ

Code Quality & Refactoring ๐Ÿงน

Type Hints ๐Ÿ“

Other Changes

New Contributors

Full Changelog: Compare view

Source: README.md, updated 2026-08-10