Cut your Snowflake bill by 75%, without changing a query.

Melt is a proxy that sits in front of Snowflake and routes each query to the cheapest engine, right-sized compute, in real time. No code changes, no warehouse downtime.

5-minute setup · Drop-in for any Snowflake driver · Self-hosted

Trusted by data teams, agents, and analytics studios

FinicOpenDuckMieltoPawrlyFinicOpenDuckPowrLabsPawrlyFinicOpenDuckMieltoPawrlyFinicOpenDuckMieltoPawrlyFinicOpenDuckPowrLabsPawrlyFinicOpenDuckMieltoPawrly
Two routing strategies

Where each query runs.

Melt makes two decisions per query — independently, transparently, with no driver changes. Together they form the unified Snowflake cost layer.

STRATEGY 01Available today

Query routing

Lake or Snowflake?

query
DuckDB · lakeSnowflake

For each statement, melt decides whether DuckDB on your S3 lake can answer it. Eligible reads go local for cents. Writes and Snowflake-only features pass through. Dual execution stitches plans that touch both.

LakePassthroughDual execPolicyAllowlist
STRATEGY 02Coming soon

Warehouse routing

Which Snowflake warehouse?

Estimated scan~ 184 MB
XS
S
M
L
XL
warehouse selectedSMALL

For the queries that stay on Snowflake, melt picks the warehouse that actually fits — XSMALL for a tiny filter, LARGE for the nightly aggregate. Per-statement, transparent to your driver.

Right-sizingWarm-warehouse routingCost attribution
Live in production

Every query, every decision — visible.

Tables flow through Pending → Lake / Snowflake / Dual as melt routes them, with latency and cost attached to each. Same view your engineers see at 3am, in the metrics tab, on a 32-inch operations dashboard.

Pending
events.daily_rollup
~ 257ms$0.0279
users.region_count
~ 847ms$0.0275
Lake
orders.summary
~ 520ms$0.0032
events.last_7d
~ 355ms$0.0306
users.signup_funnel
~ 470ms$0.0434
Snowflake
orders.merge_ingest
~ 543ms$0.0295
policy.audit_log
~ 765ms$0.0374
Dual
users x orders_remote
~ 820ms$0.0372

May statement

Warehouse credits

Saved

−82%

WorkloadBeforeWith meltSaved
Agent dashboard refresh$184$3.1098%
dbt incremental models$47$11.2076%
BI ad-hoc filters$612$8.4099%
Heavy joins (oversize)$96$960%
Writes / MERGE$58$580%
warehouse savings

Track credits, save more, sleep better.

See exactly which workloads route off Snowflake, which engine they ran on, what they would have cost, and what they cost now. Whether you bill by warehouse, by team, or by agent — melt keeps the books straight.

Cost attributionBudgetsForecastsIntegrations
features

Built for data teams,
powered by simplicity.

Scan budget

2 GB

Parity sampler

1 / 100

Allowlist

analytics.*

Sensitive

pii.users

Smart, flexible, and built around your routing rules.

Tune scan budgets, mark sensitive tables Snowflake-only, sample for parity, allowlist by schema. Make melt feel like an extension of your data platform.

JDBC
ODBC
dbt
Looker
Sigma
Hex
Datadog
Slack

Plugs into the tools you already pay for.

JDBC, ODBC, the Python connector, dbt, Looker, Sigma, Hex — all connect unmodified. Push routing decisions into Datadog, Slack, or your own warehouse.

Observe in realtime

Every routing decision streams to /metrics, with structured logs and tracing. See, in real time, where each query landed and why.

Speaks your dialect

We translate Snowflake SQL to DuckDB on the fly — IFF, QUALIFY, FLATTEN, time-zone arithmetic — and refuse routes that can’t round-trip.

View things your way

Toggle between dashboards, route tables, kanban-style sync state, or timeline views — pick the lens that fits your team’s shift.

pricing

Simple plans
for serious data work.

Save 20%
Melt BasicFor solo data work and side projects.
Free
  • Self-hosted proxy + sync
  • Unlimited tables
  • Per-query routing
  • DuckLake & Iceberg backends
  • Community support
Try Melt free
Most popular
Melt PremiumFor pro teams and growing data orgs.
$87/mobilled yearly
  • Everything in Basic
  • Hosted control plane
  • Single-tenant data plane
  • Cost attribution + budgets
  • Email + Slack support
Get started
Melt EnterpriseFor regulated and high-scale teams.
Flexible
  • Everything in Premium
  • SOC 2, BAA, custom DPA
  • Dedicated solutions engineer
  • SSO/SAML + custom backends
  • 24×7 on-call SLA
Contact sales

Supported integrations and drivers

Snowflake driverJDBCODBCdbtLookerSigmaHexTableauPython connectorGo driverRust connectorSnowflake driverJDBCODBCdbtLookerSigmaHexTableauPython connectorGo driverRust connector
faq

