Skip to content
DuckDB 1.5.5Isolated warehouse, pinned version

Warehouse speed.
Without the warehouse bill.

DuckHouse is managed DuckDB in the cloud. Launch a warehouse in one click, attach to it from any DuckDB client, and pause it when you are done. You pay for the minutes it runs and the bytes it stores.

Sample data

orders-prod

Running

Costing now

$0.0734

per hour, while it runs

Size

4 vCPU

2 GB RAM

Region

IAD

Ashburn, Virginia (US)

Storage

34.2 GB

DuckDB 1.5.5

Connection

ATTACH 'quack:orders-prod-8f21.fly.dev:9494' AS wh
-- From any DuckDB client: the CLI, a notebook, your laptop
INSTALL quack; LOAD quack;
ATTACH 'quack:orders-prod-8f21.fly.dev:9494' AS wh (TOKEN 'dh_…');

SELECT region,
       count(*)   AS orders,
       sum(total) AS revenue
FROM wh.orders
WHERE ordered_at >= DATE '2026-01-01'
GROUP BY ALL
ORDER BY revenue DESC;

Compute, last 24 hours

Metered every 5 minutes

Run up since you opened this page

$0.000000

Climbing at this warehouse’s hourly rate. Press Stop.

The real dashboard, drawn here with sample data. Stop a warehouse and watch what it costs.

Smallest warehouse, while running
$0.0117/hrSmallest warehouse, while running
Compute while paused
$0Compute while paused
Object storage per month, at cost
$0.02/GBObject storage per month, at cost
Regions to deploy in
23Regions to deploy in

Why DuckHouse

Most analytics fits on one good machine.

Distributed warehouses charge for coordination you rarely need. DuckHouse gives each workload a single fast DuckDB instance, and gets out of the way.

Fast

DuckDB’s columnar, vectorized engine on a machine that belongs to you alone. No shared cluster, no queue, no warm-up tax on every query.

  • Columnar, vectorized SQL execution
  • Up to 8 dedicated vCPUs and 16 GB
  • Spills to disk when memory runs out

Inexpensive

One right-sized machine costs a fraction of a distributed warehouse, and its compute costs nothing at all while it is paused.

  • Pause when idle: compute drops to $0
  • Storage at cost: $0.02/GB per month
  • No seats, no tiers, no minimum spend

Simple

If you know DuckDB you already know DuckHouse. There is no new query dialect, driver or client library to adopt.

  • One-click launch in 23 regions
  • One ATTACH statement to connect
  • Managed backups, upgrades and tokens

How it works

Three parts. Nothing to operate.

Every warehouse is its own virtual machine with its own storage bucket. You talk to it over DuckDB’s native client-server protocol; we keep it patched, backed up and online.

You

Any DuckDB client

Attach the warehouse like a local database. Join remote tables against local files in the same query.

  • duckdb CLI
  • Python
  • Node.js
  • Go

Compute

Your warehouse

One DuckDB process on a dedicated Fly.io machine, in the region you choose. Running only when you need it.

  • isolated VM
  • 1–8 vCPU
  • pinned version
  • pause / resume

Storage

Your bucket

A private bucket per warehouse holds its snapshots and backups. Storage is billed at cost and outlives the machine.

  • Tigris object storage
  • snapshots
  • backups
  • free egress

One interface, more engines coming

Every warehouse runs the DuckDB engine today. DuckLake is in the works and will speak the same protocol, so your queries will never need to know which one is underneath.

DuckDB

Available now

A single DuckDB database on fast local disk, snapshotted to object storage every five minutes.

  • Data sits on NVMe next to the CPU
  • Ideal for analysis projects and small-write workloads
  • An encrypted volume per warehouse, sized when you create it

DuckLake

Object storage

An open lakehouse: Parquet files in object storage, with a transactional DuckDB catalog saved beside them.

  • Stateless compute: stop, resize or replace it without moving data
  • Time travel and snapshots built in
  • Storage grows on its own at $0.02 per GB-month

Connections

Your data, already there.

Point DuckHouse at the tools you run on and it keeps a copy in your warehouse, on a schedule you choose. No pipelines to build, nothing to host.

  • PostgreSQL

    Any tables, incrementally

  • MySQL

    Any tables, incrementally

  • DuckDB

    Another DuckDB, over Quack

  • SFTP / FTP

    CSV drops, upserted by an ID column

  • Stripe

    Customers, invoices, charges, payouts

  • Shopify

    Orders, customers, products

  • Square

    Payments, orders, staff, catalog, inventory

  • QuickBooks Online

    Invoices, bills, payments, accounts

  • Google Analytics

    Daily traffic, pages, events

  • Umami

    Pageviews, events, daily visitors

  • Meta Ads

    Campaigns, ads, daily insights

  • Google Sheets

    Every tab becomes a table

  • Notion

    Databases and pages

  • GitHub

    Issues, pull requests, commits

  • Close

    Leads, opportunities, pipelines

