Columnar arrays, null-aware compute kernels, Parquet and Arrow IPC, and a
small query engine. Use it from Python much as you would PyArrow, or build a
Mojo query into its own executable. It covers a useful part of Arrow, not all
of it.
Nothing runs until collect(). optimize() rewrites the plan first; it is opt-in.
215 of 278SQL queries in the test corpus answered exactly as DuckDB answers them. The other 63 are recorded too, and wait on features marrow does not have yet.
3Arrow implementations (C++, Rust, Go) it exchanges IPC files and C Data with in Arrow's integration suite, for the layouts it implements.
3.0 MBMachine code in a compiled Parquet query on macOS arm64, held there by a CI size gate. The executable also loads the Mojo runtime libraries.
Three ways in
Call a kernel, build a plan, or compile it
The same arrays and kernels sit under all three. What changes is how much
is decided before anything runs.
Column types are fixed when the query is compiled, so an expression can fuse into a single loop, and kernels the query never uses are not linked in. Every param in the plan becomes a command-line flag.
Building takes a minute or two, so this suits a query you run many times, not one you are still shaping. --bundle copies the executable together with the runtime libraries it loads, for running it on another machine.
Where it fits
Next to the tools you already use
Each of these is more complete and better tested than marrow. The right
column is what marrow offers anyway.
What it is
What marrow offers
PyArrow
Python bindings to Arrow C++, the reference implementation
Similar method names, and arrays pass between the two without copying their buffers
Polars / DuckDB
Mature query engines with far broader features
A fixed query compiled into its own executable. No benchmark results are published yet, so no speed claims
arrow-rs / DataFusion
Arrow and a query engine in Rust, the closest relatives in design
Its IPC and C Data output is tested against arrow-rs, C++ and Go in Arrow’s integration suite
Mojo
The language marrow is written in
Arrow arrays, Parquet and a query engine for Mojo programs; a few element-wise kernels can also run on a GPU behind a build flag
NoteHow correctness is checked
A corpus of 278 SQL queries whose expected answers come from DuckDB, never from marrow: 215 run and match, and 63 wait on features marrow does not have yet. Arrow’s own integration suite round-trips IPC files and C Data with the C++, Rust and Go implementations, skipping the layouts marrow does not implement (unions, views, run-end encoding, extension types). See Status & limitations for the full list.
See it run
A short tour
These cells run when the site is built, so the output below is real.
Build arrays from Python data. The type is inferred, and None marks a null: