Chat with sensitive documents. Your files stay local. You choose what the AI can see.
Regeste is an open-source, privacy-first document chat. Parsing, chunking, embeddings, vector search and chat history all run in your browser, so documents never leave your device. For each answer you pick a trust boundary:
- Private: an LLM runs on your device (WebGPU/WASM). Your documents and questions are never sent anywhere; the model weights are public files, downloaded once through this origin (so cross-origin isolation does not break the download) and cached by your browser.
- Assisted: only the retrieved excerpts are sent to a Cloudflare Worker (Workers AI), transiently, never stored. You see exactly what was sent ("What AI saw").
- My AI: bring your own endpoint (Ollama, LM Studio, vLLM, any OpenAI-compatible API).
Private and My AI need no server: the app is a static client. Assisted is the one mode with a backend (auth, quotas, the Workers AI call); it is off by default and only appears when a deployment sets PUBLIC_ASSISTED_ENABLED=true. Self-hosting Private + My AI needs none of the auth/database setup below.
Don't trust us. Inspect the code, self-host it, or keep everything local.
Try the hosted app: regeste.com.
The same walkthrough as video: English · French.
All three files live in docs/, so they play from a clone and are not shipped as
deployed assets.
SvelteKit (Svelte 5) · Tailwind CSS v4 · shadcn-svelte · Cloudflare Workers + D1 + Workers AI · better-auth · drizzle · valibot · SQLite WASM + sqlite-vec in the browser.
bun install # Bun 1.2 + Node 22 (.nvmrc)
cp .dev.vars.example .dev.vars
bun run db:migrate:local
bun run dev # vite dev with emulated Cloudflare bindings (enables Assisted locally)
bun run verify # typecheck + lint + test + buildThis repo is developed with AI coding agents; the agent harness lives in AGENTS.md, .agents/skills/ and .claude/. Humans and agents follow the same rules. See CONTRIBUTING.md.
- docs/constitution.md: non-negotiable principles
- docs/ARCHITECTURE.md: how the pieces fit together
- PROGRESS.md: current state and roadmap
- CONTRIBUTING.md: how to contribute (DCO, AI-assisted rules)
- SECURITY.md: reporting a vulnerability
- THIRD_PARTY_NOTICES.md: licenses of vendored components
Versions are cut automatically from main with semantic-release (Conventional Commits): a merge carrying a feat: or fix: commit produces a vX.Y.Z tag and a GitHub Release, the changelog is generated from the commit history, and that release is deployed to production. A docs-only merge ships no release. The version string is visible in the app, at the foot of the settings panel.
The tag is the version: nothing is ever tagged by hand, and package.json only
records what the last release decided. v0.1.0 is the single exception, set as
the starting point before the pipeline existed.
The project is on a pre-1.0 cadence (0.x), which SemVer reserves for
"anything may change at any time". A fix: bumps the patch (0.1.1), a
feat: bumps the minor (0.2.0), and a breaking change also bumps the minor
rather than jumping to 1.0.0. Graduating to 1.0.0 is an explicit maintainer
decision, taken when the API and the on-device schema are considered stable,
not a side effect of a commit message.
Contributions are welcome. Please read CONTRIBUTING.md
first: it covers the DCO, the verification gate and the rules for AI-assisted
contributions. All community interactions follow the
Code of Conduct. Looking for a place to start? Issues
labelled good first issue are a good entry point.
- Bugs and feature requests: open a GitHub issue (templates are provided; please never paste document content or personal data into an issue).
- Security: report privately via GitHub Security Advisories, see SECURITY.md.
AGPL-3.0-only. The app is free to use, self-host and modify; if you run a modified version as a service, you must publish your changes.
