Source/File Structure

Blender source code directories explained

This page lists the directories in Blender's code and their use.

Note: this documents paths can be validated against Blender's source using: Source Tree Validator.

Directory Layout

Support Files

DIRECTORY / FILE USE
/doc/ Document generation (doxygen and sphinx), licenses, man page and file format info.

Note that documentation may be comments in the code, or on our developer wiki. So this isn't the best place to look for introductory materials.

/release/ Contains data-files included with Blender releases, such as icons, fonts and platform specific files.

This also includes all Python scripts: add-ons, user-interface layout, utility modules. Even though in a sense this _is_ source-code, its simply copied into a directory for releases.

/release/bin/ Contains the ".blender" folder, with fonts and such files. These are copied in place the installation dir.
/release/darwin Files for macOS installation.
/release/datafiles Fonts, icons, mat-cap images and other files included in Blender builds.
/release/freedesktop Desktop and icon files for Linux/X11 desktop.
/release/scripts Python scripts that will be placed in Blender's installation directories
/release/text Readme and license files and text included with Blender installations.
/release/windows Files for MS-Windows installation.
/tests/ Files for testing.
/tests/gtests/ C & C++ tests using the gtest framework.

See: Blender's gtest docs.

/tests/python/ Various tests for Blender's Python API, as well as other tests written in Python.

See: Blender's gtest docs.

/source/tools/ Tools and utilities to assist with development (not required for building).

See: Blender's Developer Tools docs.

Build System

DIRECTORY / FILE USE
/build_files/ Files needed when building the source
/build_files/cmake/ CMake build-system modules.
/build_files/build_environment/ Scripts for setting up a build environment (currently only used for Linux).
/build_files/buildbot/ Configuration for automated builds.

Used for automated builds on builder.blender.org

See: home page.

/build_files/utils/ Utility scripts to help with releases & building.
/build_files/package_spec/ Specifications for Blender packages (currently supporting various popular Linux package formats).

Note: these aren't currently used for official releases which use a portable archive, building package files can be useful still.

/CMakeLists.txt CMake build-system file.

See: home page.

/GNUmakefile Make-file convenience wrapper for the CMake build-system, to quickly setup CMake builds without manual (configure, build, install) steps.

Used on Linux/BSD/MacOS X.
There are various useful targets unrelated to building, see: make help for details.

/make.bat Batch-file convenience wrapper for the CMake build-system, to quickly setup CMake builds without manual (configure, build, install) steps.

Used on MS-Windows.
There are various useful targets unrelated to building, see: make help for details.

Application Code (source/)

DIRECTORY / FILE USE
/source/ Main source code directory for code maintained by Blender developers.
/source/blender/ Source code directory for Blender's application code.
/source/blender/avi/ AVI loading and writing code (Only supporting primitive AVI raw, AVI jpeg and windows codec, not ffmpeg)
/source/blender/blenfont/ Blender's internal font system
/source/blender/blenkernel/ Kernel functions (data structure manipulation, allocation, free. No tools or UI stuff, very low level); kernel functions are shared with the blenderplayer, for loading data
/source/blender/blenlib/ Internal misc libraries: math functions, lists, random, noise, memory pools, file operations (platform agnostic)
/source/blender/blenloader/ Blend file loading and writing as well as in memory undo file system
/source/blender/blentranslation/ Internal support for non-English translations (uses gettext).

Used by the user interface for displaying text labels and tool-tips.

See: Blender's translations docs.

/source/blender/bmesh/ Mesh editing API, with support for n-gons and comprehensive editing operations.

Used in Edit Mode and by modifiers that perform advanced editing operations (such as bevel).

See: BMesh design docs.

/source/blender/collada/ Collada interface between blender and the external collada library
/source/blender/compositor/ TODO.
/source/blender/datatoc/ Utility to convert data files (images, fonts & shaders) into C source code files containing that data.

Used by the build system to convert data into symbols that can be compiled into the executable.

/source/blender/depsgraph/ TODO.
/source/blender/editors/ Graphical editor code, tools, UI ... (most of the interesting code is in there)
/source/blender/editors/animation/ TODO.
/source/blender/editors/armature/ TODO.
/source/blender/editors/curve/ TODO.
/source/blender/editors/datafiles/ TODO.
/source/blender/editors/gpencil/ TODO.
/source/blender/editors/include/ TODO.
/source/blender/editors/interface/ Widget drawing, widget handling, widget layout generation, 2D editor scrolling, interface operators, icon API, theme management.
/source/blender/editors/io/ TODO.
/source/blender/editors/mask/ TODO.
/source/blender/editors/mesh/ TODO.
/source/blender/editors/metaball/ TODO.
/source/blender/editors/object/ TODO.
/source/blender/editors/physics/ TODO.
/source/blender/editors/render/ TODO.
/source/blender/editors/screen/ TODO.
/source/blender/editors/sculpt_paint/ TODO.
/source/blender/editors/sound/ TODO.
/source/blender/editors/space_action/ TODO.
/source/blender/editors/space_api/ TODO.
/source/blender/editors/space_buttons/ TODO.
/source/blender/editors/space_clip/ TODO.
/source/blender/editors/space_console/ TODO.
/source/blender/editors/space_file/ TODO.
/source/blender/editors/space_graph/ TODO.
/source/blender/editors/space_image/ TODO.
/source/blender/editors/space_info/ TODO.
/source/blender/editors/space_nla/ TODO.
/source/blender/editors/space_node/ TODO.
/source/blender/editors/space_outliner/ TODO.
/source/blender/editors/space_script/ TODO.
/source/blender/editors/space_sequencer/ TODO.
/source/blender/editors/space_text/ TODO.
/source/blender/editors/space_userpref/ TODO.
/source/blender/editors/space_view3d/ TODO.
/source/blender/editors/transform/ TODO.
/source/blender/editors/util/ TODO.
/source/blender/editors/uvedit/ TODO.
/source/blender/freestyle/ TODO.
/source/blender/gpu/ GLSL shaders, buffers and other GPU related functions
/source/blender/ikplugin/ Inverse kinematics API, abstracting the itasc and iksolver modules.
Note that while this system supports multiple inverse-kinematics solvers there is no plug-in system exposed from a user perspective.
/source/blender/imbuf/ Image buffer API and functions (loading, writing and manipulating different image formats); seq just has it's own buffer structure, but the loading is still done by imbuf; imbuf also has code for loading textures into openGL for display and all that
/source/blender/makesdna/ DNA structures definition: All data structures that are saved into files are here
/source/blender/makesrna/ RNA definitions and functions. Sits on top of DNA to provide a low level data access and definition API
/source/blender/modifiers/ Mesh modifiers
/source/blender/nodes/ Nodes code: CMP = composite, SHD: material, TEX: texture
/source/blender/physics/ Solvers for hair and cloth physics simulation.
/source/blender/python/ Python API, source files that embed the Python scripting language into Blender, as well as the API's Blender exposes which are written in C.

See: Python API Reference.

/source/blender/python/bmesh/ The Python API for editing mesh data.
/source/blender/python/generic/ The Python API generic functions (font, opengl, noise, ...)
/source/blender/python/intern/ The primary parts of the API (bpy module, wraps Operators and RNA).
/source/blender/python/mathutils/ The Python API 3D math module (access to Euler, Vector, Matrix, Quaternion, Color types).
/source/blender/render/ The Blender Internal render engine.

Used by default for rendering and baking.

/source/blender/windowmanager/ Blender's internal window manager, event system, operators, thread jobs, ...
/source/creator/ Contains the main(...) entry point function for the Blender executable. Handles initialization and command line argument parsing.

Internal Library Code (intern/)

DIRECTORY / FILE USE
/intern/ Abbreviation for internal. This directory contains source-code maintained by Blender developers but kept as isolated modules/libraries.

Some of these modules are C-API's to libraries written in C++, since much of Blender's core is written in C and can't call into C++ code directly.

/intern/atomic/ Low level atomic operations, for thread-safe atomic updates of variables.

See jemalloc's home page for the original source.

/intern/audaspace/ An audio library which abstracts playback across different back ends, as well as handling 3D audio.

Used for audio playback in the sequencer, speaker objects and by the Game Engine.

See: home page.

/intern/clog/ C-Logging library, API (similar to glog).

Use for logging output in Blender's C code.

/intern/cycles/ Cycles rendering engine.
/intern/dualcon/ This library is used to re-create geometry.

Used by the remesh modifier.

/intern/elbeem/ Fluid simulation library.
/intern/ffmpeg/ Library used for video encoding and decoding.

Used for reading and writing many different video formats (movie clip editor, sequencer, render output... etc).

/intern/ghost/ Stands for General Handy Operating System Toolkit.

This library abstracts platform specific operations. So we can avoid using OSX/Win32/X11 API calls in the rest of Blender's code.

It handles window management actions, the OpenGL context and reading events from the mouse and keyboard, it also supports less common input devices such as a tablet or NDOF device.

/intern/glew-mx/ An extension wrangler library for OpenGL, this is used to manage multiple glew implementations.
/intern/guardedalloc/ This Blender primary memory allocator which is used in place of the system allocator. It has facilities for (optionally) guarding against common memory errors. Enabled when running with the --debug command-line argument.

