An ACF alternative
for people who build with blocks.
Advanced Custom Fields is a good plugin, and most of this page is about the one decision that separates it from GutenFields: what a field group attaches to. ACF attaches one to an edit screen. GutenFields attaches one to a block. Nearly every other difference follows from that.
Whether to switch depends on one question.
Do the fields you are building belong to a piece of content on the page, or to the post itself? Both are legitimate; they are just different jobs, and each plugin is built for one of them.
GutenFields is the better fit when…
- You are building page sections — heroes, testimonials, feature grids, callouts — that an editor drops into a post and reorders.
- You want field definitions to live in version control, in the theme, reviewed like any other code.
- You want the front end to be a PHP template you own, not a shortcode or a filter chain.
- You would rather not write a
block.jsonand a Reacteditcomponent for every block you add. - A recurring subscription for a developer tool is a thing you would like to stop paying.
Stay with ACF when…
- Your fields belong to the post, not the page — a product's SKU, an event's date, an author's biography.
- You need to query by field value. ACF writes to post meta, so
WP_Querycan sort and filter on it. GutenFields cannot; see the honest limits below. - You rely on location rules — field groups appearing on particular post types, taxonomies, user profiles or template files.
- You have an existing ACF site. There is no importer, and re-pointing templates is real work.
- You need a field type GutenFields does not have. The field list is the honest answer to that.
Most of what you like about ACF is here too.
This is not a plugin built in opposition to ACF. It is built on the same premise — that a developer should describe fields once and get a usable editing interface for free — and it keeps the parts of that premise worth keeping.
Fields defined in PHP
One array per block, in your theme, in git. gutenfields_register_block()
takes the same shape of definition you already write for ACF, and the same review
and deployment path applies to it.
A generated editor UI
You describe a text, a select, a rich; the
plugin renders the control. Nobody writes an editing interface by hand, in either
plugin.
A template you own
Front-end markup is an ordinary PHP file in your theme —
gutenfields/{slug}.php. Overriding it is copying a file, not filtering
a string.
No React, either way
ACF Blocks spared you writing block JavaScript and so does this. If that is the feature you came to ACF for, you are not giving it up.
An admin builder as well
Not everything deserves a commit. Blocks built in the admin UI live in the database, and Export PHP turns one into code the moment it has earned a place in the theme.
GPL-2.0-or-later
The same licence as WordPress and as ACF. The code is yours to read, change and keep running on every site you have built.
Where the two actually differ.
Architecture, not scorekeeping. Every row below is a consequence of the first one. For what ACF currently ships and charges, read their site — we are not going to keep a competitor's feature list up to date on our own pages.
| GutenFields | Advanced Custom Fields | |
|---|---|---|
| A field group attaches to | A block, or an options page | An edit screen, chosen by location rules — post types, taxonomies, users, options pages |
| Where values are stored | Block attributes, in post content | Post meta, one row per field |
Queryable with WP_Query |
No — values travel with the block, not the post | Yes — meta_query and meta_key ordering work |
| Content moves with the block | Yes — copy the block to another post and its data goes with it | No — meta belongs to the post it was entered on |
Per-block block.json |
None. The field definition is the registration | One per block |
| Front-end template | theme/gutenfields/{slug}.php, resolved child-theme first |
A render template named in the block's registration |
| Definitions in version control | Written as PHP; the admin builder exports to PHP | Written as PHP, or synced as local JSON |
| Conditional logic | Nested rule groups, comparing sibling fields | Nested rule groups, across the field group |
| Repeaters, flexible content, options pages | Paid tier | Paid tier |
| Paid licence shape | One payment. Perpetual use, first year of updates | Annual subscription |
| Licence | GPL-2.0-or-later | GPL-2.0-or-later |
The row that matters most is the second one. ACF putting values in post meta is what makes them queryable and what ties them to a post; GutenFields putting them in block attributes is what lets an editor duplicate a testimonial into another page and have it arrive intact. Neither is a bug. Pick the one that matches what you are storing.
What GutenFields deliberately does not do.
A comparison page that lists only the wins is an advert. These are the things people ask for and do not get, and they are the reasons not to buy.
No location rules
Fields attach to blocks and to options pages. There is no way to say "show this group on the Product post type" or "on pages using this template". If that is the shape of your data, this is the wrong plugin and no amount of the rest makes up for it.
No post meta, so no meta queries
Values live in the block's attributes inside post content. That is what makes them portable, and it is also why you cannot sort a query by one or filter posts on it. Archives driven by field values need ACF, or a custom post type with real meta.
No ACF importer
Nothing reads acf-json or an ACF export. The import format is the plugin's own JSON schema. Moving a site across means redefining the groups as blocks and rewriting the templates that read them.
Conditional rules see siblings only
A rule compares against other fields in the same block, or other subfields in the same repeater row. It cannot reach out of a row or across to another block.
The canvas previews fields, not your template
The editor shows the generated inputs rather than running your PHP. The front end is the preview. ACF Blocks will render your template in place; this does not.
Not a page builder
There is no drag-and-drop layout canvas and no styling UI. You get fields, a block, and a template file. Everything about how it looks is your CSS.
One payment, and then it is yours.
This is the difference people write in asking about, so it is worth being exact about what a GutenFields licence is and is not.
What you pay for
A single payment — £79 for one production site, £129 for five, £299 for as many as you like. It buys perpetual use of the Pro edition and the first year of updates and priority support. Prices include VAT.
Staging and local copies never count. A five-seat Agency licence is five live
sites plus fifty development copies alongside them, because charging twice for the
same site once it has a .test domain is not a business we want to be in.
What happens after a year
Nothing stops. The licence is perpetual: the version you have keeps working on every site it is activated on, for as long as you keep the site. What lapses is access to newer versions and to priority support.
Renewing is optional and is a decision you make once a year with a changelog in front of you, rather than a card that is charged whether or not anything shipped. The pricing FAQ spells out the edge cases.
And the free edition is not a trial. Nineteen field types, conditional logic, the admin builder, templates and the WP-CLI commands, with no expiry and no nag. Pro adds repeaters, flexible content, galleries and options pages. If none of those four is something you need, the free plugin is the whole product for you — see what is in each edition.
Moving one block across, to see how it feels.
Nobody should migrate a site on the strength of a comparison table. The realistic
first step is to leave ACF exactly where it is and rebuild one section — a
testimonial, a callout, whatever you last got tired of writing a
block.json for.
- Install the free edition alongside ACF. They do not conflict: different post types, different registration, different storage. Nothing you have already built changes.
-
Describe the fields once, in
inc/blocks.phpor in the admin builder. The array shape will look familiar —name,type,label, and the config each type takes. -
Write the template at
theme/gutenfields/{slug}.php. Until you do, the block auto-renders one BEM-classed element per field, so it is usable while you work rather than blank. - Compare the two in an editor. Add both blocks to a draft page and let whoever actually edits the site try each. Their answer is worth more than this page.
The whole path is in the manual, and the guide to building a Gutenberg block with fields walks through a complete one end to end.
What people ask when they arrive from ACF.
Q. Is there a free ACF alternative?
Q. Can I import my existing ACF field groups?
Q. How does this compare to Meta Box, Pods or JetEngine?
Q. Do I have to give up ACF Blocks?
Q. Will my content survive if I deactivate GutenFields?
Q. Is a one-time licence really perpetual?
The free edition answers this faster than we can.
Install it next to ACF, rebuild one section, and see which one you would rather maintain thirty of. Nothing to uninstall if the answer is ACF.