run-slate.com · Part of Just Every · MIT licensed
Watch the full demo · 50 seconds

Pages with mentions, page links and blocks that save as you write.

Databases with board, chart and automation views.
Slate is a self-hosted team wiki built with React, TanStack Start, Hono and Cloudflare Workers. The default core-wiki profile provides pages and containers, rich-text editing, comments, permissions, search, revision history, imports, and backup and restore. The public source repository is just-every/run-slate. Source publication does not establish product or provider acceptance.
Install Git and Node.js 22 or later to run rer. There is no Node or pnpm version to choose: the checkout pins Node.js 22.20.0 and pnpm 10.12.4, and rer fetches and uses exactly those for its commands.
One line installs rer, clones the public source repository and starts Slate:
npx -y @runeditrun/rer dev just-every/run-slateTo start it again later, run cd run-slate && rer dev. From the checkout, rer runs the @runeditrun/rer version pinned in package.json. In a fresh checkout rer dev alone installs the pinned dependencies, makes a placeholder local owner and starts Slate. To choose your own owner email, prepare it first:
rer install
rer setup --owner-email [email protected]
rer devUse your own email address. Setup prepares the local app, database and private settings, then exits with no app running. Running setup again preserves your settings, workspace and owner. Changing a saved owner or address requires explicit recovery or reset.
When Slate is ready, dev prints an RER_OPEN link. Open that link to sign in as the local owner; no email or outbox step is needed for this initial sign-in. Keep the link private. On first use, name the workspace and create its first space and page at /setup; later visits open your existing workspace. Local data lives in .wrangler/state; credentials stay out of production builds.
Local mail is silently suppressed; there is no local email outbox. A signed-in local owner can use Settings → Import & export → Export workspace without email confirmation. Hosted workspace export still requires a fresh email confirmation. Other sensitive operations retain their email confirmation requirement; use the CLI below for local backup and restore.
In a second terminal, stop dev before running the checks:
rer dev --stop
node_modules/.bin/playwright install chromium
rer verifyrer verify requires Playwright's Chromium for its production hydration check. Install it once after rer install using the checkout's command above; no global pnpm installation is needed.
rer build then rer preview serves a fixed production build. Dev supports Vite editing/HMR. Both reuse a compatible running instance, preserve the saved origin and native identity, and accept explicit loopback --host, --port, and --idle-timeout. Stop the active mode before changing modes. rer doctor reports missing local inputs without provider requests. rer check --profile first-party validates the command contract before dependencies or setup exist.
Stop dev or preview before moving local data. Export to a new private file:
rer export --output exports/installation.rerThe archive includes D1 facts and identity lineage plus retained FILES attachments and source import originals. Derived ZIP exports, deleted files and unreferenced staging objects are excluded. Session capabilities, provider credentials, local configuration and transient caches are excluded. Native agent credential metadata is retained as revoked records with erased digests and empty scopes; no agent token or usable digest moves. Restore into a fresh empty checkout before its first setup/sign-in. Copy the archive into that destination checkout's exports/ directory first, then run these commands from the destination root. --input must name a path contained in that checkout; paths into another checkout, including ../slate/exports/installation.rer, are refused:
rer import --input exports/installation.rer --yes
rer setup --owner-email [email protected]Re-enter the archived native owner's email. If the archive was taken while more than one person owned the workspace, import asks you to choose: run rer setup --owner-email with the owner's address first, then import. A member removed before the export stays removed. Fresh sign-in is required; restored automation, grants and effects require renewed owner authority. Existing workspace ZIP exports and the authenticated web restore API remain a separate native product flow. For hosted backups, save the deployed D1 database with npx wrangler d1 export DATABASE --remote --output exports/DATABASE.sql and separately copy every object from the deployed FILES R2 bucket; SQL alone does not preserve attachments. Slate also provides an authenticated workspace ZIP backup through Settings or node src/core/features/portability/command.mjs backup exports/hosted.zip, with the owner session and origin supplied privately. Follow Hosted backups for the exact inputs and restore drill. rer export / rer import are the local installation-archive path; provider SQL and native ZIP backups use their own restore procedures.
Reset lists its local removal inventory and requires explicit confirmation:
rer reset --yesIt removes local D1/R2/collaboration state, settings and installer drafts, preserving source, dependencies, owner exports and deployment receipts. Back up first. Reset refuses while another operation owns local state.
Managed hosting includes mail through Run Edit Run; you do not need a Resend or SendGrid account. Configure fills and hides MAIL_PROVIDER, MAIL_FROM, MAIL_RELAY_URL and MAIL_API_KEY, generating a private credential for the installation and environment. Slate uses Base's copied rer relay adapter. Free and Assisted hosting keep the options to use your own Resend or SendGrid account, key and verified sender. Local development suppresses mail and uses the printed one-click sign-in link.
Before deploying, set up a real Resend or SendGrid account and a verified sender. Hosted Slate signs you in by email, so SLATE_SETUP_OWNER_EMAIL must be a mailbox you can read. Supply CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN, SLATE_SETUP_OWNER_EMAIL, SLATE_MAIL_PROVIDER (resend or sendgrid), SLATE_MAIL_FROM (the verified sender) and SLATE_MAIL_API_KEY (that provider's API key) from your private vault or deployment environment. Rer generates the session secret on a first deploy. See OPERATIONS.md for all inputs. Validate and build locally first:
rer deploy --environment production --dry-run
rer deploy --environment productionDry run makes no provider request and cannot check mail delivery. The second command creates resources in your Cloudflare account, applies database updates, uploads secrets, deploys and checks health. After a healthy first deploy, rer claims SLATE_SETUP_OWNER_EMAIL as the owner and removes its one-time setup token. Open the printed address, request a sign-in email for that owner address and follow the link in your mailbox. You do not need a setup token. After signing in, name the workspace at /setup. A successful deployment alone does not prove that sign-in mail reaches your inbox.
To update a deployed wiki, export it first (see docs/INSTALL.md), then:
git pull --ff-only
rer deploy --environment productionTo remove a deployment and every resource rer created for it, including its data (export first):
rer deploy --environment production --remove --yesSource rer release --repo PATH --output PATH --clean-history validates and prepares a local export; it does not push, tag a public repository or deploy.
rer verify
pnpm verify:ci
pnpm test:imports
pnpm test:release-source
pnpm source:checkrer verify checks command contracts, generated Worker binding freshness, types, static contracts and boundaries, source integrity and the emitted build/artifact; it runs no test suites. It requires Chromium installed with node_modules/.bin/playwright install chromium after rer install. pnpm verify:ci runs those checks plus Slate's CI test suites, including identity mail, foundation, platform, profile, type-generation, portability and operations coverage. Push CI runs parallel shards; installer and README journeys run nightly and on release tags. Build and deploy commands do not run test suites. Planned contract clauses remain visible; a passing check does not imply full flagship acceptance. pnpm test:release-regressions separately exercises publication relocation, erasure and the emitted browser console using the same Chromium installation.
Advanced federation and inquiry code remains in the source under the explicit SLATE_PROFILE=flagship development profile. It is outside the core-wiki release acceptance. CONTRACT.md, ACCEPTANCE.md, and HANDOVER.md state requirements and current evidence limits. Slate is MIT licensed.