Used throuought nearly all of Blender's own code.

/intern/iksolver/ Inverse kinematics solver, to constraint a chain of bone to a target.

Used by the IK armature constraint.

/intern/itasc/ A library used for the IK constraint solver iTaSC, an alternate solver useful for robotics.

Used by the IK plug-in system.

/intern/libmv/ A motion tracking library.

Used for motion-tracking in the movie-clip editor.

TODO maybe Sergey has better description?

/intern/locale/ Wrapper for gettext translation library, not intended for standalone use.

Used by blentranslation.

/intern/memutil/ Utility library with C++ memory management classes.

Generic cache-limiter and reference-counted implimentations and their C-API's.

/intern/mikktspace/ Utility module for calculating tangents from mesh geometry (triangles and quads) and their UV coordinates.

Used by the DerivedMesh system and Blender Internal Render Engine.

/intern/opencolorio/ A C-API to the OpenColorIO Library (often abbreviated to OCIO).

Used by image loading and saving code to support color-management, as well as rendering.

See home page.

/intern/opensubdiv/ Subdivision surface library.

Used by Blender's subdivision surface modifier.

See: home page.

/intern/rigidbody/ A C-API to the Bullet physics library.

Used by the rigid-body physics system.

/intern/smoke/ Smoke simulation library.
/intern/string/ Defines the STR_String C++ class.

A utility class for basic string manipulation.

Used by GHOST and the Game Engine.

/intern/utfconv/ Utility functions for converting between unicode utf-8 and utf-16 (wchar_t).

Used for file operations on MS-Windows, which require utf-16.

/intern/eigen/ Library written in C used to wrap the C++ Eigen3 library.
/intern/openvdb/ Library used for efficiently store volumetric data.

Used for storing smoke simulation cache.

External Library Code (extern/)

DIRECTORY / FILE USE
/extern/ Abbreviation for external,

This directory contains source-code imported from other projects and not apart of Blender (strictly speaking).

Each library is stand-alone and typically included because they aren't common system libraries we can rely on the system providing (such as libjpeg, zlib and libc).

/extern/binreloc/ Utility to find the absolute path of the currently running executable on Linux.

Used for launching animation playback and some scripts which launch a Blender sub-process.

See: archived home page.

/extern/bullet2/ A real-time physics library.

Used for animating rigid-body physics and in the Game Engine.

See: home page.

/extern/ceres/ Ceres Solver is a C++ library for modeling and solving large, complicated optimization problems.

Used for motion tracking.

See: home page.

/extern/clew/ An extension wrangler library for OpenCL, a library used for executing code both on the CPU and GPU with the ability to take advantage of many GPU cores.
/extern/cuew/ CUDA Extension Wrangler.

See: home page.

/extern/curve_fit_nd/ Library for calculating bezier (cubic) curve paths from input points.

Used for freehand curve drawing.

See: home page

/extern/Eigen3/ A linear algebra header-only library to perform vector, matrix math operations and a sparse matrix solver.

Used by motion-tracking, ITASC IK solver and BLI math library.

See: home page.

/extern/gflags/ A C++ command line flag parsing library.

Not used directly, only included as a dependancy for glog.

/extern/glew/ An extension wrangler library for OpenGL, used to optionally take advantage of newer API calles which may not be available on all systems.

Used by all areas of Blender that do OpenGL drawing.

See: home page.

/extern/glew-es/ An extension wrangler library for OpenGL-ES. A limited version of OpenGL, supported on mobile devices. Note that OpenGL-ES is currently not supported.


/extern/glog/ A C++ logging framework.

See: home page.

/extern/gtest/ A C++ testing framework.

Used for testing C and C++ code in tests/

See: home page.

/extern/lzma/ A compression library focusing on best compression at the expense of processing time.

Used for compressing physics cache.

See: home page.

/extern/lzo/ A compression library focusing on fast compression at the expense of final file-size.

Used for compressing physics cache.

See: home page.

/extern/rangetree/ Basic library for storing non-overlapping scalar ranges.

Used by dynamic-topology sculpting, to store unique ID's for undo data.

See: home page.

/extern/sdlew/ An extension wrangler library for the SDL library.

Used for audio and joystick support in the Game Engine.

See: home page.

/extern/wcwidth/ Support for fixed width unicode characters, where some characters use multiple cells.

Used for the text editor and Python console.

See: online source.

/extern/xdnd/ Utility to support drag and drop on Unix/X11.

Used to support dropping files onto Blender's window.