The Panels API uses a system of plugins to manage pretty much everything it does. Without the plugins, the API is an empty shell; plugins define the 'what, where, and how' of Panels' behavior. Panels uses eight different types of plugins. Specific reference information for each plugin type is available on the corresponding page:
These correspond to the similarly-named subdirectories filled with .inc files - each of those .inc files declares at least one plugin.
All panels plugins have the same basic structure. Each plugin begins with a
plugin declaration function, which Panels identifies either by function name alone or through a combination of function name and .inc file location depending on the method being used. Regardless of the method or plugin type, Panels expects the same thing to be returned from the plugin declaration function: a
plugin definition array. The available
properties depend entirely on the type of plugin, so to learn more, you'll have to consult the documentation for each individual plugin type.
There are eight types of panels plugins at present: context, relationships, arguments, content_types, styles, layouts, cache, and switchers; Panels provides an API that allows any module to implement these, but there's a starter set that comes with Panels itself. They're found in the various subdirectories that live under the Panels directory.