Support Surface
This page lists which Manim constructs are supported and which are not — the concrete boundary of the "commonly used subset". Check here before writing code. The data comes from measurement, not impression: all 437 public names of Manim CE 0.22.0 were probed one by one against the real runtime (generated by the repo's probe script; re-probed after dependency upgrades).
Overview
| State | Count | Meaning |
|---|---|---|
| Directly supported | 381 | Same name and syntax as CE; runs as-is |
| Aliased | 13 | Write the CE name; the execution layer translates it (set_stroke, move_camera, m[i], etc.) |
| Not supported | 43 | Fails immediately, most with an alternative (below) |
In total 394 / 437 usable, about 90%.
The 43 missing items are distributed as follows:
- Mostly irrelevant to everyday code: the OpenGL-renderer family (3), the three video-output entries (
SceneFileWriter/Section/DefaultSectionType— a browser produces no files anyway), theCoordinateSystemabstract base, 13 logo / grey palette constants, plus less common alternatives likeTrueDot,DotCloud,PointandImageMobjectFromCamera. - What regular code may hit: the
always_redrawfamily (9 functions), 8 methods, 1 animation, 1 rate function — every one has an equivalent (mostly composingadd_updater()), given right in the error message.
Conclusion: the main scenarios — basic shapes, coordinate systems and plots, text and formulas, animations, updaters, 3D — are fully covered. All 273 corpus entries in 20 groups run (34 of them on the engine-extension lane, see below); rendered results are in the gallery.
Supported constructs
- Objects and shapes: basic shapes (
Circle/Arc/Angle/ArcPolygon/ArcPolygonFromArcs), grouping (VGroup/CurvesAsSubmobjects), tables (Table/IntegerTable), parametric curves (ParametricFunction/FunctionGraph). - Coordinate systems and plots:
Axes/NumberPlane/NumberLine/plot()/BarChart, and theGraphnetwork diagram (custom ticks: see "Four that resolve but do not work" below). - Text and formulas:
Text/Tex/MathTex/Label(formula rendering needs the style asset configured — see Installation). - Animations:
play()with the full set of CE animation verbs, including.animate. - Live updates:
add_updaterper-frame updates (thealways_redrawfamily of combinators excepted, see below). - 3D:
ThreeDScene/SpecialThreeDScenewith camera operations (set_camera_orientation/move_camera/ ambient camera rotation are aliases), plus the parametric surfaceSurface. - Colors and rate functions: the common color constants and rate functions (a few exceptions below).
Unsupported constructs (43 items)
Hitting anything below fails on the spot — the runtime error carries the same "alternative / note" text as this table, so you can fix the code right away.
Classes (11)
| Name | Alternative / note |
|---|---|
CoordinateSystem | Abstract base class — use Axes / NumberPlane directly |
DefaultSectionType | Video sectioning — no file output in the browser |
DotCloud | Build scatter points as VGroup(*[Dot(p) for p in points]) |
ImageMobjectFromCamera | The runtime error suggests an equivalent |
OpenGLPGroup / OpenGLPMPoint / OpenGLPMobject | OpenGL-renderer specific; not applicable |
Point | The runtime error suggests an equivalent |
SceneFileWriter | Video file writing — no file output in the browser |
Section | Video sectioning — no file output in the browser |
TrueDot | Use Dot |
This table shrinks as the probe improves: ArcPolygonFromArcs, CurvesAsSubmobjects, Label, SpecialThreeDScene and Surface used to be listed here and now have a screenshot from a real browser proving they draw (Surface takes a lambda u, v: … parametric equation).
Four that resolve but do not work (not in the table above, not supported either)
The table above covers names that are absent — write one and it fails on the spot with an alternative. These four are the opposite: the name exists and the probe marks it ok, yet using it is useless. They are not counted in the "43 unsupported" (that column counts missing names), but they are just as unusable:
| Name | Why it does not work |
|---|---|
LinearBase / LogBase | In CE these are axis tick configuration pieces, not mobjects — self.add(LinearBase(base=10, x_range=[1, 1000])) blows up in a real canvas with _setSceneContext is not a function. To customise ticks, pass one to the axis: Axes(x_axis_config={"scaling": LogBase(base=10)}) |
MathTypst / Typst | Construction does not throw, but the Typst renderer asset is not shipped — rendering leaves one Typst rendering error line in the console and nothing on screen. For formulas always use Tex / MathTex |
This section exists because the probe's construction check only verifies "it builds", not "it draws" — these four are exactly the layer it cannot see. Their verdict comes from a screenshot (
scripts/shot-corpus.mjsrunning real Chromium), not from the probe table.
Functions (9)
| Name | Alternative / note |
|---|---|
always / always_redraw | Recompose with add_updater() |
always_rotate | Attach rotate via add_updater() |
always_shift | Attach shift via add_updater() |
f_always / cycle_animation / override_animation / turn_animation_into_updater / assert_is_mobject_method | Compose it yourself with add_updater() |
Methods (8)
| Name | Alternative / note |
|---|---|
surround | Take the bounding box with get_bounding_box() and build a Rectangle |
set_z_index | Use set_z(value) |
put_start_and_end | Use put_start_and_end_on(a, b), or set_start(a) + set_end(b) |
plot_parametric_curve | Plot pre-sampled points with plot() |
plot_derivative_graph | Plot the hand-derived function with plot() |
get_part_by_tex | Index MathTex parts with m[i] (by index only, not by tex) |
bring_to_front / bring_to_back | Use set_z(larger) to raise / set_z(smaller) to lower |
Color constants (13)
| Name | Alternative / note |
|---|---|
DARK_GREY / DARKER_GREY / LIGHT_GREY / LIGHTER_GREY / GRAY_BROWN / LOGO_BLACK / LOGO_BLUE / LOGO_GREEN / LOGO_RED / LOGO_WHITE / PURE_CYAN / PURE_MAGENTA / PURE_YELLOW | Not in the built-in palette — use a hex string (e.g. '#58c4dd') |
Rate functions (1)
| Name | Alternative / note |
|---|---|
squish_rate_func | Use smooth / linear / there_and_back |
Animations (1)
| Name | Alternative / note |
|---|---|
MaintainPositionRelativeTo | Re-align the relative position each frame with add_updater() |
Engine extensions (manim_live_extra) — a separate lane
Everything above answers "what does Manim CE have, and how far do we support it". This section is the other direction: shapes that Manim CE does not have and this engine adds, 34 of them. They are not part of the support surface and should not be memorised as original Manim — do not reach for them by default; import them only when a topic needs one.
| Purpose | Count | Names |
|---|---|---|
| Charts and statistics | 14 | Histogram BoxPlot ViolinPlot ScatterPlot StackedBarChart AreaChart StepChart CalendarHeatmap CandlestickChart WaterfallChart PieChart DonutChart RadarChart GanttChart |
| Maths visualisation | 2 | HeatMap ContourPlot |
| Biology | 3 | DNAHelix Cell AminoAcidChain |
| Chemistry | 1 | MoleculeMobject |
| Machine learning | 5 | NeuralNetwork FeedForwardLayer ConvolutionalLayer PoolingLayer ImageLayer |
| Probability | 1 | DiceFace |
| Network and flow | 1 | SankeyDiagram |
| 3D | 5 | Box3D Vector3D ParametricSurface Surface3D ImplicitSurface |
| Fractals | 2 | MandelbrotSet NewtonFractal |
The only difference from "original" usage is the import line:
from manim import *
from manim_live_extra import RadarChart # import only what you use, never `import *`
chart = RadarChart(data=[3, 5, 4, 2, 5], categories=['speed', 'accuracy', 'cost', 'upkeep', 'reach'])
self.play(Create(chart))Three hard boundaries, best understood up front:
- Only this engine knows them. In any other Manim environment — including the local manim CLI — these names do not exist and the
importfails. - A local CLI export is refused by the export gate. The export path accepts "pure CE" source only, and the test is whether the source contains that
from manim_live_extra importline. This is deliberate: better to refuse outright than to emit an artifact that only reveals a missing shape halfway through. - There is no auto-injection. Writing the extended name right after
from manim import *fails on the spot and tells you which import it wants — but the engine will not add that line for you. Same reason as above: the gate and the source projection both rely on the source being self-contained, so inserting a line would erase the very evidence they judge by.
All 34 are classes and all take keyword arguments. For signatures, screenshots and full source of every entry see the engine-extensions page in the gallery; for usage discipline see the "engine extensions" section of the blackboard / card skill docs.
Not collected (asked for, deliberately not done): function entries (prebuilt molecules, graph factories), stateful simulations (PhysicsWorld / ParticleSystem), external-data VideoMobject, maps and globes, and Text3D / TextOnPath (the font asset is not shipped, so they screenshot blank).
Data source
scripts/probe-api.mjs probes every public Manim CE 0.22.0 API against the runtime in a headless browser: usable entries are recorded as ok, renamed ones as alias, missing ones as missing with an alternative attached. After a dependency upgrade the probe is re-run and this page regenerated — the list always matches runtime behavior instead of being maintained by hand.
The same probe runs a second table: the EXTRAS list at the top of the script (the 34 names of the engine extensions) is constructed one by one, producing src/py/extras-map.generated.ts. That list is the master switch for the whole lane — empty it and the manim_live_extra module, the extension section in the skill docs and the extension group in the examples chapter all disappear together; there is nowhere else to delete. After emptying or changing it, re-run node scripts/gen-examples-docs.mjs and scripts/gen-skill.mjs on both sides to refresh the derived docs.
The probe's construction check only verifies "it builds", not "it draws".
MathTypst/Typst/LinearBase/LogBaseare exactly the case that slips through (see "Four that resolve but do not work" above), and so areText3D/TextOnPath— which is why neither of those two names is inEXTRAS: the evidence there is a screenshot, not the probe.