Skip to content

Repository files navigation

goopher sitebrush

SiteBrush

Keep the website. Retire WordPress.
Turn an existing website into editable static HTML without rebuilding its design.

Try your website · Live demo · Download · Install

Go Reference Security Code coverage BSD-2-Clause License Stable Release

Static HTML One binary Browser editing


What is SiteBrush?

A lot of websites still run WordPress simply because somebody occasionally needs to change a phone number, image, paragraph, menu item, or address.

SiteBrush takes a different approach.

It imports the website you already have and preserves its:

  • pages
  • design
  • CSS
  • JavaScript
  • images
  • other referenced assets

Visitors then receive ordinary static files.

HTML
CSS
JavaScript
images

The site owner can still edit the website directly in the browser.

SiteBrush is not a WordPress clone. It is a WordPress backup and retirement tool.


Before and after

Before

WordPress
├── PHP
├── database
├── plugins
├── themes
├── public login
└── admin backend

After SiteBrush

Website
├── HTML
├── CSS
├── JavaScript
└── images

Same website. Same design. Still editable.

Nothing connected to the Internet is completely invulnerable, but a static public website exposes far fewer moving parts than a traditional dynamic CMS.


Try it on your own website

You do not need to rebuild your site to see whether SiteBrush works for it.

Try SiteBrush with your own website

SiteBrush creates a separate copy for testing. Your live website is not changed.

Or open the:

Live demo


How it works

1. Import

Give SiteBrush an existing website.

It follows the pages and referenced resources and imports the files the site needs.

2. Edit

Open the website normally.

  • Desktop: right-click an element
  • Phone or tablet: long-press

Edit text, pictures, buttons, menus, page blocks, or HTML.

3. Publish

Prepare changes without disturbing the version visitors are currently seeing.

Publish when everything is ready.

Visitors continue receiving ordinary static files.


Why SiteBrush?

SiteBrush is useful when a website still needs editing but no longer needs a large dynamic CMS behind every page request.

It can help you:

  • preserve an existing design instead of rebuilding the website
  • remove WordPress from the visitor-facing side
  • remove the public PHP/database/plugin stack
  • reduce ongoing maintenance
  • edit content directly on the page
  • prepare changes separately before publishing them
  • run the server as one standalone binary
  • import WordPress, Joomla, Wix, Readymag, custom sites, and ordinary static websites

SiteBrush Templates

Static sites are simple, but repeated content can become annoying to maintain.

Imagine a website with 200 pages that all contain the same address in the footer.

Mark that element as a SiteBrush template:

<div class="SiteBrush-Template FooterAddress">
    123 Main Street, New York, NY 10001
</div>

SiteBrush finds matching elements on the other pages and assigns the same template to them.

From then on:

edit once → update everywhere

Templates are useful for:

  • headers
  • footers
  • menus
  • sidebars
  • contact information
  • tables
  • shared <style> blocks
  • other repeated elements

Changes are stored in revisions, so previous versions can be restored.


Automatic Import

When SiteBrush imports a website, it follows references and automatically imports the files the site uses:

  • CSS
  • JavaScript
  • images
  • other referenced assets

That means you can take an existing site and start editing it without first rebuilding it around SiteBrush.

The result remains ordinary static HTML.


Best suited for

SiteBrush works especially well for:

  • old WordPress websites
  • business websites
  • landing pages
  • portfolios
  • agency client websites
  • documentation
  • knowledge bases
  • mostly static websites that still need simple browser editing

SiteBrush is not trying to replace every CMS.

It is for websites that no longer need one.


Downloads

The server version is recommended for a public website. Desktop builds are useful for local work with a graphical interface.

Platform Desktop application Server binary
Linux amd64 GTK 4.1 · GTK 4.0
arm64 GTK 4.1 · GTK 4.0
amd64 · arm64
macOS Universal DMG Intel amd64 · Apple Silicon arm64
Windows amd64 ZIP · arm64 ZIP amd64 EXE · arm64 EXE
FreeBSD — amd64 · arm64
OpenBSD — amd64 · arm64
NetBSD — amd64 · arm64

Linux desktop builds use GTK 4.1 for newer distributions and GTK 4.0 for older LTS distributions.

Server checksums · Desktop checksums · All latest builds

Install the server version

Each block below is ready to copy and paste. It automatically selects amd64 or arm64, downloads SiteBrush, makes it executable, and installs the system service.

Linux Linux — copy and paste into the terminal
(
  set -eu

  case "$(uname -m)" in
    x86_64|amd64) ARCH="amd64" ;;
    aarch64|arm64) ARCH="arm64" ;;
    *) echo "Unsupported CPU architecture: $(uname -m)" >&2; exit 1 ;;
  esac

  sudo mkdir -p /usr/local/bin
  sudo curl -fL \
    "https://sitebrush.com/download/latest/server-app/sitebrush_linux_${ARCH}" \
    -o /usr/local/bin/sitebrush
  sudo chmod +x /usr/local/bin/sitebrush
  sudo /usr/local/bin/sitebrush -install
)

The installer detects the available Linux service manager and configures automatic startup.

macOS macOS — Intel and Apple Silicon
(
  set -eu

  case "$(uname -m)" in
    x86_64|amd64) ARCH="amd64" ;;
    arm64|aarch64) ARCH="arm64" ;;
    *) echo "Unsupported CPU architecture: $(uname -m)" >&2; exit 1 ;;
  esac

  sudo mkdir -p /usr/local/bin
  sudo curl -fL \
    "https://sitebrush.com/download/latest/server-app/sitebrush_darwin_${ARCH}" \
    -o /usr/local/bin/sitebrush
  sudo chmod +x /usr/local/bin/sitebrush
  sudo /usr/local/bin/sitebrush -install
)

