Block theme templates are files, and this edits the files
Your Full Site Editing theme's templates and parts are ordinary files with block markup in them. PortBay edits those files as source, in your running site, and tells you plainly when what you clicked came out of the database instead. Pro, early access, opt-in.
How do I edit a WordPress block theme's templates visually?
A Full Site Editing theme keeps its layout in two places at once, and which one you are looking at decides what can be edited. An untouched template is an ordinary .html file in the theme, holding block markup; only a template somebody has customised in the site editor exists as a database row. PortBay works on the first. It runs your WordPress site at a real local hostname, and when you click an element that came out of the theme's own templates/ or parts/ files it writes the change into that file, preserving your formatting. What it will not do is quietly turn a theme file into a database customisation to make an edit land, because that permanently changes how the site is maintained. The words on a post or page are database rows too, and PortBay says so rather than editing a lookalike. Pro, early access, opt-in.
Verified against the product, 2026-09-05.
An FSE theme and its template files
PortBay runs your WordPress site at its own .test URL with trusted HTTPS, starts PHP-FPM and the database for you, and dispatches board cards into it. The visual editor edits that same running site in your real browser — one live page at one breakpoint, not a multi-frame design canvas.
Your first block template edit
Four steps from a WordPress install to a change committed in your theme. Nothing here installs a plugin into WordPress.
- Install PortBay and add your WordPress site
- Check that PortBay read your theme as a block theme
- Turn the visual editor on
- Open Edit in browser and change a template
Install PortBay and add your WordPress site
Homebrew installs the app and the bundled portbay CLI. Add the site folder; PortBay recognises WordPress from wp-config.php or wp-content, serves it at its own .test hostname over trusted HTTPS, and starts PHP-FPM and the database for you.
brew tap portbay-app/portbay && brew install --cask portbayCheck that PortBay read your theme as a block theme
This matters more than it sounds, and the panel tells you. A block theme is one whose own directory carries both a theme.json and a templates/ folder — and PortBay looks at your theme, not at the twenty-something themes WordPress ships with, which are block themes on almost every install in existence and say nothing about your site.
wp-content/themes/your-theme/theme.jsonTurn the visual editor on
It ships to Pro under early access and is off by default. Sign in to Pro, then flip the Early Access toggle. The open-source build does not contain the editor at all — it is not compiled in. Running WordPress, the database and the hostname is all in the free app.
Settings › Account › Early AccessOpen Edit in browser and change a template
The project's Visual editing section has one button. It opens your real site in your normal browser with the edit bar docked at the top, in Preview mode first so the page stays interactive. Switch to Edit, change something the theme rendered, and Save writes it into templates/index.html or the part that produced it.
https://mysite.test/aboutWhere a block theme keeps its words
This is the whole difference between a block theme and a classic one, and it decides what a visual editor can honestly offer you. Half of what you see on the page is in your repository. The other half is in MySQL.
On a classic theme the page's markup is usually right there in the PHP, which is why that stack gets a text-search tier and this one does not. The same split explains why PortBay will not extract an element into a component here: on WordPress, the word component means three things at once — a classic theme's template-part file, a block theme's template part, and the block editor's synced patterns — and two of the three are database rows, which a lane that writes component files cannot address. Naming the boundary is the only honest way to sell an editor for Full Site Editing.
<!-- wp-content/themes/acme/templates/index.html --><!-- an ordinary file. PortBay edits it as source. --> <!-- wp:template-part {"slug":"header","tagName":"header"} /--> <!-- wp:group {"tagName":"main"} --><main class="wp-block-group"> <!-- wp:heading {"level":1} --> <h1 class="wp-block-heading">Latest work</h1> <!-- text, class, attrs: writes --> <!-- /wp:heading --> <!-- wp:query --> <!-- the posts rendered here are wp_posts rows. --> <!-- their words are not in this file, not in any file --> <!-- in the theme, and a text search of your repository --> <!-- will not find them. PortBay says that instead of --> <!-- editing whatever it found that looked similar. --> <!-- /wp:query --></main><!-- /wp:group -->
The pieces underneath
Visual editor
Click an element on your running site in your own browser and edit its text, classes and styles straight into the source file, across 21 stacks.
Explore →Local databases
Six engines, one wizard: isolated data dirs, dedicated ports, supervision, and connection vars injected into linked projects on start.
Explore →Asked before downloading
How does PortBay tell a block theme from a classic one?
By looking at your theme, and only at your theme. A block theme is one whose own directory carries both a theme.json and a templates/ folder. The naive check — is any installed theme a block theme — is true on very nearly every WordPress in existence, because core has shipped three block themes in the default download for years, so a site running a hand-written classic PHP theme would be misread as Full Site Editing. PortBay strikes out core's bundled twenty-something themes as evidence about core rather than about your site, and if exactly one theme survives that, that is your theme. If nothing survives or several do, it answers classic on purpose: a wrong classic guess costs you one sentence, and a wrong block guess would refuse the only editing tier a classic theme has.
What can I actually edit on a block theme?
The theme's own block templates and template parts — templates/index.html, parts/header.html and their neighbours. Those are ordinary files with block markup in them, so text, class and attribute edits resolve into them and write back with your formatting intact. The cross-stack parity test drives all three lanes against a real block-theme fixture at wp-content/themes/acme/templates/index.html and each one writes. What is not on that list is page content and page settings, and the next two answers are about why.
Why can't PortBay edit the words on a WordPress post or page?
Because they are not in your repository. On a Full Site Editing site, a page's content is serialised block markup stored in a database row, so a text search of your theme finds it in neither the source nor the templates. That is the defining difference from a classic theme, where the markup is usually sitting in a PHP file that PortBay can search. Rather than fall back to the nearest similar-looking text somewhere in the theme — which on a WordPress site can genuinely find the same words in a place the page did not get them from — PortBay tells you what it hit.
Can PortBay's visual editor change the page title or SEO description in a WordPress block theme?
No, and this is the one place in the whole product where a lane refuses outright. Across twenty-one stacks and four write lanes, PortBay's own parity test records exactly two refusals, and both are WordPress page settings, both carrying the same message: it cannot connect to this site's database. A WordPress page's title and its SEO fields are wp_posts and wp_postmeta rows, so there is no file to write. If a page on this site ever tells you otherwise, it is wrong.
Will editing a WordPress template file break the site editor or my theme updates?
No, because PortBay refuses the change that would. A stock FSE template is a file; it only becomes a database row when somebody customises it in the site editor, and from then on the row wins forever — theme updates to that template stop reaching the site and the editor starts offering a Reset button. Writing that row on your behalf would be a durable change to how your site is maintained, made as a side effect of editing one word, and creating it correctly means getting rows right across four tables. The undo would be a delete, and nothing in PortBay deletes. So it refuses by name, names the file, and points you at the two paths that work: edit the theme file, or customise the template once in the site editor and let WordPress create the row it knows how to create.
Can PortBay's visual editor set fonts or colours through WordPress theme.json?
No. theme.json is how PortBay recognises your theme as a block theme, not somewhere it writes. A block theme's fonts belong under settings.typography.fontFamilies in that file — the site editor reads them from there, and a stylesheet PortBay wrote instead would be invisible to it, which is worse than doing nothing. PortBay has no theme.json writer, and it says so rather than putting the declaration somewhere that renders but does not show up in the editor you will open next.
Is PortBay's visual editor free for WordPress block themes, and where will it refuse to run?
PortBay's visual editor is a Pro feature, in early access behind an opt-in toggle in Settings, and it is not compiled into the open-source build at all. It attaches to local .test hosts only and refuses while a project is shared over a public tunnel — the edit bar never applies to tunneled traffic, so you stop the share first. It is one live page at one breakpoint at a time rather than a multi-frame infinite canvas. Running WordPress locally — PHP, the database, the hostname, trusted HTTPS, the task board — is all in the free, open-source app.

Give your projects and your agents a real local home.
Download for macOSFree & open source · macOS 11+ on Apple Silicon · Pro from $10/mo