AI-native, zero-config data console for your Postgres, MySQL & MongoDB fleet.

Point Lizard at one or many databases — mix engines freely — and get an auto-generated CRUD UI, natural-language querying, and prompt-driven charts across the fleet. 100% self-hosted, zero schema pollution.

No SaaS Data Exposure Zero Schema Pollution Cross-DB Virtual Relationships
localhost:3111
WHY LIZARD

Built for engineering teams who demand complete control

Stop sacrificing data privacy to SaaS tools or cluttering production databases with vendor tables.

vs. Directus & NocoDB

Zero Schema Pollution & True Multi-Engine

Lizard keeps all metadata completely isolated in its own local SQLite store and connects to Postgres, MySQL, and MongoDB side by side.

Directus injects directus_* system tables into your production database schema
NocoDB and Airtable clones isolate you to one database type per project
Lizard never issues DDL or leaves a trace in target databases
Lizard declares virtual relationships across connections and engines, no DB changes required
vs. Forest Admin & Retool Cloud

100% Self-Hosted — Zero SaaS Data Exposure

Your database credentials, query results, and generated SQL never pass through a third-party SaaS proxy.

Retool Cloud & Forest Admin route database queries through vendor infrastructure
Exposes credentials and query data to third-party outages and compliance risk
Lizard runs entirely inside your own network boundary — you run the process
Database passwords are encrypted at rest (AES-256-GCM) in Lizard’s own metadata store
CORE CAPABILITIES

Everything engineering teams need in one admin console

Purpose-built to inspect, edit, relate, and visualize microservice data without writing custom internal tools or compromising database security.

Postgres · MySQL · Mongo

Multi-Engine Connections

Connect Postgres, MySQL, and MongoDB databases side by side in one console — mix engines freely across one or many services.

Feature 01Learn more
Auto-Generated UI

Schema-Driven CRUD

Auto-generates a browsable, editable UI from schema introspection alone — filters, search, and inline record editing, with zero configuration.

Feature 02Learn more
Cross-Engine Virtual FKs

Cross-DB Virtual Relationships

Declare virtual foreign keys between tables across different connections or engines — no DB constraints added, no DDL ever written to your databases.

Feature 03Learn more
Versioned · Table · Chart · Kanban

Charts & Dashboards

Save any result as a dashboard block — one query plus how to read it, switchable between table, chart, kanban, and gallery. Panel edits are a draft until you hit Save, which snapshots a restorable version, and each panel may pull from a different database.

Feature 04Learn more
Teams · RBAC · Audit Log

Teams, RBAC & Audit Trail

Grant a connection to a team once instead of person by person — members inherit read/write access automatically. Admin/editor/viewer roles, private/team/everyone dashboard sharing, and an audit log of every query and write with tiered, configurable retention.

Feature 05Learn more
Guarded AI Exploration

AI Natural-Language Querying

Ask a question in plain English. An on-demand agent (Claude by default — OpenAI and Gemini also supported) explores only the tables it needs, streams its progress live, and can be stopped mid-run. The SQL is always shown and editable.

Feature 06Learn more
SIMPLE 3-STEP FLOW

From a database URI to a full admin console in minutes

No manifest files, no code generation. Lizard derives everything from your live schema.

01

Run Lizard, add your databases

Set two required env vars and start the server, then register connections in Settings — Postgres, MySQL, and MongoDB side by side.

Zero database pollution — Lizard never writes DDL to your databases.
npm install
export LIZARD_ENCRYPTION_KEY=$(openssl rand -base64 32)
export ANTHROPIC_API_KEY=sk-ant-...
npm run dev   # → http://localhost:3111
Step 01 of 03
02

Lizard introspects the schema

Auto-detects tables, types, and constraints. Declare virtual foreign keys to link tables that live in different microservice databases.

Real FKs are used automatically; virtual FKs are the only way a cross-database join is allowed.
// Declared in the table "Customize" panel
orders.customer_id
  → users_service.public.customers.id
Step 02 of 03
03

Browse, edit, relate & ask

Get auto-generated CRUD grids, run natural-language queries with the generated SQL always visible, and pin charts to dashboards.

Every query and write is scoped to a read-only or write role and recorded in the audit log.
Prompt: "top 5 customers by revenue this quarter"
Agent explores: search_schema → describe_table → get_relations
Guard: read-only SELECT, verified → executed → chart rendered
Step 03 of 03
SEE IT IN ACTION

The console, screenshot by screenshot

Real product screenshots — the fastest way to know what you're actually running.

Data grid & CRUD

Browse, filter, and edit every table across every connected database — auto-generated from the schema.

AI query console

Ask a question, watch the agent explore the schema live, and review the generated SQL before it runs.

Charts & dashboards

One-click visualize a result, or describe a chart in words. Pin panels from different databases to one dashboard.

DASHBOARDS

A saved query should be a page, not a string

Saving a result gives you a dashboard: a page of blocks, where a block is one query plus how to read it. Switching between table, chart, kanban, and gallery never means rewriting the query — and each block can point at a different microservice database, or span several at once.

Variables live in the URL

Text, single- or multi-select, and date range. Multi-select has an optional "All" that means no filter, not every option expanded into an IN list. Wrap a clause in [[ ... ]] and it drops out of the query whenever the variable inside it is empty.

Grid or solo — your call

One block can fill the whole page instead of sitting in a grid cell, which is what a saved query or a kanban board actually is. Adding a second block promotes it to a grid automatically.

An optional date range

