FOSS · Self-Hosted · MIT Licence
askLenny

Ask your databases anything.

Integrates with AI to understand your schema, generate accurate SQL, and return real results. Entirely within your own network perimeter. Nothing Leaves.

terminal
docker compose up -d
💬

Ask in plain English, get real results

Type a natural-language question. askLenny finds the relevant tables, generates dialect-correct SQL, executes it, and returns the actual data. All in a single trip.

🔒

Three containers, your infrastructure

React frontend, Python app layer, and a custom Rust graph engine each run in their own container. Source databases are only ever touched by the app layer, inside your network.

🏢

Protect your data

SQL execution happens server-side. Integrate with your corporate AI or with a self hosted model to ensure data never leaves your perimeter

Process

Three steps, then ask anything

askLenny maps your schema once, enriches it with AI context, and answers every question — returning actual data — from its on-premise graph engine.

01

Connect

Point askLenny at all of your databases with a simple YAML file during deployment. Passwords remain in environment variables only and are never exposed to the user.

02

Discover & enrich

The layers work in unison to discover your schema and present an easy to use dashboard to label your data. Use AI to generate plain-English descriptions for every table and column. Semantic embeddings make every question answerable.

03

Ask anything, see results

Type a question. askLenny returns the SQL and the data. The Python app executes the query against your database, your data never leave your network.

Architecture

Three containers.
One network boundary.

Frontend, Python app, and Rust graph engine each run in their own Docker container. They communicate only with each other over an internal Docker network — nothing is exposed unless you explicitly choose to allow it.

The only optional outbound connection is from the Python container to your chosen LLM endpoint. Point it at a self-hosted model and zero bytes leave your perimeter.

Explore the architecture →
Docker Network
ReactFrontend
:5173exposed
↓ HTTP (internal)
PythonApp Layer
:8000internal API
↓ HTTP (internal)
RustGraph Engine
:3030internal only
↓ mmap
nodes.datedges.datstrings.datvectors.dat
→ LLM API (Python only, configurable)→ Source DBs (Python only)
Query Flow

Question in. Data out.

One natural-language question triggers a complete pipeline that returns SQL and real results.

You type"Show total revenue by region for Q3 2024"
EmbeddingQuestion → 1536-dim vector
Vector searchRust engine → top-5 schema matches by cosine similarity
Graph traversalBFS → tables, columns, dialect assembled as context
LLM callSchema context + question → SQL generation
SQL generatedSELECT region, SUM(revenue) FROM orders…
Query executedPython app runs SQL against your database
Results shown[{region: "EMEA", revenue: 4200000}, {region: "APAC"…}]
🏢

Built for environments where data cannot leave

The Rust engine never touches your databases. The Python app executes queries but results go only to the user's browser. Point the LLM endpoint at a local model and not a single byte crosses your perimeter. askLenny meets the needs of regulated industries, government, and any organisation with strict data residency requirements.

Security details →

Connects to

SQL ServerAzure SQLPostgreSQLMySQLSnowflakeOracle

Ready to deploy?

Three containers. Your infrastructure. Real results. Nothing leaves.

terminal
docker compose up -d