# Specifications

20 specifications, rendered from `docs/spec` in the repository.
Each records what a subsystem does, what it deliberately does not, and
which alternatives were rejected and why.

> Engineering documents, not user documentation. For using DataGripe,
> read [the documentation](/docs.md).

## Current

- [Access report](/specs/access-report.md) — Answer one question for a whole datasource at once: what can each role actually do? Not what was granted — what is reachable, once PUBLIC, role inheritance, ownership, schema USAGE, SECURITY DEFINER and view ownership have all been resolved. *(phase 13)*
- [Database adapters](/specs/adapters.md) — MySQL, SQLite, and Redis sit beside PostgreSQL behind the adapter boundary. *(phase 5)*
- [Authentication, authorization, and hardening](/specs/auth-and-hardening.md) — Every request is authenticated and workspace-authorized; credentials and targets are protected by session, CSRF, SSRF, and rate-limit controls that match the self-hosted deployment model. *(phase 4)*
- [Connection sources](/specs/connection-sources.md) — Connections are managed like DataGrip data sources: first-class, named, testable objects the user adds and organizes — not a deployment detail. *(phase 2)*
- [Connections and schema explorer](/specs/connections.md) — A user can save a PostgreSQL connection with an encrypted password, test it, and lazily browse schemas, tables, views, and columns — without the password ever leaving server memory or appearing in any client payload. *(phase 2)*
- [Datasource paths](/specs/datasource-paths.md) — A database does not arrive out of nowhere. *(phase 12)*
- [Domains](/specs/domains.md) — A schema is a flat pile of objects; a database is not. *(phase 12)*
- [Editor workspace](/specs/editor-workspace.md) — An IDE-grade editor shell in the browser: many SQL documents open at once, tabs that move between groups, horizontal/vertical splits, and no lost changes across tab switches, splits, reloads, or browser crashes. *(phase 1)*
- [Git datasources](/specs/git-datasources.md) — docs/spec/datasource-paths.md got DataGripe as far as seeing the checkout: you name a directory, it becomes a sidebar section, files open and save back. *(phase 14)*
- [Markdown documents](/specs/markdown-documents.md) — docs/spec/datasource-paths.md shipped with a wart it named out loud: a .md opened out of a datasource path gets SQL highlighting, "and the fix is a language field on the document rather than anything here". *(phase 14)*
- [MCP server](/specs/mcp.md) — Every project speaks MCP, so an agent working on the project's code can ask the project's own database questions — and read the project's own explanation of it. *(phase 15)*
- [Multiplayer](/specs/multiplayer.md) — DataGripe is multiplayer. *(phase 6 (post-MVP))*
- [Object view](/specs/object-view.md) — The ⊞ affordance, or any structure entry in the tree's context menu, opens one object's structure as an editor tab. *(phase 9)*
- [Roles and permissions](/specs/permissions.md) — Three ranks answered one question — can this person edit — and the questions people actually have are narrower and do not nest. *(phase 20)*
- [Query execution](/specs/query-execution.md) — Run SQL from the editor — a selection, the statement at the cursor, or a whole document — with server-enforced limits, reliable cancellation, live result streaming into a data grid, and an auditable history record for every execution. *(phase 3)*
- [Repository commands](/specs/repo-commands.md) — A datasource that comes from a repository can bring its own directories, its own domains and its own sync target. *(phase 14)*
- [Table view](/specs/table-view.md) — Double-clicking a table or view in the tree opens its rows as an editor tab and lets you work with them: browse, sort, filter, page, export, inspect and edit a large value, edit a cell, insert a row, delete a row. *(phase 8)*
- [Versions, updates and the account menu](/specs/updates.md) — Somebody running DataGripe should be able to answer three questions without leaving it: what am I running, is there anything newer, and what do I do about it. *(phase 19)*
- [Workspaces](/specs/workspaces.md) — The workspace IS the project: a named container with its own members, connections, shared files, history, and default target connection. *(phase 7)*

## Draft

- [Gripes engine](/specs/gripes.md) — DataGripe notices things about your query and your schema, and says so — accurately, specifically, and rudely. *(phase 11 (planned))*