Enabled per dashboard rather than forced on every one — and wired to the same whole-day semantics as table filters.

Tags, search, and JSON export

The library stays navigable past a few dozen dashboards. Every dashboard is also a portable JSON document you can export, edit, or apply from elsewhere.

One block, four ways to read it

Table
Chart
Kanban
Gallery

Shareable state

/dashboards/revenue?region=emea&datetime.from=2026-01-01&datetime.to=2026-01-31

No time on either end, so the range runs from the start of 1 Jan to the end of 31 Jan — in your timezone, not the server's.

Duplicate as save-as · full-screen panel editor, English or SQL · a solo block fills the whole page, no grid chrome · import/export the whole thing as JSON.
DATES & TIMEZONES

"Yesterday" is a different set of rows in Berlin

A date means the whole day

Timestamp filters have a date picker and a separate, optional time picker. Leave the time blank and "= 1 Jan" means all of 1 Jan; a between-range runs from the start of the first day to the end of the last.

Your timezone, not the server's

The browser's IANA zone is validated server-side and applied as a session setting on the connection itself — Postgres, MySQL, and the federation engine alike. It is part of the cache key, so two zones never share a result.

Still an index seek

The whole-day expansion is a half-open range, not DATE(created_at) = …. Wrapping the column in a function makes the predicate unsargable and throws away the index — on a large table that is the difference between a seek and a full scan.

VIRTUAL RELATIONSHIPS

Stitch microservice boundaries seamlessly

Microservice databases have no real foreign keys between them. Lizard lets you declare those relationships virtually, in a per-table "Customize" panel — nothing is ever written to your production databases.

The only path to a cross-DB AI join

The AI never guesses a join across connections — a declared virtual relationship is required.

Powers cross-DB reference pickers

Linked columns render as searchable pickers and readable labels in the CRUD UI, not raw ids.

Example virtual relationship

orders_service (Postgres)

orders.customer_id

users_service (Postgres)

public.customers.id

Declared once in the "Customize" panel — then used everywhere: CRUD pickers, natural-language joins, and cross-database charts.
BUILT FOR A FLEET

A thousand databases, and nothing unbounded

The design assumption is a database per microservice, thousands of them. That rules out anything that walks the fleet — so every list, cache, fan-out, and pool has a ceiling.

explicit scope

No unscoped catalog

Introspection takes a list of connections and refuses an empty one — there is no "read the whole fleet's schema" call to make by accident. Global search is scoped the same way, by connection and table.

1,000 rows

No query without a bound

Hand-written, AI-generated, and federated queries alike run through one Guard with an enforced limit, a read-only transaction, and a server-side statement timeout — 30s for reads, 45s federated.

8 at a time

Bounded fan-out

Introspecting a thousand hosts in one tick is a thundering herd. Lizard walks them 8 at a time with a 20s budget each; a slow database becomes one failed entry, not a stalled request.

~400k columns

Cache bounded by columns

Counting columns instead of connections holds across fleet shapes — a hundred enormous schemas and ten thousand tiny ones settle at a similar footprint. Past its TTL the cache serves the last known schema instantly and refreshes behind you.

10 min idle

Pools that expire

Browsing five hundred databases used to leave five hundred live pools behind for the life of the process. Idle pools are now closed and forgotten, swept on access rather than on a timer.

20 per page

Pickers search, not scroll

An endpoint that fills a dropdown has no business shipping thousands of rows, so connection lists page (100 max) and every picker searches server-side.

SECURITY MODEL

The AI can generate SQL — it can never act outside the sandbox

Lizard is built so that letting an LLM near a live database doesn't mean handing it write access or an escape hatch.

Zero SaaS Data Exposure

Self-Hosted, You Run the Process

Deploy Lizard wherever your databases already live. There is no vendor proxy in the request path — database credentials and query results never leave your infrastructure.

Guarded AI Queries

Read-Only SQL Guard

Every AI, chart, and federated query is parsed and validated: single SELECT only. Multi-statements, DML/DDL, comments, and dangerous functions are rejected, a hard LIMIT is applied, and the query runs in a read-only transaction with a statement timeout. Verified by an adversarial test suite of 30+ injection vectors.

Two-Role Model

Least-Privilege Roles, Encrypted Credentials

AI/chart/browse queries run on a read-only lizard_read role; writes use a separate lizard_write role with parameterized queries only. Stored database passwords are encrypted at rest with AES-256-GCM.

Full Audit Log

Transparent Audit Trail

The generated SQL and the databases it touched are always shown, editable, and re-runnable. Every query and write is recorded in an audit log with configurable, tiered retention.

QUICKSTART

Self-host in minutes

Lizard is open source and designed to run entirely on your own infrastructure. No outbound database traffic ever leaves your servers.

Two required env vars, no config file to write by hand
State lives in a local SQLite file — no external metadata DB required
Anthropic by default; OpenAI and Gemini also supported for text-to-SQL
npm install
export LIZARD_ENCRYPTION_KEY=$(openssl rand -base64 32)   # required — encrypts stored DB passwords at rest
export ANTHROPIC_API_KEY=sk-ant-...                        # or set LIZARD_AI_PROVIDER=openai/google
npm run dev                                                 # → http://localhost:3111
OPEN SOURCE

Give your team instant data visibility without SaaS data risk

Self-host Lizard and inspect, edit, relate, and query your Postgres, MySQL, and MongoDB databases — on your own infrastructure.

100% Self-Hosted Open Source Zero DB Schema Pollution