Release history
Note: Releases in the 4.3.x series were developed in parallel with v5.0 on a separate branch and are not included here. See the list of 4.x releases for details.
Unreleased (main branch on GitHub)
PR #1823: test: tighten the existing tests and make their fixtures robust. (also: #1814, #1829, #1830, #1832, #1828, #1825)
PR #1819: chore(deps): bump the actions group with 2 updates.
PR #1820: docs: fix broken pybes3 link.
PR #1821: ci: fix test startup with pytest 9.2.
PR #1771: feat: support add_branches for jagged branches (#1764)
PR #1817: chore: update pre-commit hooks.
PR #1779: fix(rntuple): preserve optional records when writing and reading (#1713)
PR #1793: fix: index the GPU-decompressed RNTuple clusters from the first one read.
PR #1813: feat(graphed): report a tree’s entries through a source’s num_entries hook.
PR #1810: fix(graphed): default-named reads of different data share a Session.
PR #1801: fix: write correct entry offsets for jagged arrays with fixed-size inner dimensions. (also: #1490, #1490)
PR #1781: fix: deleting or replacing one cycle of a multi-cycle key raises IndexError.
PR #1802: fix: don’t write empty TBaskets for TTrees without entries. (also: #756)
PR #1800: perf: cache TBasket TKey sizes on the TBranch.
PR #1798: fix: raise read errors from coalesced requests.
PR #1803: fix: support already-open TTrees in iterate and concatenate.
PR #1794: fix: ak_add_doc={“__doc__”: “title”} documents an RNTuple from its descriptions again. (also: #1785)
PR #1797: perf: read TBasket TKeys in one request for memory-based step_size.
PR #1799: chore: require scikit-hep-testdata>=0.6.9.
PR #1795: fix(graphed): one source identity per tree, however its path is spelled.
PR #1763: fix: request TKey byte ranges with Python ints in basket_key. (also: #1649, #1756)
PR #1788: fix: don’t read an extra RNTuple cluster when entry_stop is on a cluster boundary. (also: #1780, #1786)
PR #1748: fix: preserve top-level RNTuple tuples.
PR #1777: fix: canonicalize input file paths for graphed duplicate refusal (#1767)
PR #1790: feat(graphed): record into the current graphed Session.
PR #1791: chore(deps): bump the actions group with 4 updates.
PR #1789: test: expect graphed’s one-binding-per-name rule.
PR #1783: perf: project RNTuple subfields in uproot.dask and uproot.graphed.
PR #1787: test: tolerate graphed’s positional-session deprecation.
PR #1785: fix: every dask/graphed reader adds ak_add_doc to an RNTuple form.
PR #1784: feat(graphed): record a read into an existing Session with session= and name= (also: #1, #2)
PR #1723: perf: look up RNTuple field keys in a set of prefixes. (also: #1637)
PR #1765: fix: handle negative and out-of-range indexes in TAxis.__getitem__.
PR #1780: fix: num_entries_for on RNTuple fields.
PR #1770: fix: support add_branches for ROOT written TTrees (#1764)
PR #1774: chore: require toml-sort>=0.25.0 for pretty-format-toml.
PR #1776: test: do not overwrite cached test files under pytest-xdist.
PR #1762: fix: form-driven RNTuple NumPy and pandas conversion (#1760)
PR #1772: fix: reject non-positive integer step_size in iterate.
PR #1773: chore(deps): bump astral-sh/setup-uv from 10.2.0 to 10.3.0 in the actions group.
PR #1741: fix: read TArray members of a split std::vector without a header.
PR #1761: test: download all sample files before globbing them in test_0044.
PR #1758: feat: open only the first file in uproot.graphed, and add root_write for one-pass ROOT output.
PR #1752: fix: raise or warn on unrecognized options when opening files.
PR #1759: ci: pin pyarrow below 26 in the NumPy 1 job.
PR #1750: fix: support RNTuple in uproot.dask with library=”np” (also: #1749)
PR #1755: chore(deps): bump actions/download-artifact from 8.0.1 to 8.0.2 in the actions group.
PR #1747: chore: test on Python 3.15 and mark it as supported.
PR #1751: ci: test against the latest Pyodide without pinned versions.
PR #1743: fix: accept storage options in create, recreate and update. (also: #1729)
Earlier releases
Uproot versions 1 through 3 were in a different GitHub repository: scikit-hep/uproot3.
PyPI full history (including versions 1 through 3).
This was to allow users to transition from Awkward Array 0.x and Uproot 3.x, which had different interfaces (especially Awkward Array). The transition completed on December 1, 2020.