PHPackages                             tentapress/system - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. tentapress/system

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

tentapress/system
=================

0.6.0(3mo ago)07420MITPHP

Since Feb 7Pushed 3mo agoCompare

[ Source](https://github.com/tentaplane/package-system)[ Packagist](https://packagist.org/packages/tentapress/system)[ RSS](/packages/tentapress-system/feed)WikiDiscussions main Synced today

READMEChangelog (10)DependenciesVersions (18)Used By (20)

TentaPress System
=================

[](#tentapress-system)

Core platform layer for TentaPress plugin and theme management.

Package Details
---------------

[](#package-details)

FieldValueName`tentapress/system`Version0.6.0Provider`TentaPress\System\SystemServiceProvider`Overview
--------

[](#overview)

The system package provides the foundational infrastructure for TentaPress:

- Plugin discovery and lifecycle management
- Theme discovery and activation
- Shared content reference registry for optional cross-plugin linking
- Editor driver registry for pluggable page/post editing experiences
- Admin middleware stack
- Console commands for plugin/theme operations
- Boilerplate plugin generation from Packagist or local fallback

Components
----------

[](#components)

### Plugin System

[](#plugin-system)

ClassPurpose`PluginRegistry`Discover and track plugins from filesystem`PluginManager`Enable, disable, and boot plugins`PluginManifest`Parse and validate `tentapress.json` manifests### Theme System

[](#theme-system)

ClassPurpose`ThemeRegistry`Discover and track themes from filesystem`ThemeManager`Activate themes and register view namespaces`ThemeManifest`Parse and validate theme manifests### Middleware

[](#middleware)

ClassPurpose`AdminMiddleware`Composite admin middleware stack`AdminAuthMiddleware`Admin authentication`CanMiddleware`Capability/permission checks`AdminErrorPagesMiddleware`Admin-styled error pages### Support

[](#support)

ClassPurpose`AdminRoutes`Route registration helpers`ContentReferenceRegistry`Register and resolve optional content reference sources`EditorDriverRegistry`Register/resolve page and post editor drivers`JsonPayload`JSON encoding helper`Paths`Path resolution utilitiesConsole Commands
----------------

[](#console-commands)

### Plugin Commands

[](#plugin-commands)

```
php artisan tp:plugins sync        # Discover and cache plugins
php artisan tp:plugins list        # List all plugins with status
php artisan tp:plugins enable  # Enable a plugin
php artisan tp:plugins disable  # Disable a plugin
php artisan tp:plugins defaults    # Enable default plugins
php artisan tp:plugins cache       # Rebuild plugin cache
php artisan tp:plugins clear-cache # Clear plugin cache
```

Plugin commands no longer run migrations automatically. Run `php artisan migrate` explicitly after plugin installs or upgrades. Plugin lifecycle/cache actions also clear compiled views so Blade/Blaze output stays coherent after plugin state changes. First-party pre-1.0 install guidance uses an explicit Composer constraint so admin/manual installs resolve packages that are only available as `0.x-dev`.

### Boilerplate Plugin Generator

[](#boilerplate-plugin-generator)

```
php artisan tp:plugin:make
php artisan tp:plugin:make acme events-schedule "Events Schedule"
php artisan tp:plugin:make acme events-schedule "Events Schedule" --namespace="Acme\\EventsSchedule"
php artisan tp:plugin:make acme events-schedule "Events Schedule" --enable
```

The generator creates a new plugin by copying the published boilerplate template, then rewriting the package id, namespace, class names, route names, capability key, settings prefix, view namespace, and human-facing labels.

Default source behaviour is `--source=auto`:

- Try Packagist first using `tentapress/boilerplate`
- Fall back to the local repository copy at `plugins/tentapress/boilerplate` if the package is unavailable

Supported options:

```
php artisan tp:plugin:make   "" \
  --source=auto|packagist|local \
  --template-package=tentapress/boilerplate \
  --template-version= \
  --namespace="Vendor\\PluginName" \
  --description="Describe what the plugin does." \
  --enable
```

Use `--source=packagist` to require a downloadable template package and fail if it cannot be fetched. Use `--source=local` when working on the monorepo template itself or when offline. After generation the command syncs the plugin registry, rebuilds plugin cache, and clears compiled views.

### Theme Commands

[](#theme-commands)

```
php artisan tp:themes sync         # Discover themes
php artisan tp:themes list         # List all themes
php artisan tp:themes activate  # Activate a theme
```

### Catalog Commands

[](#catalog-commands)

```
php artisan tp:catalog generate    # Regenerate docs/catalog/first-party-plugins.json
php artisan tp:catalog check       # Fail if the committed catalog is stale
```

The first-party plugin catalog is generated from `plugins/tentapress/*/tentapress.json` manifests and preserves catalog-only metadata already present in the committed JSON feed.

Database
--------

[](#database)

TablePurpose`tp_plugins`Plugin enabled/disabled state`tp_themes`Active theme recordCache
-----

[](#cache)

FilePurpose`bootstrap/cache/tp_plugins.php`Enabled plugins and boot order`bootstrap/cache/tp_theme.php`Active theme metadataFor OPCache-backed hosts, runtime cache refresh helpers invalidate these files after plugin/theme lifecycle actions.

Blaze Integration
-----------------

[](#blaze-integration)

Blaze is integrated as an opt-in optimization layer for anonymous components.

- Toggle with `TP_BLAZE_ENABLED=true|false` (default `false`).
- Debug toggle: `TP_BLAZE_DEBUG=true|false` (default `false`).
- The active theme's `views/components` path is resolved dynamically at runtime.
- Configure active theme strategy in `config/tentapress.php` under `blaze.active_theme_components`.
- Configure additional optimized directories (for plugin/package components) under `blaze.paths`.
- Keep `fold` disabled unless a component is fully static and safe for compile-time folding.
- Laravel exception renderer views are excluded from Blaze compilation for compatibility.
- System config overrides raw `BLAZE_*` env keys so TentaPress controls Blaze behavior consistently.
- After changing Blaze path configuration, clear compiled views:

```
php artisan view:clear
```

Discovery
---------

[](#discovery)

Plugins and themes are discovered by scanning for `tentapress.json` manifest files:

- Plugins: `plugins/**/tentapress.json`
- Themes: `themes/**/tentapress.json`
- Vendor: `vendor/{namespaces}/**/tentapress.json`

Vendor namespaces are configured in `config/tentapress.php`.

Integration
-----------

[](#integration)

This package auto-registers via Laravel package discovery. The `SystemServiceProvider`:

1. Registers plugin and theme registries
2. Loads enabled plugins from cache
3. Boots plugin service providers
4. Registers admin routes and middleware

Testing
-------

[](#testing)

This package keeps feature tests locally under `packages/tentapress/system/tests/Feature`.

```
composer test:filter -- PluginsListCommandTest
composer test:filter -- PluginsSyncCommandTest
composer test:filter -- PluginsFailurePathsCommandTest
composer test:filter -- BoilerplateMakeCommandTest
```

Migration behavior for tests is provided by root Pest config via `RefreshDatabase`, so package migrations are applied for each test run.

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance80

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

17

Last Release

104d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/576413?v=4)[Chris Southam](/maintainers/csoutham)[@csoutham](https://github.com/csoutham)

---

Top Contributors

[![csoutham](https://avatars.githubusercontent.com/u/576413?v=4)](https://github.com/csoutham "csoutham (48 commits)")

### Embed Badge

![Health badge](/badges/tentapress-system/health.svg)

```
[![Health](https://phpackages.com/badges/tentapress-system/health.svg)](https://phpackages.com/packages/tentapress-system)
```

###  Alternatives

[eventsauce/eventsauce

A pragmatic event sourcing library for PHP with a focus on developer experience.

8662.2M57](/packages/eventsauce-eventsauce)[wamania/php-stemmer

Native PHP Stemmer

1464.5M42](/packages/wamania-php-stemmer)[ether/simplemap

A beautifully simple Map field type for Craft CMS

134353.8k](/packages/ether-simplemap)[marcusball/case-helper

Easily convert between camelCase, PascalCase, kebab-case, snake\_case, SCREAMING\_SNAKE\_CASE, Train-Case, and string case!

2152.5k3](/packages/marcusball-case-helper)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
