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.
We don't even support using it as a plugin because we want to focus 100% on the library experience.
Define everything in arrays or JSON in just one method call. Super clean.
One config array registers your entire content model.
18 field types in core. Additional fields will be available as separate Composer packages. Include only what you need.
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.
Shockingly, none of the existing solutions scratched our itch.
We needed:
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.
| 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 |
Scott Kingsley Clark maintains an exhaustive comparison chart covering similar solutions.
Additional fields will be available as separate Composer packages. That's the point: keep core lean.
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.
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.
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.
Requires PHP 8.1+ and WordPress 6.0+