Drizzle ORM ClickHouse

Looking for Drizzle ORM on ClickHouse?

Drizzle does not support ClickHouse. If what you want is the part people actually like about Drizzle — generated types, predictable query code, and a good TypeScript workflow — hypequery is the closer fit for ClickHouse.

ClickHouse support

hypequery native

Type source

Generated from live schema

Best fit

Analytics-heavy TypeScript apps

Drizzle is built around transactional databases

Drizzle is excellent for Postgres, MySQL, and SQLite. ClickHouse is columnar, append-optimised, and built for large scans and aggregations rather than row-level relational workflows.

ClickHouse runtime types need their own mapping rules

DateTime values come back as strings, UInt64 values come back as strings, and nullable semantics differ from common ORM assumptions. Hand-maintained interfaces drift fast.

Analytics teams usually need more than a query builder

Once ClickHouse powers app features, dashboards, or APIs, teams usually need reusable query definitions and a stable delivery path as well as local query composition.

What to use

Use hypequery as the ClickHouse-native TypeScript layer

hypequery gives you the part of the Drizzle experience that matters for ClickHouse: types that come from the database, fluent queries in TypeScript, and a path to reuse those queries across scripts, APIs, and frontend code.

  • Generate TypeScript types from your live ClickHouse schema
  • Use a composable query builder with ClickHouse-aware helpers and raw SQL escape hatches
  • Keep runtime types accurate: DateTime, UInt64, Decimal, Nullable
  • Promote queries into typed REST endpoints and OpenAPI docs when they need to be shared
  • Use React hooks on top of the same query contract when dashboards need the same data

Step 1

Generate types from the real schema

what-to-use.ts

This is the key difference from generic TypeScript builders. The schema comes from the live ClickHouse database, so the generated types follow actual runtime behaviour rather than relational assumptions.

Step 2

Write typed ClickHouse queries in application code

The query builder stays close to SQL where that helps, but it gives you typed table names, typed column names, and reusable query composition in regular TypeScript.

If your team already uses Drizzle for Postgres and is adding ClickHouse for analytics, the clean split is usually Drizzle for transactional data and hypequery for ClickHouse.

That avoids forcing a relational abstraction onto an analytics database while keeping a familiar TypeScript workflow on both sides.

Step 2

Query ClickHouse with generated types

step-2.ts

A typical analytics query uses ClickHouse functions, aggregation, and grouping. This is where a ClickHouse-specific builder is more valuable than a generic ORM abstraction.

Where teams usually get stuck

The questions this page should answer

Does Drizzle support ClickHouse?

No. Drizzle does not support ClickHouse. If you need a TypeScript-first workflow for ClickHouse, hypequery is the direct alternative.

Drizzle alternative for ClickHouse

The closer fit is a schema-generated ClickHouse query layer, not a relational ORM. hypequery gives you generated types, fluent queries, and typed APIs around ClickHouse.

Type-safe ClickHouse queries in TypeScript

The practical problem is not ORM branding. It is getting correct runtime types and reusable queries without hand-written interfaces. That is the gap hypequery closes.

Use Drizzle with Postgres and ClickHouse together

A common architecture is Drizzle for transactional Postgres data and hypequery for ClickHouse analytics. Each tool stays in the database shape it was built for.

Next step

Generate your ClickHouse schema types and prove the workflow on one real query

That is the fastest way to evaluate whether hypequery covers the Drizzle-style ClickHouse workflow your team actually wants.