Skip to main content

SQL, understood completely.

We read your SQL with full precision, and can give it back exactly as written — comments, casing, habits and all.

  • dfmt is our free formatter: 43 dialects, native dbt and Jinja, idempotent.
  • dquery is the foundation underneath it: a complete parser that gives every token back. Everything we build stands on it.

SQL dialects

43

Every common database, from one grammar.

Formatting errors

0

Over 28 361 dbt models and 36 193 SQL files.

Unstable layouts

0

format(format(x)) = format(x), at any width.

AST node types

7 235

Typed and immutable, generated per dialect.

The part you can see.

dfmt is the first product we shipped on what the parser reads. No trial, no signup. The easiest way to show you what is underneath is to let you format some SQL with it.

  • 43 dialects — Snowflake, BigQuery, PostgreSQL, T-SQL, Spark, DuckDB, and more
  • Native Jinja — templates go through a real Jinja engine, not a regex pass
  • Adaptive — keeps your line breaks where you put them, normalises the rest
  • Idempotent — format(format(x)) = format(x), always
  • 0 errors, 0 tokens lost — tested on 28,361 dbt models and 36,193 SQL files
What you wrote
select o.customer_id, count(*) as n,
sum(o.total) as revenue from orders o
join customers c on c.id=o.customer_id
where o.status in ('paid','shipped')
and o.created_at >= '2026-01-01'
group by o.customer_id order by revenue desc
Formatted with dfmt
SELECT
o.customer_id,
count(*) AS n,
sum(o.total) AS revenue
FROM orders o
JOIN customers c
ON c.id = o.customer_id
WHERE o.status IN ('paid', 'shipped')
AND o.created_at >= '2026-01-01'
GROUP BY o.customer_id
ORDER BY revenue DESC

And the part you cannot.

Laying that query out took a parse. The parse is where dquery starts: on the same tree it resolves every name, infers every type, and traces each column back to the physical table it came from. Here is what it reads in that same query — and what the rest of the family is built to answer.

SELECT
o.customer_id,bigint orders.customer_id
count(*) AS n,bigint derived, never null
sum(o.total) AS revenuenumeric(12,2) orders.total
FROM orders otable analytics.public.orders
JOIN customers ctable analytics.public.customers
ON c.id = o.customer_id
WHERE o.status IN ('paid', 'shipped')text 2 of 6 known values
GROUP BY o.customer_id

One understanding, every tool.

Each of these is a walk over the same reading of your SQL. Two of them you can use today; the rest are what we are building next.

Made with ❤️ in Oslo