Contensio logo

Plugin overview

What a Contensio plugin is, how it's discovered, and the two install paths users can take.

A Contensio plugin is a small Composer package (or ZIP bundle) that extends the admin panel, adds features, or integrates with third-party services — without modifying a single core file.

What a plugin can do

  • Inject UI into core views through the Hook system — login buttons, profile sections, settings tiles, etc.
  • Register admin pages with sidebar entries under Root, Tools, or Appearance.
  • Add routes — public, authenticated, admin-gated.
  • Ship database tables that run as migrations the moment the plugin is enabled.
  • Declare permissions that appear in the admin's role editor alongside core ones.
  • Register block types the editor picks up automatically.
  • Add content types, taxonomies, fields programmatically if appropriate.
  • Publish assets (CSS, JS, images) and Blade views under their own namespace.

How plugins are discovered

Contensio has a PluginRegistry that scans two locations on boot:

  1. vendor/ — any Composer package with "extra.cms.type": "plugin" in its composer.json.
  2. packages/plugins/ — local directories for development, each containing a plugin.json manifest at the root.

The registry reads each plugin's manifest, and if the plugin is enabled in the admin panel, boots its service provider. Disabled plugins stay in the filesystem but their code never runs.

The two install paths

Your plugin must work with both — users shouldn't have to know the difference.

Composer (developers)

composer require acme/plugin-awesome

Then in the admin: Plugins → Enable next to "Awesome." Migrations run automatically.

ZIP upload (non-technical users)

Download the release ZIP from GitHub releases, upload in Plugins → Install Plugin, click Enable.

Same code, same result. The registry treats them identically — the only difference is filesystem location.

Naming convention

Published plugins on Packagist use the contensio/plugin-* prefix for first-party plugins and recommended naming for community plugins: {vendor}/plugin-{name}. See Publishing to Packagist for the full convention.

The reference implementation

contensio/plugin-social-connect is the official reference plugin. It exercises every major API covered in these docs:

  • Hooks (login buttons, profile section, settings tile)
  • Sidebar navigation (Tools placement)
  • Migrations (social login table)
  • Routes (OAuth flow + admin settings)
  • Settings storage
  • Dual install (Composer + ZIP)

When in doubt, open that repo and see how it does it.

Next

Start with Plugin anatomy to learn the required file structure.