uproot-browser
uproot-browser is a plotext based command line library in which the command line interface is provided by Click. It is powered by Hist and it's TUI is put together by Textual. Its aim is to enable a user to browse and look inside a ROOT file, completely via the terminal. It takes its inspiration from the ROOT object browser.
Installation
You can install this library from PyPI with pip or uv:
python3 -m pip install uproot-browser
You can also use pipx run or uvx to run the library without installing it; for example, this will let you try it out in one line:
uvx uproot-browser[testdata] --testdata uproot-Event.root
Features
uproot-browser currently provides the following features (get help with -h or --help, view the current version with --version):
browsecan be used to display a TUI (text user interface), acts as default if no subcommand specified.plotcan be used to display a plot.treecan be used to display a tree.
Examples
This example uses data from the scikit-hep-testdata package. The --testdata flag will load from there if it is installed; use the [testdata] extra if you want to play with it.
browse command:
uproot-browser browse --testdata uproot-Event.root
plot command:
uproot-browser plot --testdata uproot-Event.root:hstat
hstat -- Entries: 1000
┌───────────────────────────────────────────────────────────────┐
18.0┤▐▌ │
│▐▌ ▗▖ ▄│
15.6┤▐▌▗▖ ▐▌ █│
│███▌ █ █ ▐▌ ▐█│
13.1┤████▟▌ ▗▖ ▗▖ █▌▗▖ ▐▌ ▄ █▌ ▄ ▟▌█ ▗▄▐▙▗▖ ▐▌▐█│
10.6┤█████▌ ▐▌ ▐▙▖ █▌▐▌ ▐▙ █▄ █▙ █ █▌█ ▐█▟█▐▌ ▗▄▟▌▐█│
│█████▌ █▌▐█▌ ████▌█▌▐█ ▐█▐▌ ▐▌ ███▐██ ▐█ ▐████▐███▐▌ ▐███▌▐█│
8.2┤█████▌▐█▌▐█▌ █████▌██▐█ ██▐█ ▐▌▐████▐███▌▐█ █████▐███▐██▐████▐█│
│████████▙██▌█████████▟█▖████▖▟██████▟██████▖████████████▟██████│
5.8┤███████████▙███████████▙████▌██████████████▌███████████████████│
│████████████████████████████▌██████████████████████████████████│
3.3┤███████████████████████████████████████████████████████████████│
└┬───────────────┬──────────────┬───────────────┬──────────────┬┘
0.00 0.25 0.50 0.75 1.00
[x] xaxis
Image support
If your terminal supports images (Sixel or TGP, such as iTerm2), you can use --image mode.
You can get an image plot, the required dependencies can be installed via:
python3 -m pip install uproot-browser[image]
Or can be run via pipx or uvx without installing:
uvx uproot-browser[image] ...
Adding the argument --image gives us the plot:
uproot-browser plot --testdata uproot-Event.root:T/fTracks.fPz --image
Use --save to write the plot to a file instead (any matplotlib format,
with a transparent background where the format supports it):
uproot-browser plot --testdata uproot-Event.root:T/fTracks.fPz --save myplot.png
tree command:
uproot-browser tree --testdata uproot-Event.root
📁 uproot-Event.root
┣━━ ❓ <unnamed> TProcessID
┣━━ 🌴 T (1000)
┃ ┗━━ 🌿 event Event
┃ ┣━━ 🌿 TObject (group of fUniqueID:uint32_t, fBits:uint32_t)
┃ ┃ ┣━━ 🍁 fBits uint32_t
┃ ┃ ┗━━ 🍁 fUniqueID uint32_t
┃ ┣━━ 🍁 fClosestDistance unknown[]
┃ ┣━━ 🍁 fEventName char*
┃ ┣━━ 🌿 fEvtHdr EventHeader
┃ ┃ ┣━━ 🍁 fEvtHdr.fDate int32_t
┃ ┃ ┣━━ 🍁 fEvtHdr.fEvtNum int32_t
┃ ┃ ┗━━ 🍁 fEvtHdr.fRun int32_t
┃ ┣━━ 🍁 fFlag uint32_t
┃ ┣━━ 🍁 fH TH1F
┃ ┣━━ 🍁 fHighPt TRefArray*
┃ ┣━━ 🍁 fIsValid bool
┃ ┣━━ 🍁 fLastTrack TRef
┃ ┣━━ 🍁 fMatrix[4][4] float[4][4]
┃ ┣━━ 🍁 fMeasures[10] int32_t[10]
┃ ┣━━ 🍁 fMuons TRefArray*
┃ ┣━━ 🍁 fNseg int32_t
┃ ┣━━ 🍁 fNtrack int32_t
┃ ┣━━ 🍁 fNvertex uint32_t
┃ ┣━━ 🍁 fTemperature float
┃ ┣━━ 🌿 fTracks TClonesArray*
┃ ┃ ┣━━ 🍃 fTracks.fBits uint32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fBx Float16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fBy Float16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fCharge Double32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fMass2 Float16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fMeanCharge float[]
┃ ┃ ┣━━ 🍃 fTracks.fNpoint int32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fNsp uint32_t[]
┃ ┃ ┣━━ 🍁 fTracks.fPointValue unknown[][]
┃ ┃ ┣━━ 🍃 fTracks.fPx float[]
┃ ┃ ┣━━ 🍃 fTracks.fPy float[]
┃ ┃ ┣━━ 🍃 fTracks.fPz float[]
┃ ┃ ┣━━ 🍃 fTracks.fRandom float[]
┃ ┃ ┣━━ 🍃 fTracks.fTArray[3] float[][3]
┃ ┃ ┣━━ 🍁 fTracks.fTriggerBits.fAllBits uint8_t[][]
┃ ┃ ┣━━ 🍃 fTracks.fTriggerBits.fBits uint32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fTriggerBits.fNbits uint32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fTriggerBits.fNbytes uint32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fTriggerBits.fUniqueID uint32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fUniqueID uint32_t[]
┃ ┃ ┣━━ 🍃 fTracks.fValid int16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fVertex[3] Double32_t[][3]
┃ ┃ ┣━━ 🍃 fTracks.fXfirst Float16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fXlast Float16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fYfirst Float16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fYlast Float16_t[]
┃ ┃ ┣━━ 🍃 fTracks.fZfirst Float16_t[]
┃ ┃ ┗━━ 🍃 fTracks.fZlast Float16_t[]
┃ ┣━━ 🌿 fTriggerBits TBits
┃ ┃ ┣━━ 🌿 fTriggerBits.TObject (group of fTriggerBits.fUniqueID:uint32_t, fTriggerBits.fBits:uint32_t)
┃ ┃ ┃ ┣━━ 🍁 fTriggerBits.fBits uint32_t
┃ ┃ ┃ ┗━━ 🍁 fTriggerBits.fUniqueID uint32_t
┃ ┃ ┣━━ 🍃 fTriggerBits.fAllBits uint8_t[]
┃ ┃ ┣━━ 🍁 fTriggerBits.fNbits uint32_t
┃ ┃ ┗━━ 🍁 fTriggerBits.fNbytes uint32_t
┃ ┣━━ 🍁 fType[20] int8_t[20]
┃ ┗━━ 🍁 fWebHistogram TRef
┣━━ 📊 hstat TH1F (100)
┗━━ 📊 htime TH1F (10)
Development
See CONTRIBUTING.md for details on how to set up a development environment.
Release files for uproot-browser 0.10.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| uproot_browser-0.10.1.tar.gz | 81.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| uproot_browser-0.10.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 120.8 kB
Release files / uproot_browser-0.10.1.tar.gz
| Download URL | uproot_browser-0.10.1.tar.gz |
|---|---|
| Size | 81.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b48edf74e772a7af288cec214efd4eb275c06e3c507aa442b3aa0cf255e18c1
|
|
BLAKE2b-256 checksum How to use checksums |
53d1ec3825269e4d31a0ce897d46920aadd42d73ba256fb424acf6f9b84e1979
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / uproot_browser-0.10.1-py3-none-any.whl
| Download URL | uproot_browser-0.10.1-py3-none-any.whl |
|---|---|
| Size | 38.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a3b6e65ccc9c285304e56d87e192eb0419adf690b6b6573c3c02f964ef2b1eb5
|
|
BLAKE2b-256 checksum How to use checksums |
46000f0bceecc225563c4bbc7692e53c708fd28274452623474c012f58391a93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency log