The short version
Advanced Custom Fields (ACF) is great. But the free tier lacks repeaters, and the Pro license costs real money.
OpenFields (GitHub: novincode/openfields) does everything ACF Pro does, uses the exact same get_field() API, and is 100% GPL.
I tested it on a production site. It works. No catch.
Technical compatibility – it’s not a rewrite
OpenFields mirrors the ACF Pro API exactly. These functions work out of the box:
get_field() / the_field()
have_rows() / the_row() / get_sub_field()
get_fields() / update_field() / delete_field()
get_field_object()
That means your existing templates keep working. No refactoring.
Repeater example
<?php if( have_rows('team_members') ) : ?>
<?php while( have_rows('team_members') ) : the_row(); ?>
<h3><?php the_sub_field('name'); ?></h3>
<p><?php the_sub_field('role'); ?></p>
<?php endwhile; ?>
<?php endif; ?>
Same syntax. Same output.
Admin interface – React + TypeScript + Vite
Most free alternatives have a jQuery mess. OpenFields doesn’t.
- React 18 for the field builder
- TypeScript throughout
- Vite for builds (not Webpack – faster HMR)
- Tailwind CSS for the UI
The drag‑and‑drop builder is responsive, conditional logic renders without full‑page reloads, and the JavaScript payload is small (they split chunks aggressively).
Build from source:
pnpm install
pnpm build # Vite + TypeScript -> admin/dist/
No encrypted or minified backdoors. Everything is readable.
No “Pro” version – actually free
Check the GitHub repo. There is no premium code. No feature flags. No “unlock repeater” prompts.
All field types are included:
- Text, textarea, number, email, URL
- Select, checkbox, radio, switch
- Date, time, datetime, color picker
- Image, file, gallery
- WYSIWYG
- Post object, taxonomy, user
- Repeater and group (the ones ACF hides behind Pro)
Location rules: post types, page templates, taxonomies, user roles.
Running alongside ACF – safe migration
If ACF is active, OpenFields does not load its own get_field() wrapper. No function collisions.
Instead, you get prefixed versions that always work:
cofld_get_field('field_name', $post_id);
Both plugins write to standard wp_postmeta. You can install OpenFields, test on a staging site, then deactivate ACF. Your data stays.
REST API – headless ready
All fields are exposed via WordPress REST API. No extra configuration.
Fetching a post with custom fields:
GET /wp-json/wp/v2/posts/{id}?_fields=id,title,acf
Returns the same meta structure as ACF. If you’re using Next.js or Nuxt with WordPress as a backend, OpenFields won’t break your schema.
Performance notes (quick)
- Stores data as native post meta – no custom tables (unless you extend it)
- No admin bloat on the frontend – styles/scripts only load on field group admin screens
- PHP 7.4+ (tested to 8.3)
- WordPress 6.0+ (tested to 6.9.4)
I ran a simple benchmark with 20 repeater rows and 10 fields per row. OpenFields and ACF Pro had identical query times (both use get_post_meta calls). No surprises.
What’s missing compared to ACF?
- Smaller ecosystem – fewer third‑party addons
- Less community content – you won’t find 5,000 YouTube tutorials (yet)
- No official support – just GitHub issues and the WordPress.org forum
But if you’re a developer who reads docs, that’s fine.
Should you switch?
- New project: Yes. Start with OpenFields. Don’t pay for a license you don’t need.
- Existing ACF site: Test on staging. The drop‑in compatibility is real. I’d wait a few months for edge cases, but it’s already stable.

Top comments (0)