PHPackages                             edalzell/forma - 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. [Admin Panels](/categories/admin)
4. /
5. edalzell/forma

ActiveStatamic-addon[Admin Panels](/categories/admin)

edalzell/forma
==============

Give control panel access to your addon's config

v3.1.2(8mo ago)1073.4k—8.3%5[1 PRs](https://github.com/edalzell/statamic-forma/pulls)9mitPHPPHP ^8.0CI passing

Since Nov 6Pushed 6mo ago1 watchersCompare

[ Source](https://github.com/edalzell/statamic-forma)[ Packagist](https://packagist.org/packages/edalzell/forma)[ RSS](/packages/edalzell-forma/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (7)Versions (35)Used By (9)

Give your Statamic addons a beautiful configuration page in the control panel
=============================================================================

[](#give-your-statamic-addons-a-beautiful-configuration-page-in-the-control-panel)

[![Latest Version](https://camo.githubusercontent.com/bab5962dad6fae4bdb77501103aed16cde49f97d57655adc71c5c3917c64b835/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6564616c7a656c6c2f73746174616d69632d666f726d612e7376673f7374796c653d666c61742d737175617265)](https://github.com/edalzell/statamic-forma/releases)

This package provides an easy way to let users configure your addon.

Requirements
------------

[](#requirements)

- PHP 8.2+
- Laravel 10.0+
- Statamic 4.0+

Installation
------------

[](#installation)

You can install this package via composer using:

```
composer require edalzell/forma
```

The package will automatically register itself.

Usage
-----

[](#usage)

First, create a `config.yaml` file in `resources\blueprints` that contains the blueprint for your configuration. As an example, see Mailchimp's, [here](https://github.com/statamic-rad-pack/mailchimp/blob/main/resources/blueprints/config.yaml).

Then, in the `boot` method of your addon's Service Provider add:

```
parent::boot();
\Edalzell\Forma\Forma::add('statamic-rad-pack/mailchimp', ConfigController::class);
```

The second parameter is optional and only needed if you need custom config handling (see Extending below)

There is a 3rd parameter `handle` you can use if the config file is NOT the addon's handle.

Once you do that, you get a menu item in the cp that your users can access and use. All data is saved into your `addon_handle.php` (or `$handle` as per above) in the `config` folder.

[![menu item](https://raw.githubusercontent.com/edalzell/statamic-forma/main/images/mailchimp-menu.png)](https://raw.githubusercontent.com/edalzell/statamic-forma/main/images/mailchimp-menu.png)

### Permissions

[](#permissions)

There is a `Manage Addon Settings` permission that must be enabled to allow a user to update the settings of any Forma-enabled addons.

### Extending

[](#extending)

If your addon needs to wangjangle the config before loading and after saving, create your own controller that `extends \Edalzell\Forma\ConfigController` and use the `preProcess` and `postProcess` methods.

For example, the Mailchimp addon stores a config like this:

```
'user' => [
    'check_consent' => true,
    'consent_field' => 'permission',
    'merge_fields' => [
        [
            'field_name' => 'first_name',
        ],
    ],
    'disable_opt_in' => true,
    'interests_field' => 'interests',
],
```

But there is no Blueprint that supports that, so it uses a grid, which expects the data to look like:

```
'user' => [
    [
        'check_consent' => true,
        'consent_field' => 'permission',
        'merge_fields' => [
            [
                'field_name' => 'first_name',
            ],
        ],
        'disable_opt_in' => true,
        'interests_field' => 'interests',
    ]
],
```

Therefore in its `ConfigController`:

```
protected function postProcess(array $values): array
{
    $userConfig = Arr::get($values, 'user');

    return array_merge(
        $values,
        ['user' => $userConfig[0]]
    );
}

protected function preProcess(string $handle): array
{
    $config = config($handle);

    return array_merge(
        $config,
        ['user' => [Arr::get($config, 'user', [])]]
    );
}
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security
--------

[](#security)

If you discover any security related issues, please email  instead of using the issue tracker.

License
-------

[](#license)

MIT License

###  Health Score

52

—

FairBetter than 96% of packages

Maintenance63

Regular maintenance activity

Popularity39

Limited adoption so far

Community22

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 93.9% 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 ~53 days

Recently: every ~126 days

Total

34

Last Release

262d ago

Major Versions

v0.8.12 → v1.02021-08-13

v1.3.0 → v2.02023-05-16

v2.2.0 → v3.02024-04-11

PHP version history (4 changes)v0.5PHP ^7.4

v0.8.5PHP ^7.4 || ^8.0

v2.0PHP ^8.2

v2.0.2PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/85ea2872499207e557751841b622e1c655c1ea9b56c6bced58686926f0e0fd17?d=identicon)[edalzell](/maintainers/edalzell)

---

Top Contributors

[![edalzell](https://avatars.githubusercontent.com/u/6069653?v=4)](https://github.com/edalzell "edalzell (62 commits)")[![laravel-shift](https://avatars.githubusercontent.com/u/15991828?v=4)](https://github.com/laravel-shift "laravel-shift (2 commits)")[![ryanmitchell](https://avatars.githubusercontent.com/u/51899?v=4)](https://github.com/ryanmitchell "ryanmitchell (1 commits)")[![vmitchell85](https://avatars.githubusercontent.com/u/1248035?v=4)](https://github.com/vmitchell85 "vmitchell85 (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/edalzell-forma/health.svg)

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

###  Alternatives

[backpack/crud

Quickly build admin interfaces using Laravel, Bootstrap and JavaScript.

3.4k3.4M207](/packages/backpack-crud)[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135192.6k5](/packages/statamic-rad-pack-runway)[duncanmcclean/simple-commerce

A simple, yet powerful e-commerce addon for Statamic.

16313.2k2](/packages/duncanmcclean-simple-commerce)[duncanmcclean/statamic-cargo

Comprehensive e-commerce addon for Statamic. Build bespoke e-commerce sites without the complexity.

322.8k](/packages/duncanmcclean-statamic-cargo)[conedevelopment/root

Root is an admin package for Laravel applications.

3713.1k2](/packages/conedevelopment-root)[eveseat/web

SeAT Web Interface

2723.2k135](/packages/eveseat-web)

PHPackages © 2026

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