cloudparts

NimbleExperimental

Meta’s columnar file format, formerly called “Alpha”, built as a replacement for Parquet and ORC on very wide tables, such as machine-learning feature and training tables with thousands of columns.

What it is
File formats (columnar files)
Type
Open source
Made by
Meta
License
Apache 2.0
Status
Experimental. Its README calls Nimble a work in progress with no stability or versioning guarantees yet.
Facts checked
23 October 2026

What it is

Nimble stores each column as one or more streams and is designed for tables that are wide rather than long: thousands to tens of thousands of columns, as found in feature engineering and model training at Meta. Its metadata is organized to stay light at that width and is stored in FlatBuffers instead of the Thrift or Protocol Buffers that Parquet and ORC use, so large metadata sections can be accessed efficiently. It encodes data in blocks rather than as one continuous stream, which keeps memory use while reading predictable.

Encoding is the part Nimble makes pluggable. A block can be stored as trivial values, a constant, a mostly-constant value plus exceptions, run-length, dictionary, bit-packed, varint, delta, prefix-compressed strings, or sparse booleans, among others, and encodings cascade: a dictionary’s list of unique values and its index array are each encoded again with whatever fits them best, and Zstd compression is applied at each level only when it helps. Which encoding to use is decided by a selection policy: the default estimates encoded size and weights it by how fast each encoding decodes, an alternative uses a machine-learning model, and a third replays a recorded layout. The library is C++, built with CMake, and is closely tied to Velox, Meta’s execution engine library, which it includes as a Git submodule. Meta asks other projects to use this one library and write bindings rather than reimplement the spec, to avoid the incompatible readers that older formats suffered from.

Why teams pick it

  • Built for very wide tables, with metadata designed for thousands to tens of thousands of columns and streams
  • Cascading encodings with pluggable selection policies, so new encodings can be added without changing the file layout
  • Block encoding gives predictable memory use when decoding, which matters for large training reads
  • Apache 2.0 code from Meta, developed alongside Velox

Watch out for

  • Experimental: the README promises no stability or versioning guarantees yet, so the format and API can still change under you
  • One C++ library and no other implementations by design, and that library is built on Velox, so reading Nimble from other engines and languages means writing bindings first
  • Tightly coupled to Velox and built with clang and a long list of system dependencies; decoupling is still a stated plan
  • SIMD- and GPU-friendly decoding plans are listed as goals, not implemented features

Alternatives

What all columnar files have in common →Compare side by side →

How it fits with other technologies

See it in a real stack

No architecture uses Nimble yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from2023–2026

Machine-learning feature engineering and training tables can have thousands of columns, and Meta wanted a format suited to that width, to replace file formats such as Apache Parquet and ORC. It built one, first called “Alpha”, with lighter metadata in FlatBuffers and an encoding system that could keep up with encoding research, which, as the README puts it, evolves faster than the file layout itself.

Yoav Helfman of Meta presented Nimble at VeloxCon 2024, and the code was published on GitHub; it was posted to Hacker News in April 2024. It lives in the facebookincubator organization under Apache 2.0 and is still developed together with Velox, which it includes as a Git submodule. The README still describes it as a work in progress without stability guarantees, while the encoding catalogue keeps growing.

Why it’s built this way

FlatBuffers metadata instead of Thrift or Protocol Buffers
With thousands of columns, decoding the whole footer to find a few columns is expensive; FlatBuffers can be read in place, entry by entry.
Encodings separate from the physical layout
The README notes that the state of the art in encoding moves faster than file layouts, so encodings are extensible and can be nested without changing the format.
Block encoding instead of stream encoding
Encoding fixed blocks rather than one long stream bounds the memory a reader needs, which keeps decoding predictable.
One library, not a spec to reimplement
Meta wants to avoid the fragmentation seen when every engine writes its own reader for a format, so it asks users to bind to the single Nimble library.

Timeline

  1. 2023

    The Nimble repository is created (December)

  2. 2024

    Yoav Helfman presents Nimble at VeloxCon; the code is public by April

  3. 2026

    Still marked a work in progress, with no stability guarantees

Sources4 · facts checked 23 October 2026

Improve this page on GitHub