Library / SDK
panda3d/panda3d avatar
panda3d/panda3d

Panda3D: A Python-First Game Engine You Install with pip

Powerful, mature open-source cross-platform game engine for Python and C++, developed by Disney and CMU

5,232 stars891 forksC++NOASSERTION

At a glance

What is it?
Panda3D is a cross-platform 3D engine for Python and C++ under a Modified BSD license. Its pip install path is short; the build path is not, and that split shapes who should pick it.
Who is it for?
Adopt Panda3D when your team already writes Python, you want a permissively licensed 3D engine, and you are willing to work through the official manual and samples rather than expecting a drag-and-drop editor. Do not adopt it if you need a visual scene editor as your primary workflow, or if you cannot accept that a full source build with Eigen support is measured in hours on MSVC.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 64 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Panda3D solves, and who it is actually for

Most 3D engines assume you will work primarily inside an editor: place objects, attach scripts, export a project. Panda3D inverts that. The README describes it as "a framework for 3D rendering and game development for Python and C++ programs," and the repository layout backs that up. The top level holds panda/, direct/, pandatool/ and dtool/ directories, which is a library layout, not an editor layout. There is no editor binary in the top-level entries.

That makes the target audience fairly narrow and fairly specific. It suits programmers who want to construct scenes, load models and drive behavior from code, and who are already comfortable in Python. It also suits C++ teams that want the same engine with a native API. Disney and CMU are credited with developing it, and the license is the Modified BSD License per the README, which is why the project can say it is "free for any purpose, including commercial ventures."

The wrong reader is the solo developer who wants to assemble a level visually and only drop into code for special cases. Panda3D gives you a scene graph and a rendering pipeline, not a level editor, and the README points to the gallery, the feature list and the documentation rather than to an authoring tool. If your mental model of a game engine starts with a viewport and an inspector panel, this is a different kind of product.

The scene graph and the panda3d Python module

The core abstraction visible from the repository is the scene graph. Objects live in a hierarchy, and the engine walks that hierarchy to render. The samples confirm the shape of the API: samples/procedural-cube/, samples/culling/, samples/render-to-texture/ and samples/particles/ each exercise a different part of the pipeline, and they are organized as runnable programs rather than as data files for an editor.

The packaging matters as much as the architecture. The pip distribution is named panda3d, so the import name and the install name match. That is a small thing that saves real time, because you do not have to guess which module to import after installing.

Panda3D also ships a set of tools. The pandatool/ directory and the direct/ directory sit alongside the engine core, and the README's SDK download page is described as the full SDK "with all tools." The distinction between the pip package and the full SDK is worth noting before you commit: the README presents the SDK download and the pip command as two separate routes, and it does not claim they are identical in contents. If your workflow depends on the bundled tools, check which route gives you them.

Installing Panda3D with pip and running a first sample

The README gives the shortest path directly. If you are familiar with installing Python packages, the documented command is a single pip install:

bash
pip install panda3d

After that completes, the panda3d module is available to your Python interpreter. The README does not describe any post-install configuration step for this route.

If you want a development build instead of the released SDK, the README documents a pre-release install against the project's own package archive:

bash
pip install --pre --extra-index-url https://archive.panda3d.org/ panda3d

The README adds a caveat worth repeating: if this command fails, make sure your version of pip is up to date. That is the documented failure mode for this route.

For a first real use, the repository ships runnable samples rather than a single canonical hello-world. The samples directory includes asteroids, ball-in-maze, boxing-robots, bullet-physics, bump-mapping, carousel, cartoon-shader, chessboard, culling, disco-lights, distortion, fireflies, fractal-plants, gamepad, glow-filter, infinite-tunnel, looking-and-gripping, media-player, motion-trails, mouse-modes, music-box, networking, particles, procedural-cube and render-to-texture. Picking one that matches your goal is more useful than starting from a blank file. If you want physics, bullet-physics is the relevant sample; if you want shader work, cartoon-shader or glow-filter. The README does not document a command to launch these samples, so treat the sample directory itself as the entry point and read its contents before running anything.

Building from source is a different commitment

The pip route hides a build system that is genuinely involved. The README documents makepanda as the build script across platforms, and the top-level makepanda/ directory is where it lives.

On Windows, the documented command is:

bash
makepanda\makepanda.bat --everything --installer --msvc-version=14.3 --windows-sdk=10 --no-eigen --threads=2

The README explains the version mapping: 2022 is 14.3, 2019 is 14.2, 2017 is 14.1, and 2015 is 14. It also notes that you can drop --no-eigen to build with Eigen support for better runtime performance, but that this makes the build take hours because Eigen is heavily template-based and MSVC handles it poorly. That is a documented trade-off, not a rumor.

On Linux, the README's example is:

bash
python3 makepanda/makepanda.py --everything --installer --no-egl --no-gles --no-gles2 --no-opencv

The README warns that you will probably see warnings about missing dependency packages, and that you should decide which ones you want and install the corresponding development packages. For Ubuntu it lists a long apt-get line covering build-essential, pkg-config, fakeroot, python3-dev, libpng-dev, libjpeg-dev, libtiff-dev, zlib1g-dev, libssl-dev, libx11-dev, libgl1-mesa-dev, libxrandr-dev, libxxf86dga-dev, libxcursor-dev, bison, flex, libfreetype6-dev, libvorbis-dev, libeigen3-dev, libopenal-dev, libode-dev, libbullet-dev, nvidia-cg-toolkit, libgtk-3-dev, libassimp-dev and libopenexr-dev. Once built, the README shows installing the produced package with dpkg:

