Cassette CMF

The content modeling framework built for WordPress plugin developers. Delivers custom post types, taxonomies, settings pages, and custom fields all in a single config file.

Lean. Extensible. Beautiful.

composer require pedalcms/cassette

A library, not a plugin.

We don't even support using it as a plugin because we want to focus 100% on the library experience.

Config Arrays, Not Method Calls

Define everything in arrays or JSON in just one method call. Super clean.

CPTs + Taxonomies + Fields + Settings Pages Together

One config array registers your entire content model.

Modular by Design

18 field types in core. Additional fields will be available as separate Composer packages. Include only what you need.

Here's what it looks like:

use PedalCMS\Cassette\Core\Manager;

/* Set up on `init` or after, just like using `register_post_type`. */ 
add_action('init', function() {
    Manager::init()->register_from_array([
        'cpts' => [
            [
                'id' => 'book',
                'args' => ['label' => 'Books', 'public' => true],
                'taxonomies' => [
                    ['id' => 'genre', 'args' => ['label' => 'Genres']],
                ],
                'fields' => [
                    ['name' => 'isbn', 'type' => 'text', 'label' => 'ISBN'],
                    ['name' => 'author', 'type' => 'text', 'label' => 'Author'],
                ],
            ],
        ],
    ]);
});

One array. CPT registered. Taxonomy attached. Fields in the meta box. All version controlled.

😳 Why build yet another WordPress custom field solution?

Shockingly, none of the existing solutions scratched our itch.

We needed:

  • Install via composer (narrows it down to ACF and Carbon Fields)
  • Config based (eliminates Carbon Fields)
  • Fully featured without a premium license (eliminates ACF)

Don't get us wrong! We have tremendous respect for ACF, Carbon Fields, and all the rest of the community who have solved this particular problem countless times. We just needed something that wasn't available.

We hope you'll find it useful too.

How Cassette CMF compares:

Feature CassetteCMF ACF Carbon Fields
Totally Free
Number of Fields 18 35 27
Modular Design
Conditional Fields Not Yet
Repeater Fields Pro only
Relationship Fields Not yet
Register CPTs & Taxonomies
Create Gutenberg Blocks Potential Addon
Field Definitions PHP arrays / JSON PHP arrays / JSON / Syncable UI PHP fluent method-chaining API
Admin UI
Install via Composer
Install Size (unzipped) 1.3 MB (v0.0.5) 25.8 MB (v6.7.2 Pro) 9.8 MB (v3.6.9)
Number of Installs <10 2M+ ~300

Want more feature comparisons?

Scott Kingsley Clark maintains an exhaustive comparison chart covering similar solutions.

Field Types

Additional fields will be available as separate Composer packages. That's the point: keep core lean.

FAQs

Can I use this as a plugin?

You absolutely could. It would be trivial to build a plugin wrapper around this library. We're not including that because we are hardcore about not including anything not aimed at the main audience of plugin developers.

Can I use this as theme developer or site builder?

Of course!

If you use Composer in your stack, you can use this library. Honestly, you don't really need Composer; you could download the release and bundle it by hand. But then you wouldn't have a built-in update mechanism, so we don't recommend that.

Why "Cassette"?

We're Pedal. We like bike metaphors.

On a bike, the cassette is the cluster of sprockets on the rear wheel. Most people don't know it's called that; they just pedal and and switch gears and everything just works. Essential to the system, invisible to the rider.

That's what we want for your plugin. It does its job. Nobody notices. Everything just works.

Ready to try it?

composer require pedalcms/cassette

Requires PHP 8.1+ and WordPress 6.0+