# Plugin Basics

## Quickstart

The directory layout and example plugin below can be found in the pathspider-example GitHub repository. You can get going quickly by forking this repository and using that as a basis for plugin development. The repository has templates for a Synchronized, a Desynchronized and a Forge plugin.

## Directory Layout

`pathspider.plugins` is a namespace package. Namespace packages are a mechanism for splitting a single Python package across multiple directories on disk. One or more distributions may provide modules which exist inside the same namespace package. The PATHspider distribution’s plugins are installed in `pathspider.plugins`, but also 3rd-party plugins can exist in this path without being a part of the PATHspider distribution.

To get started you will need to create the required directory layout for PATHspider plugins, in this case for the Example plugin:

    pathspider-example
    └── pathspider
        ├── __init__.py
        └── plugins
            ├── __init__.py
            └── example.py

Inside both __init__.py files, you will need to add the following (and only the following):

    from pkgutil import extend_path
    __path__ = extend_path(__path__, __name__)

Your plugin will be written in `example.py` and this plugin will be discovered automatically when you run PATHspider.

## Running Your Plugin

In order to run your plugin, in the root of your plugin source tree run:

    PYTHONPATH=. pspdr measure -i eth0 example </usr/share/doc/pathspider/examples/webtest.ndjson

Unless you install your plugin, you will need to add the plugin tree to the `PYTHONPATH` to allow the plugin to be discovered.