Sidewinder Flow Studio is a visual ETL tool where each node on the canvas is a Python or SQL
cell. Data moves between nodes as Apache Arrow, so you can click any step and see exactly what
came out of it.
Open source (AGPL-3.0) · Self-hosted · Your data stays on your infrastructure
33.7 million rows read from CSV in under 10 seconds with the Polars engine
1.25 million rows bulk-loaded into PostgreSQL in about 10 seconds
Charts over 30 million rows answered in under a second, computed where the data lives
Measured on a single workstation.
How it works
Draw the flow. Write the steps. Watch the data.
1
Connect your sources. PostgreSQL, ClickHouse, Snowflake, BigQuery, Trino, SQL Server, Oracle and more — or files from a folder.
2
Add nodes and write each step in pandas, Polars, DuckDB SQL, or SQL that runs inside your warehouse. Mix them freely in one flow.
3
Inspect anything. Every node's output is cached, so you can open it, chart it, or re-run from that point without recomputing everything upstream.
4
Load and schedule. Write results to any connected database with each engine's fastest native loader, then put the flow on a schedule.
Explore
Drag-and-drop charts over any data
Open any node's output, any persisted table, or a live database connection, and build charts by
dragging fields. Each chart is compiled to SQL and runs where the data lives, so only the
aggregated result reaches your browser. Every query has a row cap and a timeout by default, and
you can see the SQL behind each chart.
Build — notebooks, without the hidden state
In a notebook, cells share one namespace and run in whatever order you clicked. In Flow Studio
each node has its own scope and passes exactly one frame to the next, so dependencies are
explicit and a flow runs the same way every time. Join and union several inputs, branch with a
Router node, checkpoint a slow step and resume from it tomorrow.
Scale — bigger than memory, on one machine
DuckDB reads cached data straight from disk and spills when a query outgrows memory. Polars
streams its results. Independent branches can run in parallel. When the data already lives in a
warehouse, push the work down and bring back only the result.
Load — native speed, not row by row
fast_write uses each database's own bulk path: PostgreSQL COPY,
ClickHouse native inserts, SQL Server fast_executemany, Oracle array binding.
Missing tables are created from your data's schema.
Extend — plugins that can't break your environment
Add engines as ordinary Python packages. Libraries with demanding dependencies can run in their
own virtual environment, exchanging data as Arrow files, so a machine learning library never
destabilises your ETL setup. A scikit-learn plugin ships as a working example.
AI-assisted, with your own model
Describe a step in plain language and get the code, written against your actual columns. Use
your own API key or a local model through Ollama. The code lands in the node for you to read and
edit; nothing runs without you.
Who it's for
Data and BI teams
Orchestrate warehouse-to-warehouse work, keep transformation logic visible and reviewable, and stop moving millions of rows through laptops.
Analysts moving into Python
Start from a step that works, read the code it's made of, change it. Every node is real Python or SQL, so the skills carry over to everything else you'll write.
Research and teaching
A pipeline you can open, audit and re-run is a better record of an analysis than a sequence of clicks. Scientific libraries plug in as engines.
git clone https://github.com/sidewinder-labs/sidewinder-flow-studio.git
cd sidewinder-flow-studio
cp .env.docker .env # then set SECRET_KEY
docker compose up --build -d
# open http://localhost:8080
Built in the open.
Flow Studio is developed in public by one person, with releases every few weeks. Issues, ideas
and pull requests are welcome.