# ManimGL: the pip package is manimgl, the branch moved in 2026, and the newest tag is from 2024

> 3b1b/manim is the original animation engine behind the 3Blue1Brown videos, now maintained separately from the Manim Community edition forked off it in 2020. Its README warns twice about the package name, its GitHub description still says Python 3.9 while the text requires 3.10, and the newest release tag predates the last push by twenty months.

**3b1b/manim** — Animation engine for explanatory math videos. Create a conda environment using conda create -n manim python=3.9.

- Repository: https://github.com/3b1b/manim
- Stars: 94,318 · Forks: 7,742
- Language: Python
- License: MIT
- Published: 2026-08-08 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/3b1b-manim

## The pip name is manimgl, and the README warns about it twice

This repository began as a personal project by the author of 3Blue1Brown, for animating those videos. In 2020 a group of developers forked it into what is now the community edition at ManimCommunity/manim, with a stated goal of being more stable, better tested, and quicker to respond to community contributions. That fork owns the plain name, and this repository does not.

So the install is not the obvious one. A note in the README asks you to pay attention to the name of the installed package, and states that this repository is ManimGL of 3b1b, that the package name is manimgl instead of manim or manimlib, and to use pip install manimgl.

```bash
pip install manimgl
```

Consequence for the reader: a tutorial that says pip install manim installs a different codebase with a different import path and a different CLI. Deciding which fork you want before you install is the whole of the migration work, and the README makes that decision the first thing it asks of you.

## The GitHub description says Python 3.9 and the README requires 3.10

The repository description, visible on the GitHub page rather than in the README, tells you to create a conda environment using conda create -n manim python=3.9. The README says Manim runs on Python 3.10 or higher, and the Anaconda section of that same README gives the command as conda create -n manim python=3.10.

```bash
conda create -n manim python=3.10
conda activate manim
```

Consequence for the reader: the two numbers disagree by one minor version, and the lower one is the one a search result or a copied description is most likely to hand you. An environment built on 3.9 follows the summary on the repository page and misses the floor stated in the text, and you find out at install time rather than at read time.

The version boundary is not only about the interpreter. requirements.txt pins typing-extensions for python_version < 3.11 and audioop-lts for python_version >= 3.13, which means the dependency set is different at each end of the range the README allows.

## Three system dependencies, and on macOS an ARM machine needs Cairo

Before any Python package matters, three things have to exist on the machine. FFmpeg for the media, OpenGL for the window, and LaTeX if you want LaTeX rendering, which the README marks optional. Linux adds Pango along with its development headers, and the Ubuntu path installs libpango1.0-dev directly.

macOS gets its own two-step, and the second step is the one that catches people out:

```bash
brew install ffmpeg mactex
```

```bash
arch -arm64 brew install pkg-config cairo
```

The README notes that the full MacTeX bundle is around 6GB and points at BasicTeX as the lighter alternative, to which you add packages as you need them. Consequence for the reader: the cost of a first render is measured in gigabytes, and on an ARM Mac a missing Cairo is a failure that arrives after the Python install succeeds, when the window tries to open.

## manimgl and manim-render are two doors into the same renderer

After an editable install, the README offers two commands for the same example scene:

```bash
manimgl example_scenes.py OpeningManimExample
manim-render example_scenes.py OpeningManimExample
```

It also tells you what to expect, which is a window playing a simple scene. From there the CLI flags do the rest of the work, and each one is a specific behaviour rather than a general option. -w writes the scene to a file, -o writes it and opens the result, -f makes the playback window fullscreen. -s skips to the end and shows the final frame, and -so saves that final frame to an image and shows it. -n takes a number and skips ahead to the nth animation of a scene.

Consequence for the reader: the iteration loop is not a flag you configure, it is a position you jump to. Debugging a late animation means running the scene up to that point with -n, which is cheap on a short scene and a re-render of everything on a long one, since the README describes no partial caching of earlier animations.

## custom_config.yml is looked up in the directory you run ManimGL from

Configuration lives in a YAML file called custom_config.yml, and the lookup rule is the part worth knowing. You can edit the copy in the repository, or you can add a file of the same name to whatever directory you are running ManimGL from. The README points at the 3b1b/videos repository as an example of one.

Inside that file you set where videos are written, where ManimGL looks for the image files and sounds it reads, and the defaults for style and video quality.

