← Back to all sparks
U

uproot5

DEVOPS
Velocity0.0

Reading and writing ROOT files in Python

Uproot quietly made RNTuple the default write format — filed under 'chore'.

rntupleroot filesparticle physicsgpu decompressionformat migration
Current state
Uproot ships small, frequent 5.7.x releases in which the RNTuple work dominates and is often buried below the feature list. Since switching the default write format to RNTuple in 5.7.0, the releases have been about making that path complete: entry bounds and report=True for RNTuple.iterate, GPU interpretation of RNTuple data with nvCOMP decompression, support for the v1.0.1.0 format, and the library kwarg finished. Two of the six releases in this window list no new features at all.
Where it's heading
This is a migration project wearing patch-release clothing. The direction is that RNTuple, ROOT's newer columnar format, becomes what Uproot writes and reads by default, with the older TTree path maintained rather than developed. The GPU decompression work points further out: reading physics data straight into accelerator memory rather than staging it through the CPU. Expect the remaining gaps to keep surfacing as bug fixes in the RNTuple path as more of the field writes in the new format.
Prediction
Continued 5.7.x patches closing RNTuple feature parity with TTree, with the GPU and nvCOMP path the most likely area to gain rather than just get fixed.

Recent moves

  1. 1mo ago

    5.7.5: RNTuple library kwarg finished, byte-swap fix in dtype interpretation

    Fills in RNTuple gaps: the library kwarg is completed and report=True works for RNTuple.iterate, both features TTree users already had. A dtype interpretation bug that returned byte-swapped data is fixed, and form typenames are added so Coffea can consume them.

    View source ↗
  2. 3mo ago

    Version 5.7.4

    The notes say it outright — no new features. Free-threading fixes with Python 3.14t added to CI, TProfile read and write logic corrected, and a FreeSegments miscalculation when crossing the 2 GB boundary.

    View source ↗
  3. 4mo ago

    5.7.3: corrupted free_num_bytes and mktree subdirectory fixes

    A fix-heavy release where the writing path gets most of the attention: a rare corruption of free_num_bytes, mktree and mkrntuple creating unwanted subdirectories, and more accurate step sizes in iterate. An awkward_form method for the TMatrixTSym-v5 model is the one addition.

    View source ↗
  4. 5mo ago

    5.7.2: GPU interpretation of RNTuple data with nvCOMP decompression

    Filed as a fix, but getting RNTuple data interpreted on GPU with nvCOMP decompression working is the most forward-looking item in this window — it points at reading physics data straight into accelerator memory. Support for the RNTuple v1.0.1.0 attribute-set record frame lands in the same cut, alongside entry-bound and zigzag decoding fixes.

    View source ↗
  5. 6mo ago

    Version 5.7.1

    A single change deferring default timeouts to the underlying libraries, plus GPU tests added to CI. The smallest release in the window.

    View source ↗
  6. 6mo ago

    5.7.0: RNTuple becomes the default write format

    ⚡ SPARK

    Listed under 'Other' as a chore, but this is the release where Uproot starts writing RNTuples by default — the change every release since has been servicing. Python 3.9 support is dropped in the same cut, and the documentation catches up to the new default a release later.

    View source ↗