# Overview

Writing a Caja-Python extension is a fairly straight-forward process. One simply imports the caja module and creates a class which is derived from a number of the caja module's classes. When an extension derives a class, it becomes a "provider", telling Caja to ask it for information. There are several types of providers available for extensions to use: there is MenuProvider, LocationWidgetProvider, ColumnProvider, PropertyPageProvider, and InfoProvider, all of which will be explained in more detail below. Your class can be derived from multiple providers.

Here are the basic steps:

1. A script is written and installed to the standard python extensions install path

2. Caja is (re)started and loads the Caja-Python C extension, which in turn loads all python extensions

3. Any python script in the standard python extensions install path that imports the caja module and derives the main class from a caja module class will be loaded

## A note about the standard python extensions install path

The install path for individual users is ~/.caja/python-extensions.

The system-wide install path is $PREFIX/lib/caja/extensions-2.0/python. However, some 64 bit distributions, such as Fedora, put Caja-Python extensions in $PREFIX/lib64/caja/extensions-2.0/python.

As of caja-python 0.7.0, caja-python looks in ~/.local/share/caja-python/extensions for local extensions and $PREFIX/share/caja-python/extensions for global extensions.