# Overview

Writing a Nemo-Python extension is a fairly straight-forward process. One simply imports the Nemo module from the gobject introspection repository and creates a class which is derived from a gobject.GObject and one of the Nemo module's classes. When an extension derives a class, it becomes a "provider", telling Nemo 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 nemo-python extension install path

2. Nemo is (re)started and loads the nemo-python C extension, which in turn loads all python extensions it can find

3. Any python script in the standard nemo-python extension install path that imports the Nemo module from the gobject introspection repository and derives the main class from a Nemo module class will be loaded

### A note about the standard python extensions install path

As of nemo-python 0.7.0 (and continued in 1.0+), nemo-python looks in ~/.local/share/nemo-python/extensions for local extensions and $PREFIX/share/nemo-python/extensions for global extensions.

### A note about compatibility issues for nemo-python 1.0

1. We no longer support the "import nemo" command that previous versions used. This is because nemo-python now directly uses Nemo's annotations, which must be imported by the "from gi.repository import Nemo" command.

2. The extension class must now derive itself from a gobject.GObject in addition to the standard Nemo classes.

3. For now, some Nemo class constructors require passing named arguments instead of a standard argument list. This requirement may go away at some point.