Duckle's workspace version says 0.0.1 while its releases say v0.7.4
Open-source ETL/ELT on DuckDB. Write, wire, or draw one pipeline: 350+ components, 160+ connectors, dbt, CDC, data quality, a Python API, and MCP for AI agents. Runs anywhere, no lock-in.
At a glance
- What is it?
- Eighteen crates, a single-file binary, an in-process AI assistant and one benchmark figure with no stated method. What the repository actually commits to, and where the three descriptions of it disagree.
- Who is it for?
- Duckle is a credible choice for a single machine or small team that wants pipelines as plain files in git and no per-row billing, and its own scope note is honest about not replacing a distributed warehouse. Before you commit, resolve three things the repository leaves open.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- slothflowlabs/duckle1,570 ★ · +679
| Repository | 2026-07-30 | 2026-11-14 |
|---|---|---|
| slothflowlabs/duckle | 891 | 1.6k |
679 Stars in the last 107 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The workspace version is 0.0.1 and the tags are at v0.7.4
The workspace manifest pins every crate to the same placeholder version:
[workspace.package]
version = "0.0.1"
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.80"The same `version = "0.0.1"` string repeats in all twelve internal path dependencies under workspace.dependencies, from duckle-runtime to duckle-secrets. Meanwhile the release history runs v0.7.2 on 2026-09-07, v0.7.3 on 2026-09-16 and v0.7.4 on 2026-09-25, and the last push to main landed on 2026-10-01. Nothing in the manifest reflects those tags, so the build has no single place that records which release it corresponds to. Rust 1.80 is the declared floor, on edition 2021 with resolver 2.
Three licence signals and two licence files
The repository root holds LICENSE-APACHE and LICENSE-MIT side by side. The manifest declares `license = "MIT OR Apache-2.0"`, which is the usual dual-licence expression. The platform record for this repository reports Apache-2.0 on its own.
That is three answers to one question, and they do not agree. Anyone building a compliance checklist has to decide which of the three sources governs, and the files themselves would have to be read to settle it. Nothing in the workspace section says which crate uses which licence, and the eighteen members do not carry individual licence fields in what the manifest shows.
The manifest also stops partway through, in the middle of the errors section, on an unfinished key name beginning with `thise`. So the workspace table above is complete, and whatever follows it is not readable from here.
The component count is 350 in one description and 400 in another
The repository's own one line description advertises 350+ components and 160+ connectors. The README says 400+ components, twice: once in the numbered list of what sets the project apart, and again as a row in the comparison table, where the same row adds that each component is covered by tests.
The connector count never appears in the README text. Neither does the CDC or data quality wording from the description, though the table of contents reserves sections for Sources, Sinks, Data quality and a capabilities matrix.
So the two descriptions of the same project disagree by at least fifty components, and the README drops the more specific of the two numbers entirely. Anyone writing a requirements list against this tool should count the connectors directly in the capabilities matrix rather than trusting either figure.
The 39.9 second figure names a row count and no machine
One performance number carries the pitch: 96 million rows out of Postgres to Parquet in 39.9s. It appears once, in bold, in the opening paragraph, with no footnote and no link.
The README gives no processor, no memory, no Postgres version, no Parquet settings and no dataset description for that run. Beside it sits a scaling claim: execution uses every core given to the box, so a bigger instance is a faster pipeline. That is linear scaling asserted without a second data point at a different core count.
A benchmarks directory does exist at the repository root, so the method may well be written down somewhere in the tree. It is not in the README, which is where a reader deciding whether to trust the figure will look first.
Self-contained until the first launch, which fetches an engine
The binary is sold twice on the same numbers. One passage calls it a self-contained binary you can audit, 73 to 110 MB depending on your platform. A table row repeats the range and adds the catch: single-file binary, no bundled DB, DuckDB downloads on first launch with a guided step.
Those two claims are reconcilable but not interchangeable. The thing you download is one file; the thing you run needs a second download before it works. A first launch on an isolated machine therefore fails, and the same applies to the runner when it is deployed headless on a schedule. AI engine is opt-in per the table, which is a separate flag from the engine download.
The stated size range is also a 37 MB spread across platforms, which is what you would expect from bundling the headless runner and the MCP server into each build.
Eighteen crates and four engine backends behind one DuckDB story
The workspace has eighteen members: apps/desktop plus sixteen crates under crates/, covering the runtime, connectors, workflow engine, transform engine, stream engine, scheduler, metadata, secrets, plugin SDK and execution core, and the packaging targets.
Four of those crates are engines: duckdb-engine, slothdb-engine, duckle-gpu and duckle-lance. The README's framing is narrower, describing a single-engine alternative to hosted per-row platforms, and saying the canvas compiles the graph to SQL and executes it on a real columnar engine, with DuckDB named as that engine. The Rust tree is broader than that sentence.
The rest of the repository is equally wide: frontend, apps, branding, marketing, website, packaging, docs, samples, scripts, plus both .github and .gitlab-ci.yml, a Dockerfile.web and two compose files, one of them for Coolify. rust-toolchain.toml and the build.cmd, dev.cmd and dev.ps1 scripts cover the Windows path.
Duckie runs in-process by default on a server meant to run headless
The bundled assistant, Duckie, is described as shipping in the box: describe a pipeline in English and it writes the JSON and drops it onto the canvas. It runs wherever Duckle does, with no API key, no telemetry and no vendor round trip, and it can be pointed at your own OpenAI-compatible endpoint instead of running in process.
The default and the deployment story pull in opposite directions. The same README section that introduces headless scheduling on a server also says the assistant runs in process by default, and the table calls the AI engine opt in. So the server-side deployment has an agent-shaped component that can execute inside the runner process unless you redirect it.
The rest of the positioning is about ownership: every pipeline is one file in git, workspaces are plain files in a folder you choose, and the project states it is independent of DuckDB Labs and MotherDuck while building on the DuckDB engine.
Editorial conclusion
Duckle is a credible choice for a single machine or small team that wants pipelines as plain files in git and no per-row billing, and its own scope note is honest about not replacing a distributed warehouse. Before you commit, resolve three things the repository leaves open. The workspace version is 0.0.1 while tags are at v0.7.4, so nothing in the build records the release number. The licence is stated three different ways across the platform record, the manifest and the two files at the root. And the 39.9 second figure comes with no machine, no engine version and no dataset, so treat it as marketing until you reproduce it on your own hardware.
Frequently asked questions
What is slothflowlabs/duckle?
An open-source ETL platform you run on your own infrastructure. You build a pipeline on a canvas, in Python or in SQL, and it compiles the graph to SQL and runs it on DuckDB. It ships as a single binary of 73 to 110 MB and includes a headless runner, a web console and an MCP server.
Is slothflowlabs/duckle connected to DuckDB Labs or MotherDuck?
It states the opposite. The README describes Duckle as an independent open-source project by SlothFlowLabs that builds on the DuckDB engine but is not part of, affiliated with, or endorsed by DuckDB Labs or MotherDuck.
Which license governs slothflowlabs/duckle?
The three available signals disagree. The platform record reports Apache-2.0, the workspace manifest declares MIT OR Apache-2.0, and the repository root carries both a LICENSE-APACHE and a LICENSE-MIT file. Read the two files before you rely on either answer.
How many components and connectors does Duckle have?
Two different numbers are in circulation. The repository description says 350+ components and 160+ connectors, while the README says 400+ components in two separate places and never mentions a connector count. Neither figure is broken down in the README text.
Does Duckle require a cloud account, an API key, or network access?
No vendor account, no API key and no per-row billing, and the assistant runs in process with no telemetry. The first launch is the exception: DuckDB downloads on that first run, so a machine without network access needs the engine staged ahead of time.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/slothflowlabs-duckle)Star history chart for your README
[](https://hysenlabs.com/projects/slothflowlabs-duckle)Was this useful?