one query, two sources
-- Return on ad spend, by day
WITH spend AS (
  SELECT date, sum(spend) AS ad_spend
  FROM meta_ads.ad_insights_daily
  GROUP BY date
), revenue AS (
  SELECT created_at::DATE AS date,
         sum(total_price) AS revenue
  FROM shopify.orders
  WHERE NOT test
  GROUP BY 1
)
SELECT date, ad_spend, revenue,
       round(revenue / nullif(ad_spend, 0), 2) AS roas
FROM spend JOIN revenue USING (date)
ORDER BY date DESC;

Every source lands in its own schema, with typed columns for the fields you reach for and the complete original record kept alongside, so nothing the source sends is lost.

Operations

The boring parts, handled.

Everything you would otherwise script around a DuckDB server is a button in the dashboard and an endpoint in the API.

Pause and resume

Stop a warehouse when the workday ends and the compute meter stops with it. Your data stays exactly where it is, ready for the next start.

Resize in place

Move between shared and dedicated CPUs as the workload changes. Scale up for the month-end crunch, back down the day after.

Upgrades on your terms

Every warehouse pins its DuckDB version. Upgrade manually, or set a policy and a maintenance window and let it happen while you sleep.

Scheduled backups

Hourly backups to object storage by default, kept for 30 days, with recovery points you can restore from. Change the schedule and retention per warehouse.

Scoped access tokens

Issue a named token per application or teammate. Set an expiry, see when each was last used, and revoke one without touching the rest.

Live metrics

CPU, memory and storage for every warehouse, so you know when to resize before your queries tell you.

Built-in SQL browser

Explore schemas and run queries from the dashboard. Handy for a quick look when a terminal is not.

Pricing

Know the bill before you get it.

Compute by the minute, storage by the gigabyte. Drag the sliders to see what your workload would cost, and what pausing saves.

Full pricing
Engine
Warehouse size

Shared CPU

Dedicated CPU

8 hrs / day
Paused8 hrs16 hrsAlways on
100 GB
10 GB500 GB

Estimated monthly cost

$42.35/ month

Compute · 243 hrs × $0.0734
$17.85
Storage · 100 GB
$24.50
Always on$78.05
Your schedule$42.35
Paused all month$24.50

Estimate only, excluding query-result egress. Storage covers a volume sized to your data (10 GB minimum) plus its snapshot in object storage. Usage is metered in five-minute increments.

FAQ

Questions, answered.

What exactly is DuckHouse?
A managed service for DuckDB. Each warehouse is a DuckDB server on its own virtual machine with its own object storage bucket. We provision it, secure it, back it up and keep it updated; you connect with the DuckDB client you already use and write the SQL you already know.
Why is it so much cheaper than a traditional warehouse?
Three reasons. DuckDB gets a remarkable amount of work out of a single machine, so there is no cluster to pay for. You can pause a warehouse whenever it is idle, which takes compute to zero. And storage is passed through at cost, with no egress fees from object storage.
What happens to my data when I pause a warehouse?
Nothing. The machine stops and compute billing stops with it, while your data stays on its volume and in your bucket. You keep paying for storage only. Start the warehouse again from the dashboard or the API and carry on where you left off.
How much data can a warehouse handle?
As much as fits on its volume, which today is 10 GB per warehouse. Queries larger than memory spill to local disk, so you are not limited to what fits in RAM. Larger volumes and an object-storage engine are on the way.
How is my data isolated and secured?
Warehouses never share a machine or a bucket. Connections are encrypted with TLS and authenticated with per-warehouse tokens that you can name, expire and revoke individually. The warehouse itself only ever stores SHA-256 digests of those tokens.
How do I get my data in?
Three ways. Connections keep a copy of your Postgres or MySQL tables and tools such as Stripe, Shopify, Square, Meta Ads, Notion and GitHub up to date on a schedule, with nothing for you to run. You can load files straight from your machine or from a URL with one SQL statement. And anything that can run DuckDB can write to your warehouse directly.
Which clients can connect?
Anything running DuckDB 1.5.3 or newer with the quack extension: the DuckDB CLI, Python, Node.js, Go and more. Attach the warehouse and its tables appear alongside your local ones.
Why does every warehouse pin a DuckDB version?
Quack, DuckDB’s client-server protocol, is still marked experimental upstream and does not promise compatibility across versions. So we never change the version under you: each warehouse stays on the release it was created with until you upgrade it, either by hand or through an update policy with a maintenance window.

Launch your first warehouse.

No contracts and no minimums. Pick a size and a region, attach from your terminal, and pause it whenever you like.