The installer configures SiteBrush as a launchd service.

Windows Windows — PowerShell as Administrator

Open PowerShell as Administrator, then paste:

$ErrorActionPreference = "Stop"

$Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") {
    "amd64"
} elseif ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") {
    "arm64"
} else {
    throw "Unsupported CPU architecture: $env:PROCESSOR_ARCHITECTURE"
}

$Dir = Join-Path $env:ProgramFiles "sitebrush"
$Exe = Join-Path $Dir "sitebrush.exe"

New-Item -ItemType Directory -Force -Path $Dir | Out-Null

Invoke-WebRequest `
    -Uri "https://sitebrush.com/download/latest/server-app/sitebrush_windows_${Arch}.exe" `
    -OutFile $Exe

& $Exe -install

The installer creates and verifies the Windows service and enables automatic startup.

FreeBSD FreeBSD — amd64 and arm64
(
  set -eu

  case "$(uname -m)" in
    x86_64|amd64) ARCH="amd64" ;;
    aarch64|arm64) ARCH="arm64" ;;
    *) echo "Unsupported CPU architecture: $(uname -m)" >&2; exit 1 ;;
  esac

  sudo mkdir -p /usr/local/bin
  sudo fetch \
    -o /usr/local/bin/sitebrush \
    "https://sitebrush.com/download/latest/server-app/sitebrush_freebsd_${ARCH}"
  sudo chmod +x /usr/local/bin/sitebrush
  sudo /usr/local/bin/sitebrush -install
)
OpenBSD OpenBSD — amd64 and arm64
(
  set -eu

  case "$(uname -m)" in
    x86_64|amd64) ARCH="amd64" ;;
    aarch64|arm64) ARCH="arm64" ;;
    *) echo "Unsupported CPU architecture: $(uname -m)" >&2; exit 1 ;;
  esac

  doas mkdir -p /usr/local/bin
  doas ftp \
    -o /usr/local/bin/sitebrush \
    "https://sitebrush.com/download/latest/server-app/sitebrush_openbsd_${ARCH}"
  doas chmod +x /usr/local/bin/sitebrush
  doas /usr/local/bin/sitebrush -install
)

Run the commands as root when doas is not configured.

NetBSD NetBSD — amd64 and arm64
(
  set -eu

  case "$(uname -m)" in
    x86_64|amd64) ARCH="amd64" ;;
    aarch64|arm64) ARCH="arm64" ;;
    *) echo "Unsupported CPU architecture: $(uname -m)" >&2; exit 1 ;;
  esac

  sudo mkdir -p /usr/local/bin
  sudo ftp \
    -o /usr/local/bin/sitebrush \
    "https://sitebrush.com/download/latest/server-app/sitebrush_netbsd_${ARCH}"
  sudo chmod +x /usr/local/bin/sitebrush
  sudo /usr/local/bin/sitebrush -install
)

Uninstall

The -uninstall command removes the configured system service.

Linux, macOS, FreeBSD, and NetBSD
sudo /usr/local/bin/sitebrush -uninstall
OpenBSD
doas /usr/local/bin/sitebrush -uninstall
Windows — PowerShell as Administrator
& "$env:ProgramFiles\sitebrush\sitebrush.exe" -uninstall

Start editing

After installation:

  1. Point the website domain to the server.
  2. Open the domain in a browser.
  3. Use right-click on a computer or long-press on a phone.
  4. Edit the content and save it.
http://your-domain.example

Project history

SiteBrush v2 is written in Go.

The original PHP implementation was developed publicly from 2021 and remains available in the SiteBrush v1 repository as the historical predecessor of the current project.


Keep the website. Keep the design. Keep simple browser editing.
Leave the database, plugin stack, public admin backend, and constant maintenance behind.

Try SiteBrush on your website · Live demo

Account confirmation and secure registration

Registration starts with an email address and a one-time email code; the initial form never accepts a password. Public HTTP confirmation waits for a trusted HTTPS certificate, checking every ten seconds. Only then does the confirmation form accept a new password and create the account/session. Opening an email link alone does not change an account. Direct loopback connections to localhost can set a password and sign in without email codes. Both a local host and a loopback transport peer are required; proxy headers disable this exception. Local sessions appear as 127.0.0.1 / localhost. Public test-drive links start on HTTP; no self-signed certificate is required.

New browser sessions require both the password and an email code, even from a previously recorded IP. Existing sessions survive VPN changes and travel, recording the new address. The profile lists addresses observed within 90 days and lets the owner remove an address and terminate sessions currently using it. Upgrading to this account schema invalidates legacy sessions once. Recovery and email changes revoke existing sessions and address history.

Codes expire after 15 minutes, allow five attempts, and resending replaces older codes. Requests have a 60-second cooldown and a maximum of three per 15-minute account/IP window. Account emails include the domain, purpose, original request IP/time, expiry, and a form link. Code fields support autocomplete="one-time-code"; autofill availability depends on the device/mail client. Mail links to code forms prefill the code through a URL fragment, which is removed from browser history and is not sent in HTTP requests. Login links submit their one-time code automatically. Account changes still require explicit confirmation. Email codes remain selectable text.

SITEBRUSH_TRUSTED_PROXIES accepts comma-separated IP addresses or CIDRs for account IP attribution. By default only loopback proxies are trusted. Forwarded addresses from other peers are ignored; an unavailable client IP is never stored as a trusted address. Configure this list to match the actual reverse proxies.

Releases

Used by

Contributors

Languages