pixi-browse
An interactive terminal UI for browsing conda package metadata. Explore packages, versions, dependencies, and more from any conda channel — right from your terminal.
Features
- Browse packages from any conda channel (conda-forge, prefix.dev, etc.)
- Substring search to quickly filter through thousands of packages, as well as through a package's versions, dependencies and files
- Inspect versions grouped by platform with collapsible sections
- View detailed metadata including dependencies, license, checksums, build info, and timestamps
- Inspect package contents — file listings and
about.jsonextracted directly from artifacts - Spot repodata patches — diff an artifact's original
index.jsonagainst the patched repodata served by the channel - Verify Sigstore attestations — see who built a signed artifact, from which workflow and ref, and whether the signature binds to this exact file and channel
- Compare artifacts — metadata, dependencies, and file lists of two builds side by side, with optional file diffs
- Terminal hyperlinks to source repositories, maintainer GitHub profiles, and provenance commits
- Download artifacts directly to your working directory
- Vim-style keybindings for fast keyboard-driven navigation
Installation
From conda-forge
pixi global install pixi-browse
# or use without installation
pixi exec pixi-browse
From PyPI
uv tool install pixi-browse
# or use without installation
uvx pixi-browse
Optional: file diffs
Comparing two artifacts (C) can show a side-by-side diff of a file that
differs between them. This uses
textual-diff-view, which is
AGPL-3.0 licensed and therefore not installed by default:
pixi global install 'pixi-browse[extras=diff]'
pixi exec -s 'pixi-browse[extras=diff]' pixi-browse
# or from PyPI
uv tool install 'pixi-browse[diff]'
uvx 'pixi-browse[diff]'
Without it, the Diff left / right action in the compare view asks for this
package.
Optional: file types
The file action dialog always says whether a file is text or binary. With
python-magic installed it also names
the type the way file does, e.g. Python script or ELF 64-bit LSB shared object, x86-64. python-magic needs the native libmagic library, so it is not
installed by default:
pixi global install 'pixi-browse[extras=filetype]'
pixi exec -s 'pixi-browse[extras=filetype]' pixi-browse
# or from PyPI
uv tool install 'pixi-browse[filetype]'
uvx 'pixi-browse[filetype]'
Pixi installs libmagic along with it. From PyPI the library has to be installed
separately: brew install libmagic, apt install libmagic1, or, on Windows, a
libmagic DLL and its magic database.
Without either, the dialog only says text or binary.
Usage
# Browse configured default channels (conda-forge if unset) across all platforms
pixi-browse
# Read a specific config file
pixi-browse --config ./config.toml
# Browse a different channel
pixi-browse -c https://prefix.dev/conda-forge
# Browse several channels at once
pixi-browse -c conda-forge -c bioconda
# Restrict to specific platforms
pixi-browse -p linux-64 -p osx-arm64
# Start with a MatchSpec query applied
pixi-browse -m "numpy >=2"
# Combine channel, platform, and MatchSpec filters
pixi-browse -c https://prefix.dev/conda-forge -p linux-64 -m "python >=3.13"
# Show version
pixi-browse --version
CLI Options
| Option | Description |
|---|---|
-c, --channel |
Startup channels (repeat for multiple; overrides configured defaults) |
--config |
Config file to read instead of the default locations |
-p, --platform |
Platforms to include (repeat for multiple) |
-m, --matchspec |
MatchSpec query to apply at startup |
--version |
Show version and exit |
--help |
Show help and exit |
Configuration
Without --config, pixi-browse loads Pixi's default configuration locations
through rattler, including shared rattler configuration. These include system
configuration, the platform's user configuration directory (and
XDG_CONFIG_HOME), and $PIXI_HOME/config.toml or ~/.pixi/config.toml.
Later files override earlier ones; missing default files are skipped.
--config <path> reads only that file and reports missing or invalid files.
default-channels = ["conda-forge", "bioconda"]
[mirrors]
"https://conda.anaconda.org/conda-forge" = ["https://prefix.dev/conda-forge"]
[repodata-config]
disable-sharded = true
The shared network client applies mirrors, S3 options, authentication, proxy,
and TLS settings to repodata, package previews, and downloads. Repodata format
settings (including per-channel overrides) and concurrency.downloads are
applied to the gateway. Who-needs queries scan the full channel repodata,
even when sharded repodata is enabled for browsing.
Explicit -c flags replace default-channels. If neither is set, pixi-browse
uses conda-forge.
Keybindings
Navigation
| Key | Action |
|---|---|
j / k |
Move selection or scroll |
h / l |
Focus left / right pane |
gg / G |
Jump to top / bottom |
Ctrl+u / Ctrl+d |
Page up / down |
Enter |
Open / select |
Esc |
Back or close current overlay |
App
| Key | Action |
|---|---|
? |
Show help |
/ |
Search packages, versions, dependencies, or files |
p |
Open platform selector |
c |
Select channels |
C |
Compare selected artifact (in versions view) |
m |
Query packages with a MatchSpec |
w |
Query packages that need a package |
d |
Download selected artifact (in versions view) |
q |
Quit |
Channel selector
c opens a dialog with the channels being browsed. The package list and the
MatchSpec and who-needs queries run against all of them.
| Control | Action |
|---|---|
| Text field | Type a channel name or URL, Enter adds it |
✕ button |
Remove that channel (the last one cannot be removed) |
Apply button |
Load the listed channels and the one typed, if any |
Up / Down, Tab |
Move between the ✕ buttons, the field and Apply |
Esc |
Cancel |
Attestations
Channels can publish Sigstore attestations for the
packages they serve, in a sidecar next to the archive whose digest the repodata
advertises. The Attestation tab of the metadata section reports what verifying
one says: the signing identity (for GitHub Actions, the workflow file and the ref
it ran on), the certificate issuer, when the signature was logged, and the
channel the attestation was issued for. The tab label carries ✓ when a
signature verified and ✗ when none did, so signedness can be read without
opening the tab.
pixi-browse only reports; it never refuses to show a package. No publisher is required, and an attestation issued for a different channel than the one the artifact was fetched from — a mirror, say — is shown as a warning rather than treated as a rejection. Whether that is acceptable is yours to decide. An artifact whose channel advertises no attestations is reported as unsigned, which costs no request.
Verifying loads the Sigstore trusted root over the network the first time, so the tab is the one part of pixi-browse that is not satisfied by the channel alone. Package metadata and files render as soon as the archive is available; the attestation tab updates when those independent checks finish.
Development
This project is managed by pixi.
git clone https://github.com/pavelzw/pixi-browse
cd pixi-browse
pixi run pre-commit-install
Running Tests
pixi run test
The tests run the app against small offline conda channels (conda-forge,
bioconda and skill-forge) made of real artifacts listed in
tests/fixtures/channel_artifacts.toml.
They are downloaded into the git-ignored tests/fixtures/channels/ directory on
first use (or ahead of time with pixi run fetch-test-channel) and verified by
SHA256, so later runs work offline. TUI screens are checked with
pytest-textual-snapshot.
Attestations are verified against the trusted root embedded in rattler rather
than the one its TUF repository serves, so the whole suite runs offline — no test
reaches tuf-repo-cdn.sigstore.dev.
The app draws in ANSI colors, so the terminal palette alone decides how it looks.
Every screen is therefore snapshotted twice from a single app run, with the two
palettes pixi run demo records the demos with (rose-pine-moon and
rose-pine-dawn), side by side as
tests/__snapshots__/<module>/<test>.{dark,light}.svg.
After an intentional UI change, review snapshot_report.html and accept the new
screenshots with:
pixi run snapshot-update
To review committed snapshot changes against main without rerunning the tests:
pixi run snapshot-report
Linting
pixi run pre-commit-run
Metadata
Release files for pixi-browse 0.0.19
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pixi_browse-0.0.19.tar.gz | 20.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pixi_browse-0.0.19-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.4 MB
Release files / pixi_browse-0.0.19.tar.gz
| Download URL | pixi_browse-0.0.19.tar.gz |
|---|---|
| Size | 20.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5a98e9b17553106e80780f99ad3bfc74159a86d729831ef1641e2fb138bd5840
|
|
BLAKE2b-256 checksum How to use checksums |
4933cc62d94679973b70f1b956c291d5a7a836e8693da1c4b27856354cbb5c2b
|
| 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 29, 2026.
Transparency logRelease files / pixi_browse-0.0.19-py3-none-any.whl
| Download URL | pixi_browse-0.0.19-py3-none-any.whl |
|---|---|
| Size | 96.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e673c0a79629e8d0f9299562fdd99ce895640a8d30d921f0b9ee9ccefb1d16e5
|
|
BLAKE2b-256 checksum How to use checksums |
e3f19c772a47fd6e29a6f7675b8809759686cba3b6d9cfd3a85001221cc104c8
|
| 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 29, 2026.
Transparency log