Skip to content
PortBay

Edit a plain HTML site in the browser, with no build step

No build step, no dev server, no plugin, nothing to migrate. PortBay serves your folder at its own .test hostname over trusted HTTPS and writes what you change straight into the .html file the browser is showing. Pro, early access, opt-in.

The short answer

How do I edit a plain HTML website visually without a framework?

Almost every visual editor on the market starts by asking which framework or content backend you are on, which is why the standard advice to someone with a hand-written HTML site is to rewrite it as components first. That advice is backwards for this case: a static site is the easiest thing in the world to edit precisely, because the document the browser renders is the file on disk — there is no compile step in which the connection could be lost. PortBay uses that directly. It serves your folder at a real hostname with trusted HTTPS, maps the URL you are on back to the file under the doc root, and writes text, class and attribute changes into that exact file with your formatting intact. Page titles and meta descriptions go straight into the head. Pro, early access, opt-in under Settings.

Verified against the product, 2026-09-05.

In the app

A folder of HTML, served over HTTPS

acme-shop · Board6 cards3 agents online
Pending2
infra
Rate-limit the API
P1
Dark mode polish
P2
Todo2
auth
Add OAuth login
P0Claude Code0/3oauth-login
Auto-dispatching
implement OAuth on app.test
db
Migrate to Postgres
P1
In Progress1
Fix flaky checkout test
P0
Done2
Set up Mailpit inbox
P2
Seed demo data
P2
1/5 · AssignA card lands in Todo and @claude is mentioned

PortBay serves your folder at its own .test URL with trusted HTTPS and dispatches board cards into it. The visual editor edits that same site in your real browser — one live page at one breakpoint, not a multi-frame design canvas.

Walkthrough

Your first edit to an .html file

Three steps, because a static site needs no dev server and no instrumentation. Add the folder, turn the editor on, edit the page.

  1. Install PortBay and add your folder
  2. Turn the visual editor on
  3. Open Edit in browser and change the page

Install PortBay and add your folder

Homebrew installs the app and the bundled portbay CLI. Point it at the folder that holds your index.html. PortBay serves it at its own .test hostname over trusted HTTPS — no server to configure, no port to remember, and no build step introduced.

brew tap portbay-app/portbay && brew install --cask portbay

Turn 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. Everything else, including serving the site over HTTPS, is in the free app.

Settings › Account › Early Access

Open Edit in browser and change the page

The project's Visual editing section has one button. It opens your normal browser with the edit bar docked at the top, booting in Preview mode where the page stays fully interactive. Switch to Edit, double-click text to type into the live page, use the right rail for spacing, type and borders, then Save. The change lands in the .html file you are looking at.

https://mysite.test/about/
Without PortBay

The migration you were told you needed

The usual answer to "I want to edit my site visually" is a rewrite. It is worth pricing that against what you already have, because for a hand-written site the rewrite buys you a build step and a lockfile, and the editing was available without either.

This is the one stack where precision costs nothing to set up. Everywhere else PortBay has to add a source coordinate, because a template gets compiled before it reaches the browser. Here there is no compilation to survive.

Questions

Asked before downloading

Does my static HTML site need a build step, dev server or plugin for PortBay?

None of the three. PortBay serves the folder itself at a .test hostname with trusted HTTPS, and there is nothing to instrument because nothing is compiled. On a framework project PortBay has to add a source coordinate to the dev server it launches so an element can be traced back through the build; on a static site the browser is already showing you the file. Your folder is byte-identical before and after — the only files PortBay changes are the ones you deliberately edit.

How does PortBay know which static HTML file a page came from with no stamping?

The URL says so. A request for /about/ resolves to about/index.html under the doc root, /contact.html to contact.html, and paths containing .. or anything that is not .html or .htm are rejected outright. That file is searched first and it is trusted precisely because it is the exact document the browser rendered — no other candidate can be the source of what you clicked. Other HTML files under the doc root are searched only after it, so a shared phrase in a second page cannot win over the page you are actually on.

Can PortBay's visual editor move, wrap and delete static HTML without instrumentation?

Structural editing is where static HTML is at its strongest, with one caveat worth stating: structural editing is not one of the four write lanes PortBay's cross-stack parity test guards, so treat it as less hardened than text, attributes, classes and page settings. What makes it work well here is anchoring. A structural edit has to pin an element exactly, and the tiers that do it without a coordinate are a unique id in your source — HTML's own uniqueness contract, which cannot go stale the way a coordinate can — and the element's position among same-tag siblings, trusted only when the count in the browser exactly matches the count in the file. On a templated stack a loop breaks that count constantly. On a static page nothing loops, so the counts agree. The one structural operation that is refused outright is extracting an element into a component: on a .html page there is no component file to extract into, and PortBay says so by name rather than inventing a convention.

Can PortBay's visual editor edit the page title and meta description in static HTML?

Yes, straight into the head of the file. A plain HTML document has no router and no runtime head assembly — the title, the meta description, the canonical link and the Open Graph tags are elements in the file, so the panel reads them from there and writes them back there. This is one of the stacks where all four write lanes work: text, attributes, classes and page settings. The cross-stack parity test drives all four against a real static fixture and every one of them writes.

What if my HTML is generated into dist/ or _site/?

PortBay refuses to write into it, deliberately. A directory named dist, build, out, _site, public, .next, .output, .svelte-kit, .astro, .vercel or target is build output, and a change written there is erased by the next build — persistence that looks real and is not. If you have a generator, the file to edit is its source template — Hugo, Jekyll and Eleventy are each recognised as their own stack, with edits resolved against their layouts rather than their output. This page is about a site whose .html files are the thing you actually wrote.

My static HTML site repeats a list of items — do I have to hand-edit each one?

Not necessarily. A static project can carry content bindings: an attribute on the element names a collection and a field, either for the element's text or for one of its attributes, and PortBay fills those elements in the page it serves so the canvas shows what a visitor would see. A generate step then writes one output file per record with the values in it as real content. Both halves run on the server side on purpose — a client-side fill would keep the words out of the HTML and therefore out of the index. And the element keeps real content between its tags, so a file that has never been through a generate is a working page rather than a broken one.

Is PortBay's visual editor free for Static HTML, 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 it refuses outright 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 also one live page at one breakpoint at a time rather than a multi-frame infinite canvas. Serving your site over HTTPS at its own hostname is in the free, open-source app.

PortBay mascot — a friendly blue tugboat

Give your projects and your agents a real local home.

Download for macOS

Free & open source · macOS 11+ on Apple Silicon · Pro from $10/mo