Pane
Your website, open for business. Five pages and a contact inbox. Preview every change, publish, and roll back in one step. Pane is free and open source, under the MIT licence. Your installation stores the site and inbox in Cloudflare D1.
Guides
- Getting started: launch Pane and prepare your first pages.
- Preview, publish and restore: change your website with a preview first.
- Inbox and visits: read messages and understand page counts.
- Move in a site: review a site export and import it as a draft.
- Back up and restore: keep a private copy of your site and inbox.
- Work with your agent: prepare drafts through the authenticated helper.
Run from a clone
Use Node 22.20.0 and pnpm 10.12.4. Install rer once if it is not on PATH:
npx -y @runeditrun/rer cli install
git clone https://github.com/just-every/run-pane.git
cd run-pane
rer dev
rer dev installs the pinned dependencies, sets up a fresh local installation and
prints progress. Allow ten minutes on a fresh computer. A repeated invocation
resumes the same installation. Open its private RER_OPEN link to sign in as the
local owner, then confirm the owner at Finish setup. Keep that link private.
Development sends no external mail. Stop with rer dev --stop before building,
verification or export. rer dev --as admin and rer dev --as member provide local
role journeys; they do not grant access on a hosted install.
For an installation with your real mailbox, run rer install, then rer setup
and enter it at the prompt, then rer dev.
Do the first jobs
- Open your workspace at
/app. Start with your own five pages or copy the documented example from fixtures/static-site.json. The five route slugs arehome,about,services,hours,contact. The editor's Pages JSON field accepts the fixture's pages array, while the move-in form accepts the whole fixture. Page bodies are plain text; HTML is escaped. - Prepare a draft, follow its preview link, and inspect all five pages. The
owner chooses Approve & publish. Open
/siteto see the live version. Admins may prepare and preview; members may read the workspace. Only owners publish, roll back or erase inbox messages./auth/operatorsmanages invitations. - Send a message from the live Contact page. Return to the inbox at
/app. Messages stay in D1; there is no email forwarding. The visit totals count page views without cookies or visitor IDs, respect DNT/GPC, and are approximate (reloads count; bots can count). No IP address, user agent or referrer is stored. - Prepare a changed draft and preview it. Publish it, then choose Restore live on the earlier revision. Publishing and rollback records show the approving operator's ID, exact revision and time.
- Use Imports → Paste an export → Check import to review a whole static-site JSON export, and approve its fingerprint. It creates an unpublished draft. Undo it before publishing. See MOVE-IN.md for validation and conflict rules.
The first release is described in ACCEPTANCE.md.
Agent commands
Agents prepare; a person reviews the preview and approves publication. The API uses the same native session and server permissions as the forms. Store a session Cookie header in a private mode-0600 file, outside this checkout; never commit it. The helper does not read browser cookies or print credentials.
node scripts/pane.mjs status --origin http://127.0.0.1:8787 --session-file /private/path/session
node scripts/pane.mjs prepare --origin http://127.0.0.1:8787 --session-file /private/path/session --input fixtures/static-site.json
Use the origin printed by rer dev. status returns revision IDs; previews are
/preview/REVISION/home. The person publishes from the browser. Owner-authorized
publish --revision ID and rollback --revision ID use the same recorded approval
path. Other helper verbs: import-plan --input FILE, import-apply --input FILE --fingerprint HASH, import-undo --job ID, and erase --id ID.
Backup, restore and deploy
rer dev --stop
rer export --output /private/path/pane.rer
# In an empty destination with the same code and dependencies:
rer import --input /private/path/pane.rer --yes
rer dev
Archives contain customer data: keep them private. Local restore retains owner records;
rer dev opens a fresh local session and may ask you to confirm the owner again. Active sessions, local dev
identities, secrets and transient runtime state are excluded. To fence a backup
made before an erasure, supply the later archive from the same installation:
rer import --input OLD --journal LATER --yes. A backup containing erased rows
is refused. A fresh destination cannot know about an erasure without that later
journal. Do not reset the only copy of your data. rer reset --yes deletes local
state and settings.
Deployment uses your own RunEditRun Cloudflare account and the Base owner-account kit, never this repository's author credentials:
rer deploy --dry-run
rer deploy
rer signin
The dry run validates and builds without provider calls. For real deployment,
follow the credential/setup prompts and RUN-LOCALLY.md; provide
the account, Worker/D1 permissions, owner mailbox, session/setup secrets and a
verified mail sender. Replace the explicit auth@example.invalid deployment
mail setting with your verified sender before deploying. Commit reviewed source
before a real deploy. rer signin supplies the hosted owner's one-time sign-in
link if mail is not ready. The deployed Worker's /site is the business website.
Business-site custom domains are outside the current release. The separate public
run site includes the landing page, /run and these docs. It is published at
https://run-pane.com, and its run page is
https://run-pane.com/run. To see the same page from
a local checkout, use the local /run page on the RER_SITE address printed by
rer dev. The run-site deployment workflow stays disabled unless
RUN_SITE_DEPLOY is explicitly enabled.
Development
pnpm install --frozen-lockfile
pnpm run build
pnpm run typecheck
pnpm test
rer verify
Tests exercise the real Worker/D1 and native authentication through HTTP, plus backup/restore through Base's transfer transport. CI shards build/types and the product journey, then keeps the required Verify result. Build and deploy do not run tests. New clone/installer journeys belong on release tags and nightly. See PROVENANCE.md for Base and sibling source origins.