Your queries are fine.Probably.
A database IDE that reads your SQL back to you, and says what is wrong with it. PostgreSQL, MySQL, SQLite and Redis.
- particles
- 140
- lines drawn
- 0
- insights
- 0
- relevance
- 0.00%
It complains at a volume you choose
Every finding is analysis, not a sentence. The wording is picked when it is shown, so turning the dial re-words the same finding and never re-analyses. This is one gripe — a join with no condition — at all four levels.
This join has no condition. That is a cross product.
This join has no condition. I'll allow it. I won't forget it.
No join condition. You've asked for every row times every row. Absolute state of this.
NO JOIN CONDITION. Every row. Times every row. I want you to sit and think about what that number is.
Gripes criticise the query, never the person who wrote it. Anything you disagree with is dismissable for that occurrence, that table, or the whole project — and it always tells you it is hiding something. How the dial works.
Eighteen rules, none about formatting
A rule earns its place by knowing something the query text does not say, or by being about damage rather than tidiness. Style filler is a formatter's job, and the fastest way to get the whole thing switched off.
routine.definer-no-search-path
Security definer, no search_path. Anyone who can add a schema owns this.
column.nullable-inequality
status can be null, and null is not <> anything. Those rows vanish here.
view.select-star
The star in this view is expanded once, at creation. New columns never appear.
It is also a database IDE
The complaining is the part with a name on it. The other nine tenths is the tool you would have opened anyway.
Editor
Movable tabs and splits, one model per document, drafts and layout recovered across reloads.
Query execution
Run a selection, the statement at the cursor, or the whole file. Streamed results, reliable cancellation, CSV and JSON out.
Table view
Sort, filter, page, edit cells, insert and delete rows. A side panel for the JSON column you cannot read in a grid.
Object view
Columns, indexes, constraints, triggers, grants, statistics and DDL from one catalog call. Column edits show you the SQL first.
Four engines, honestly
Each adapter declares what it can actually do. SQLite's narrow ALTER is reflected in the UI rather than failing at runtime.
Shared, if you want
Workspace files, presence, follow mode, and queries other people ran — each under their own identity, with an audit trail.
The complete surface, including the parts with no banner, is what it can do.
Run it in about twenty seconds
Nothing to install, no Docker, no accounts, no configuration. It starts its own PostgreSQL and opens without a login.
Then open localhost:3001. The npx version works with no Bun on the machine — it fetches one, because the server runs on it. Or download the desktop app: the same thing in a window.
ghcr.io/datagripe/datagripe
The same server, a PostgreSQL you own, accounts switched on. The first person to open it creates the first account; after that signup is closed until you say otherwise.
Compose, Helm and plain manifests too — the
deployment guide has all four, and
every setting, starting with the one
nothing can guess for you: WEB_ORIGIN, the exact origin
browsers use.
Every page here is also a file
Append .md to any URL and you get that page as
Markdown, with links to every other page. No scraping, no
rendering, no JavaScript. The whole site is indexed in
/llms.txt, and /llms-full.txt is all of
it in one request.
DataGripe itself speaks MCP: a project can expose an endpoint an agent connects to, read-only until an owner says otherwise, with every call in the history under the token's name.
What a 0.0.x means
It works and it is tested. Nothing in it is promised to stay put, and it keeps its own list of what is wrong with it — in the same voice it uses on your schema.
Gripes stop at the query text. Nothing yet complains about how a query actually turned out.
The danger zone states real consequences and then does nothing. Truncate and drop are decoration.
All of them — accepted, unscheduled, unfiled, and the ones deliberately declined, which stay on the page because the reason something was refused is the useful part. What has shipped is in the release notes.