Spyder plugins are importable Python modules that may use internal API to do different stuff in IDE. Spyder goal is to be reusable set of components and widgets, so a lot of things is made with plugins. For example, code editor and python console are plugins. Object inspector, history browser and so on. You can see them here.
There are two type of plugins in Spyder:
Both plugin types should include class that inherits from the same base plugin class.
[more research is needed - ask email@example.com if you feel capable]
Some software use directories for plugin installation and discovery. Spyder uses Python modules. Internal components are contained in spyderlib namespace and are imported explicitly. External and 3rd party plugins are automatically imported from certain predefined locations. One such location is spyderplugins module.
To make your module appear in spyderplugins namespace, you need to make Spyder discover and import it first. In Spyder source code tree you can just drop your module into spyderplugins directory. This is more like hack than convenient plugin discovery interface, so proposal to fix this are welcome. One of the ideas is to inspect Python files without importing them with astdump modules and check if their interface is compatible. This will also allow Spyder to enable/disable plugins from config menu.
The module spyderplugins includes third-party plugins of several kinds.
In Spyder v2.0, any kind of plugin may be created in the module spyderplugins. These third-party plugins may communicate with other Spyder components through the plugin interface (see spyderlib/plugins/__init__.py).
How to create your own I/O Spyder plugins:
Spyder v1.1 supported only input/output plugins (modules starting with io_) which provided I/O functions for the variable explorer (Workspace and Globals explorer in v1.1, Variable explorer in v2.0). Spyder natively supports .mat, .npy, .txt, .csv, .jpg, .png and .tiff file formats out of the box. These input plugins allowed users to add their own types, like HDF5 files for example.
See the example of the pylint third-party plugin in Spyder v2.0.