Hyperclay Local is a free, open-source desktop app that lets you create, modify, and use HTML files like local applications.
(Hyperclay Local taskbar app)
Anything that fits in a single HTML file and benefits from persistence:
An HTML file can do a lot: lay out any UI, run JavaScript and hook into any browser API, respond to input.
The one thing it can't do is remember. Refresh and everything resets.
A malleable HTML file saves itself. It serializes its DOM and sends it to a local server. No database, no build pipeline, no dependencies.
One file is a complete application:
Browsers can open HTML files but can't write back to disk. Hyperclay Local provides that missing piece: a local Express.js server with a single endpoint:
POST /save/:name
Point it at a folder, click start. Your malleable HTML files save themselves to disk. That's the entire system.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Notes</title>
<script src="https://cdn.jsdelivr.net/npm/hyperclayjs@1.24.3/src/hyperclay.js?preset=minimal&features=autosave" type="module"></script>
</head>
<body>
<h1 editmode:contenteditable>Notes</h1>
<p editmode:contenteditable>Start typing here. Everything saves to disk automatically.</p>
</body>
</html>
Core features of HyperclayJS:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Notes</title>
</head>
<body>
<h1 contenteditable>Notes</h1>
<p contenteditable>Start typing here. Everything saves to disk automatically.</p>
<script>
// This code handles saving the file whenever it changes
const name = document.cookie.match(/currentResource=([^;]+)/)?.[1]
const save = () => fetch('/save/' + name, {
method: 'POST',
headers: { 'Content-Type': 'text/html; charset=utf-8' },
body: '<!DOCTYPE html>\n' + document.documentElement.outerHTML
})
document.addEventListener('input', save)
new MutationObserver(save).observe(document, {
childList: true, subtree: true, attributes: true, characterData: true
})
</script>
</body>
</html>
/tailwindcss/{yourFileName}.css. The server generates optimized Tailwind CSS on every save — only the utilities you actually use.Free, no account required.
Source code: github.com/panphora/hyperclay-local
Your HTML file includes a small script that serializes the page's DOM and sends it via POST /save/:name to the local server. The server validates it and writes it to disk, saving a backup of the previous version in a sites-versions/ folder. HyperclayJS handles this for you — the minimal preset includes saving, snapshots, and edit mode out of the box.
AppImage files need to be marked as executable:
chmod +x HyperclayLocal-1.13.3.AppImage
The server binds to port 4321 by default. If another process is using that port, the app will show an error. Kill the other process or wait for it to release the port.
Check that:
Clone the repo and install dependencies:
git clone https://github.com/panphora/hyperclay-local.git cd hyperclay-local npm install
Development mode (live reload):
npm run dev
Build for your platform:
npm run build-mac # macOS npm run build-windows # Windows npm run build-linux # Linux npm run build-all # All platforms
The app uses several layers of protection:
The app is open source. You can audit the full codebase at github.com/panphora/hyperclay-local.
Most software asks you to be beholden to someone else's ideas.
Hyperclay Local lets you own the full stack in one HTML file.
DOM library for malleable HTML files
Desktop app for local development