Skip to content

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 ​

StateCountMeaning
Directly supported381Same name and syntax as CE; runs as-is
Aliased13Write the CE name; the execution layer translates it (set_stroke, move_camera, m[i], etc.)
Not supported43Fails 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), the CoordinateSystem abstract base, 13 logo / grey palette constants, plus less common alternatives like TrueDot, DotCloud, Point and ImageMobjectFromCamera.
  • What regular code may hit: the always_redraw family (9 functions), 8 methods, 1 animation, 1 rate function — every one has an equivalent (mostly composing add_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 the Graph network 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_updater per-frame updates (the always_redraw family of combinators excepted, see below).
  • 3D: ThreeDScene / SpecialThreeDScene with camera operations (set_camera_orientation / move_camera / ambient camera rotation are aliases), plus the parametric surface Surface.
  • 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) ​

NameAlternative / note
CoordinateSystemAbstract base class — use Axes / NumberPlane directly
DefaultSectionTypeVideo sectioning — no file output in the browser
DotCloudBuild scatter points as VGroup(*[Dot(p) for p in points])
ImageMobjectFromCameraThe runtime error suggests an equivalent
OpenGLPGroup / OpenGLPMPoint / OpenGLPMobjectOpenGL-renderer specific; not applicable
PointThe runtime error suggests an equivalent
SceneFileWriterVideo file writing — no file output in the browser
SectionVideo sectioning — no file output in the browser
TrueDotUse 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:

NameWhy it does not work
LinearBase / LogBaseIn 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 / TypstConstruction 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.mjs running real Chromium), not from the probe table.

Functions (9) ​

NameAlternative / note
always / always_redrawRecompose with add_updater()
always_rotateAttach rotate via add_updater()
always_shiftAttach shift via add_updater()
f_always / cycle_animation / override_animation / turn_animation_into_updater / assert_is_mobject_methodCompose it yourself with add_updater()

Methods (8) ​

NameAlternative / note
surroundTake the bounding box with get_bounding_box() and build a Rectangle
set_z_indexUse set_z(value)
put_start_and_endUse put_start_and_end_on(a, b), or set_start(a) + set_end(b)
plot_parametric_curvePlot pre-sampled points with plot()
plot_derivative_graphPlot the hand-derived function with plot()
get_part_by_texIndex MathTex parts with m[i] (by index only, not by tex)
bring_to_front / bring_to_backUse set_z(larger) to raise / set_z(smaller) to lower

Color constants (13) ​

NameAlternative / 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_YELLOWNot in the built-in palette — use a hex string (e.g. '#58c4dd')

Rate functions (1) ​

NameAlternative / note
squish_rate_funcUse smooth / linear / there_and_back

Animations (1) ​

NameAlternative / note
MaintainPositionRelativeToRe-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.

PurposeCountNames
Charts and statistics14Histogram BoxPlot ViolinPlot ScatterPlot StackedBarChart AreaChart StepChart CalendarHeatmap CandlestickChart WaterfallChart PieChart DonutChart RadarChart GanttChart
Maths visualisation2HeatMap ContourPlot
Biology3DNAHelix Cell AminoAcidChain
Chemistry1MoleculeMobject
Machine learning5NeuralNetwork FeedForwardLayer ConvolutionalLayer PoolingLayer ImageLayer
Probability1DiceFace
Network and flow1SankeyDiagram
3D5Box3D Vector3D ParametricSurface Surface3D ImplicitSurface
Fractals2MandelbrotSet NewtonFractal

The only difference from "original" usage is the import line:

python
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 import fails.
  • 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 import line. 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 / LogBase are exactly the case that slips through (see "Four that resolve but do not work" above), and so are Text3D / TextOnPath — which is why neither of those two names is in EXTRAS: the evidence there is a screenshot, not the probe.

MIT licensed · Manim 与 Pyodide 各依其自身许可(见「安装」)