The tins
Every tin, layer by layer
At the top, execution: Orca schedules pipelines, Dista runs Mojo functions across a cluster, and restate makes a flow durable. Beneath it, Iceberg tables and their catalogs; then the file formats a table is made of, and the storage and databases it lives in; then the codecs, hashes and threads they all share, and small utilities beside them. I kept every piece separate, so you can take just the one you need.
magmalake's own tins are Apache-2.0 and CI-tested on stable Mojo 1.2.0 and the current nightly, across macOS and Linux; the three republished ones keep upstream's MIT licence. Every tin but xml is published on mojoshelf. Each of magmalake's own carries a correctness oracle — an outside implementation I made it agree with. Its page says which, with its numbers and its install line.
What this is
From a table format to a platform
magmalake began when Mojo reached 1.0 as an exploration in building a meaningfully large data library in it? — and I picked Apache Iceberg as the target. What came out is a stack rather than a demo. Parquet, Avro, Thrift, Iceberg itself, Roaring bitmaps, Snappy and the hashes are implemented in Mojo. A few very mature C libraries are linked rather than reimplemented — libzstd, liblz4 and libbrotli for those three codecs, libcurl for HTTP and TLS, and pthreads for the threads the language does not yet provide. What is gone is the Python and JVM layer that every other route from Mojo to Iceberg has to go through.
Then it grew upward. Orca is the orchestration layer: pipelines as DAGs in Mojo, checked by the compiler, partitioned by time or arbitrary keys and run on cron schedules, with a scheduler that backfills and retries. It loads every month of NYC taxi trips since 2011, 1.44 billion rows, four runs at a time. Dista, beneath it, runs Mojo functions distributed across a cluster. On those taxi rows in S3 it beats both Ray and a Rust implementation of the same queries.
Take a tin
Each of the 27 repositories is independently usable and independently installable. Start with whichever layer you need — you do not have to take the stack.