# Directory Structure of the GIMP Source Tree

Sven Neumann
2003

This document outlines the directory structure of the GIMP source tree. It should help people to get started with the GIMP code.

The GIMP source tree can be divided into the core application, libraries, plug-ins, data files and some stuff that doesn't fit into these catagories. Here is a list of top-level directories:

`app` | The source code of the core GIMP application.
`build` | This is a virtual CVS module that is only here to assist in building GIMP for Windows.
`cursors` | Bitmaps that are used to construct cursors used by the various GIMP tools.
`data` | All sorts of data files like brushes, gradients, patterns as well as the splash image and files to integrate GIMP into the GNOME desktop.
`devel-docs` | The developers documentation. The file you are looking at (or at least the source that was used to generate it) is located here.
`docs` | Documentation for users. The man-pages which get installed with the GIMP as well as reference sheets for keybindings and other stuff.
`etc` | Configuration files that get installed with the GIMP.
`libgimp` | The main GIMP library. It provides the API to write plug-ins in the C programming language. GIMP itself does not link against this library.
`libgimpbase` | Basic functions that are shared by the GIMP application and its plug-ins.
`libgimpcolor` | Color-related functionality that is shared by the GIMP application and its plug-ins.
`libgimpmath` | A basic set of mathematic operations useful for the the GIMP application and its plug-ins.
`libgimpmodule` | A small library that abstracts dynamic loading of modules. This is used to implement loadable color selectors and display filters.
`libgimpwidgets` | User interface elements (widgets) and utility functions that are shared by the GIMP application and its plug-ins.
`m4macros` | m4 macros (well, actually just one) which get installed to help automake to detect a GIMP installation. Useful for plug-in developers.
`modules` | Color selectors and display filters that can be loaded at run-time.
`plug-ins` | This directory and its sub-directories hold all the GIMP plug-ins that are part of the main GIMP distribution.
`po` | Translations of strings used in the main GIMP application.
`po-libgimp` | Translations of strings used in libgimp.
`po-plug-ins` | Translations of strings used in GIMP plug-ins.
`po-script-fu` | Translations of strings used in Script-Fu scripts.
`regexrepl` | Code to handle regular expressions in case your C library does not suport them. These files will not be used for most builds since modern libc implementation have offer support for regular expressions.
`themes` | The look of GIMP is themeable to some extent. This directory at the moment only holds the default theme but more themes might be added in the future.
`tips` | The helpful tips shown at startup are located here together with their translations.
`tools` | The source code for some GIMP-related tools as well as tools used to build the GIMP application.

The contents of these directories will be explained in detail in the following sections.

## The GIMP application

The source code of the core GIMP application is found in the `app` directory.

`app/base` | base functionality such as pixel regions, tiles etc.
`app/paint-funcs` | functions to manipulate pixels, part of the base functionality
`app/compose` | new pixel compositing routines that supersede the code in `app/paint-funcs`
`app/config` | handling of config files, provides the GimpConfig interface and the GimpRc object which is used from all over of the application; depends on GObject
`app/core` | the core of the GIMP core, makes heavy use of GObject but is not GTK+-dependant
`app/file` | file handling routines, part of the core
`app/paint` | paint core that provides different ways to paint strokes
`app/plug-in` | plug-in handling, part of the core
`app/pdb` | core side of the Procedural Database, exposes internal functionality by means of the PDB
`app/text` | text handling, part of the core
`app/vectors` | vectors framework, part of the core
`app/xcf` | XCF file handling, part of the core
`app/display` | handles displays (e.g. image windows), part of the GUI
`app/tools` | user interface part of the tools as found in the toolbox. The actual tool functionality is in the core
`app/widgets` | a collection of widgets used in the application GUI
`app/gui` | the code that puts the user interface together