Available Addon Types


PyroCMS supports 5 different addon types by default. Each type is designed to extend Pyro in a specific way.


Modules are the largest and most flexible addons.

Modules can:

  • Provide areas in the control panel with forms, tables, etc.
  • Run install and uninstall logic and migrations.
  • Provide your main Stream models, presenters, etc.

If you want to build an area in the control panel for users then a module is what you want to build.

Field Types

Field types are the basic building blocks of data structures in Pyro. They control HTML inputs, data storage, and everything in between.

Field types can:

  • Render inputs and validation for forms.
  • Decorate data for models.
  • Act as model mutators.

If you need a custom input or data type then a field type is likely what you want to build.


Plugins are essentially Twig extensions because they extend Twig_ExtensionInterface. They let you add functionality to Pyro's view layer.

Plugins can:

  • Return or manipulate data in view functions.
  • Provide view data that's accessible globally.

If you want to add functionality that is available within views then a plugin is likely what you want to build.


Themes are the addons responsible for providing front-end or control panel resources. Themes can be standard (front-end) or admin (control panel).

Themes contain all the assets, images, views, layouts, and anything else you need to build a theme for your website or application.

If you are building a website and need to organize your views, assets, images, and other "theme" related resources a theme addon is what you want to build.


Extensions are commonly used as drivers but can do almost anything you need.

Extensions can provide a collection of helper functions and utilities that you use a lot. They can provide a driver for a specific addon. They can manipulate core functionality. They can do anything you need them to do - except provide control panel UI.

Extensions can:

  • Run install and uninstall logic and migrations.
  • Provide your main Stream models, presenters, etc.
  • Provide drivers for addons via an interface or abstract extension.

If you need to tuck away code, extend an addon, provide an adapter / driver for another addon, or do something that doesn't fit the above addons, an extension may be what you want to build.