In Vanna AI
You already have a production database with curated schema documentation.
Open-source text-to-SQL trained on your schema and prior queries.
Comparison
Pick Vanna if you have an existing database and want an OSS layer that translates English into SQL against it. Pick nlqdb if you also want the database itself — provisioned, schema-managed, and queryable via SDK / CLI / MCP from day one.
The same goal, two ways.
> monthly revenue trend for the last 12 months
In Vanna AI
You already have a production database with curated schema documentation.
Open-source text-to-SQL trained on your schema and prior queries.
In your HTML
<nlq-data goal="monthly revenue trend for the last 12 months"></nlq-data> A reporting question Vanna would translate; nlqdb both translates it and owns the data it answers from.
What's different
| Dimension | nlqdb | Vanna AI | Note |
|---|---|---|---|
| Owns the database (provisions + migrates) | |||
| Natural-language → SQL | |||
| Auto-migration via NL ('add a column for tags') | |||
| Trained on your prior queries (RAG over query history) | nlqdb caches plans per (goal-fingerprint, schema-hash); Vanna's training loop is more explicit. |
| Dimension | nlqdb | Vanna AI | Note |
|---|---|---|---|
| HTML embed element | |||
| MCP server | |||
| Destructive-op diff preview | |||
| Multi-engine (Postgres + ClickHouse + …) | Vanna routes across many SQL dialects; nlqdb Phase 1 is Postgres, ClickHouse Phase 2. | ||
| Open source | |||
| Self-hostable |
shipped · partial · not shipped
No sign-in. The anonymous database lasts 72 hours; adopt it with one click if you keep it.
Start with a goal →The error has been recorded. Reload to recover; if it persists, sign out and back in.