Consequence for the reader: two people on the same commit produce different renders. A scene rendered from a directory holding a custom_config.yml picks up its output path, its asset directories, and its quality settings, while the same scene rendered from a directory without one falls back to the repository defaults. The configuration is per working directory rather than per project, so a CI job that checks out clean gets different output from your laptop unless the file is committed alongside the scenes.

## requirements.txt splits on the Python version, and setup.py is two lines

The dependency list is thirty entries long and includes the graphics stack directly: rendercanvas, wgpu, glfw, av, pydub, skia-pathops, trimesh, isosurfaces, colour, and fontTools alongside numpy, scipy, sympy, and matplotlib. Three entries carry lower bounds, manimpango at 0.6.0, svgelements at 1.8.1, and ipython at 8.18.0.

Two entries exist only because the standard library moved. audioop-lts is required for python_version >= 3.13, and typing-extensions for python_version < 3.11. Consequence for the reader: the install is not one set of wheels, it is a per-interpreter resolution, and a Python that sits between the two markers gets neither package.

The build files are thin. pyproject.toml carries only a build-system table requiring setuptools and wheel, and setup.py is import setuptools followed by setuptools.setup(). All of the package metadata therefore lives in setup.cfg, which means a tool that reads pyproject.toml for the project name, version, or entry points finds an almost empty file.

## The newest tag is from December 2024 and the branch was pushed in September 2026

Three releases are listed: v1.7.0, tagged ManimGL 1.7.0, on 2024-10-16, then v1.7.1 on 2024-10-23, and v1.7.2 on 2024-12-13. The last push to the default branch, master, was on 2026-09-09. So the branch has moved for about twenty months past the newest tag, and the release history is not a record of recent activity.

The consequence shows up in the example code. The README points at the 3b1b/videos repository for the full source of the 3Blue1Brown videos, and warns that code from older videos may not be compatible with the most recent version of manim. It points the other way too, telling bundle readers to visit this repository for the latest updates.

Consequence for the reader: a snippet copied from an old video is a snippet written against v1.7.x or earlier, and a clone of master is a different codebase again. There is no changelog in the repository to tell you what changed between the two, and the documentation link in the README is marked as being in progress.

## Conclusion

Use this repository if you want the engine the 3Blue1Brown videos were actually written against, and you are willing to install FFmpeg, OpenGL, and Pango development headers yourself. Do not pick it because the word manim sounds right: the pip name is manimgl, the community edition is a separate project, and the newest release tag is v1.7.2 from 2024-12-13 while the branch itself was pushed on 2026-09-09. Before you start, check three things: which fork your tutorial assumes, whether the example code you copied runs on the version you installed, and where your custom_config.yml lives, because ManimGL looks for it in the directory you run it from.

## FAQ

### What is a Manim?

Manim is an engine for precise programmatic animations, designed for creating explanatory math videos. This repository is ManimGL, the original engine, and it is published on PyPI under the package name manimgl rather than manim.

### Did 3b1b make Manim?

This repository began as a personal project by the author of 3Blue1Brown, for the purpose of animating those videos, with the video-specific code kept in a separate 3b1b/videos repository. In 2020 a group of developers forked it into the community edition at ManimCommunity/manim.

### How do I install Manim?

Run pip install manimgl, which is the package name for this repository, not manim or manimlib. ManimGL runs on Python 3.10 or higher, and needs FFmpeg and OpenGL on the system, with Pango and its development headers on Linux.

### How do I install Manim on Windows?

The README gives three steps for Windows: install FFmpeg, install a LaTeX distribution with MiKTeX recommended, then clone the repository and run pip install -e . in it. The MacTeX and BasicTeX instructions in the README are for macOS, not Windows.

### Is Manim difficult to use?

The README states that Manim runs on Python 3.10 or higher and that you can try it with manimgl example_scenes.py OpeningManimExample, which should pop up a window playing a simple scene. It also warns that code from older 3Blue1Brown videos may not be compatible with the most recent version of manim, which is the main source of friction when you copy an example.

## Sources

- [Official README](https://github.com/3b1b/manim#readme)
- [Project repository](https://github.com/3b1b/manim)
- [Release notes](https://github.com/3b1b/manim/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/3b1b-manim