Frequently asked questions.

  • What is Melt?

    Melt is a self-hosted Rust proxy that sits in front of Snowflake. Drivers connect to Melt as if it were Snowflake, and for every incoming statement Melt makes a per-query routing decision: most reads run on a DuckDB-backed lakehouse on S3 (Iceberg or DuckLake), while writes and Snowflake-specific work pass through to Snowflake unchanged. The lake copy stays current via CDC streams pulled out of Snowflake, so the answer the lake returns is the answer Snowflake would have returned.

  • How is Melt different from a query optimizer like Keebo or Espresso?

    Query optimizers rewrite or re-time your SQL so Snowflake runs it more efficiently — the work still runs on the warehouse. Melt does not touch your SQL; it routes each statement to the engine that returns the same result for the lowest cost. When the answer is the lake, the warehouse never spins up at all, so there are no credits to optimise. The two approaches are complementary, but only routing removes traffic from Snowflake entirely.

  • How is Melt different from a cost dashboard like Select?

    Select tells you what your warehouse cost; Melt changes what the warehouse runs. Dashboards are observability — they help you right-size, attribute, or chargeback, but every query still hits Snowflake. Melt is an active proxy that decides per query whether Snowflake compute is required at all, and exports the same routing decisions to Prometheus and structured logs so you keep the visibility you had.

  • Do I need to change my SQL or driver?

    No. Melt speaks Snowflake’s REST wire protocol exactly, so JDBC, ODBC, the Python connector, Go, Looker, Sigma, Hex, and dbt connect unmodified. The only change is the connection-string host. Dialect deltas like IFF, QUALIFY, DATEADD, and PARSE_JSON are handled inside the proxy when a query routes to the lake, so your queries stay portable. Snowflake-only constructs (Snowpark, GENERATOR, INFORMATION_SCHEMA access, Time Travel, lateral FLATTEN) pass through to Snowflake unchanged rather than being rewritten.

  • How does the routing decision work?

    For every statement, the router parses the SQL, classifies it (writes and Snowflake-only features always pass through), checks that all referenced tables are synced and active, applies your policy mode, and checks the estimated scan against a configurable byte cap. Eligible reads run on DuckDB against Iceberg or DuckLake on S3; everything else forwards to Snowflake verbatim. The decision is observable in /metrics, in structured logs, and offline via melt route "<sql>", which prints the route, the typed reason, and the translated DuckDB SQL.

  • What does the cost-reduction headline assume?

    The biggest savings come from accounts dominated by small, high-frequency reads — BI dashboards refreshing on a tile cadence, agent fleets firing thousands of lookups per day — where each query bills a Snowflake minimum but scans well under a gigabyte. Workloads that are mostly large joins or Snowflake-only features see smaller savings because those keep passing through. The hero figure on this site is workload-dependent and assumes a routable read mix; a published method and an interactive calculator will sit alongside the claim.

  • Where does Melt run?

    Melt is deployed in your own infrastructure. It has two services — a stateless proxy that scales horizontally and a single-writer sync that pulls Snowflake CDC into the lakehouse — and runs against your own Postgres catalog and S3-compatible storage (AWS, MinIO, Cloudflare R2, Backblaze B2, or Wasabi). Snowflake credentials, the lakehouse, and the data plane all stay inside your network.

  • What happens when a query touches a sensitive table?

    Policy is configurable in three modes. The default passthrough mode forces any table with a Snowflake policy marker straight to Snowflake. allowlist keeps anything outside an explicit list off the lake. enforce rewrites references to sync-maintained filtered views so row-access and masking policies are honoured on the lake side. Sync polls Snowflake’s POLICY_REFERENCES on a configurable interval and refreshes markers without a restart.

  • How long does setup take?

    The Docker quickstart brings Melt up against a local Postgres and MinIO in one command, and routing decisions can be inspected immediately with melt route "<sql>" — no Snowflake credentials required to try the router offline. For a real Snowflake account, configuration is a single melt.toml file (account, sync allowlist, backend selection) and pointing your drivers at Melt’s host. Production splits proxy and sync across pods; the shape is documented in the architecture guide.

  • Can I use Melt with dbt, Looker, and AI agents?

    Yes. Anything that speaks Snowflake’s REST shape works unmodified — the official Snowflake Python connector connects to Melt with only host and port changed. JDBC and ODBC clients (Looker, Sigma, Hex, Tableau), Go, and dbt behave the same way. AI agents that generate SQL via these drivers route through Melt automatically, and they are typically the workload that gets the largest cost win because their queries are individually small and frequent — exactly the shape where Snowflake’s per-query minimums hurt most.

Ready to get started?

Download Melt for free and route your first query in under five minutes. No credit card required.

Try Melt free