bash
sudo dpkg -i panda3d*.deb

On macOS, the README requires a precompiled thirdparty package downloaded from the project site, placed inside the source directory, after which the build command is:

bash
python makepanda/makepanda.py --everything --installer

If that succeeds, makepanda generates a .dmg containing the installer. The README also notes that on distributions without .deb or .rpm support you may need installpanda.py and possibly ldconfig, and that adding --wheel produces a .whl installable with pip. That last option is the escape hatch worth remembering.

Where Panda3D is the wrong tool

The clearest limitation is the one already implied: there is no editor in the repository layout. If your team's workflow depends on non-programmers placing assets, Panda3D pushes that work back into code or into external tooling you supply yourself. The README does not describe an authoring environment, so you should not assume one exists.

A second limitation is the build. The README's own note about Eigen is the honest version of this: enabling it improves runtime performance and costs hours of compile time on MSVC. Teams that need custom builds, unusual platform targets or specific optional dependencies will spend real time in makepanda, and the README's warning that you will see missing-dependency warnings means the build is not self-configuring.

A third issue is documentation shape. The README points outward to the manual, the gallery, the feature list and a Discourse forum rather than embedding usage guidance. That is normal for a long-lived project, but it means the README alone will not teach you the engine, and the samples are the practical starting point. If you need a single document that takes you from zero to shipped game, this is not that document, and the README does not claim to be.

Finally, the license field in the repository metadata reads NOASSERTION, while the README states the project is under the Modified BSD License and links to a license page. That mismatch is a metadata artifact, not a change in terms, but if license clarity is a procurement requirement, read the LICENSE file rather than the metadata field.

Panda3D compared with Godot for Python teams

The comparison people actually search for is Panda3D versus Godot, and the difference is structural rather than a matter of feature lists.

Godot is built around its editor. You open a project, arrange a scene tree in a graphical interface, and attach scripts to nodes. Panda3D has no equivalent editor in its repository. You construct the scene graph from Python or C++ and run a program. That single difference decides most adoptions: if your team wants visual level assembly, Godot's model is the one that matches the workflow, and Panda3D will feel like working with one hand behind your back.

The trade runs the other way for Python-native codebases. Panda3D's pip distribution means the engine is a Python package you can list as a dependency, and the README's install instructions are a pip command rather than a download-and-install application. For teams embedding 3D rendering into existing Python services, tools or simulations, that packaging is the deciding advantage. It is also worth noting the engine's C++ core: the primary language in the repository is C++, so Python is a binding over a native engine rather than the engine itself, which is why a source build is a C++ build.

Neither project is a superset of the other. Choose on whether your primary authoring surface is an editor or a Python program.

Maintenance, upgrade cost and licence implications

The last push to the repository was on 2026-07-28, and the repository is not archived. The most recent listed release is v1.10.16 (SDK 1.10.16) from 2025-12-25, preceded by v1.10.15 in 2024-11-08 and v1.10.14 in 2024-01-10. The release cadence visible in that list is roughly annual for the 1.10 line, so plan upgrades around that rhythm rather than expecting frequent drops.

Upgrade cost depends on which route you took. If you installed with pip, an upgrade is a pip install away, and the README's pre-release command shows how to pull development builds from the project's archive if you want to test ahead of a release. If you built from source, every upgrade means re-running makepanda against the current thirdparty packages, and on Windows that means the msvc-version and windows-sdk flags stay in your notes. The README's Windows build also offers a --no-eigen default, so a team that opted into Eigen for performance pays the compile-time cost again on each rebuild.

The licence is the Modified BSD License per the README, which is why the project can describe itself as free for commercial ventures. That is a permissive licence with few obligations, but the repository metadata's NOASSERTION value means automated licence scanners may not classify it for you. If your organization gates dependencies on scanner output, point the review at the LICENSE file. This is a description of what the project states, not legal advice.

Editorial conclusion

Adopt Panda3D when your team already writes Python, you want a permissively licensed 3D engine, and you are willing to work through the official manual and samples rather than expecting a drag-and-drop editor. Do not adopt it if you need a visual scene editor as your primary workflow, or if you cannot accept that a full source build with Eigen support is measured in hours on MSVC. Before committing, verify two things yourself: that pip install panda3d resolves on your target Python version, and that the sample you plan to learn from actually runs on your machine. The samples directory is the fastest way to find out whether the engine's model fits your project.

Frequently asked questions

What is Panda3D used for?

The README describes it as a game engine and a framework for 3D rendering and game development for Python and C++ programs. The samples directory shows the range, from physics and shaders to particles, networking and render-to-texture.

Is Panda3D free and open source?

Yes. The README states Panda3D is open-source and free for any purpose, including commercial ventures, under the Modified BSD License.

How do I install Panda3D using pip?

The README gives the command pip install panda3d. For a development build it documents pip install --pre --extra-index-url https://archive.panda3d.org/ panda3d, and notes that if that fails you should update pip.

Is Panda3D a Python engine or a C++ engine?

Both. The README calls it a framework for Python and C++ programs, and the repository's primary language is C++, with Python bindings exposed through the panda3d package.

Is Panda3D hard to learn?

The README does not make a difficulty claim. It points to the documentation resources, the gallery, the feature list and a community forum for help, and the repository ships working samples such as asteroids and ball-in-maze as starting points.

Official sources

  1. Issues
  2. panda3d/panda3d on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/panda3d-panda3d.svg)](https://hysenlabs.com/projects/panda3d-panda3d)