Coming soon. Depotex is in active development, so features and these docs may still change.

Browse artifacts

Search every repository you can see, walk each one as a tree, and open any version for its details, files, dependencies, SBOMs, signatures and history

1. Overview

Browse in the left menu lists every artifact you can see, in every space, one row per package: its format, name, newest version and status (a Quarantined, Blocked or Content missing badge), the space and repository it is in, how many versions it has, and when it last changed. The newest changes come first. Select a name to open its newest version, the repository to open its tree, or the space to show only that space.

A space's overview lists its Recent artifacts, and each repository page has Open in browser; the version names in a repository's Versions tab open the browser too.

2. Search and filters

Type part of a name or a version: acme app, com.acme:app, @acme/ui, 2.1. Each word must match; the matching text is marked. Press / anywhere on the page to jump to the search.

Browse: search every repository you can see, filter by space, format and type
Browse: search every repository you can see, filter by space, format and type
FilterMeaning
SpaceOne or more spaces. The picker searches every space you can see, so it works with thousands; each shows how many matching artifacts it has.
FormatOne or more formats (Maven, npm, PyPI, Docker, raw), each with its number of matching artifacts.
TypeHosted, proxy, or all types.
Needs attentionOnly artifacts whose newest version is quarantined, blocked or has content missing.
SortRecent (or Best match while searching), Name or Newest.

Chosen spaces and formats appear as chips you can remove one by one, or all at once with Clear all. Filters are kept in the page address, so you can bookmark or share a search. Show more loads the next artifacts.

Each server keeps its own search index. Right after an upgrade or on a new server, the list may say it is getting ready for a short while; browsing the trees works meanwhile.

3. The tree

Each repository is shown the way its format is organised:

FormatTree
MavenGroup folders (com → acme), then each artifact with its versions
npmScopes (@acme), then each package with its versions
PyPIEach project with its releases
DockerImage paths (team → app), then each image with its tags
rawFolders, then files
The tree of a repository, with its address and setup instructions
The tree of a repository, with its address and setup instructions

A repository's own page starts with its address and a Copy button. Use this repository holds the setup for its package manager: choose Show setup for numbered Install steps and, when you may publish, Publish steps, each with a copy button. A step that can be done more than one way (a one-line .list entry or a .sources file for APT; pip, uv or Poetry for PyPI) offers the others as Use … instead. Private repository? Add your credentials shows where your user name and API token go, and How this repository works explains the format's details. The same card is on the repository's page under Spaces.

The tree beside it shows how many entries the top level has. Filter keeps the names that contain what you type among the folders already opened, and the collapse button closes every folder. Below the setup card, the repository's top level is a list with each package's version count.

Opening a package lists all its versions, newest first, with their status, when they were published and last downloaded, downloads and size.

Download counts and last-downloaded times are saved every few seconds (ARTIFACT_DOWNLOAD_FLUSH_INTERVAL, 5s by default), so a download can take that long to show. If a server stops abruptly, the downloads it counted in those last seconds aren't added.

4. A version

A version's page starts with its name, a version menu to switch to any other version of the package, its status, the space's tags on it, its description, and who updated it when. Download fetches its main file (Docker images show the pull command instead); the ⋯ menu holds the less common actions you're allowed: Quarantine or Release for people who manage the space's quarantine, Yank or Un-yank for PyPI releases, and Yank or Undo the yank for conda builds. RubyGems versions yank and restore each platform's file from the Platforms table on their Overview. A Conan version lists its recipe revisions and their binaries on the Overview, where a revision can be deleted with its binaries.

A version's heading: name, version menu, status and its two tags, with Download
A version's heading: name, version menu, status and its two tags, with Download
A version: install command, overview, files, dependencies and security, with downloads and recent activity
A version: install command, overview, files, dependencies and security, with downloads and recent activity

Below it, the Install bar shows the command that fetches this version (npm install, pip install, mvn dependency:get, go get, helm install, dotnet add package, gem install, conda install, conan install, docker pull, curl) with a copy button. Registry setup opens the other commands, such as Maven and Gradle coordinates, pnpm and yarn, uv, helm pull, a NuGet PackageReference, or docker pull by digest.

A version with several files, such as wheels and a source archive, a jar with its POM and sources, or builds for different platforms, shows a File picker under the Install bar when you can download from the repository. It starts on the version's main file; Download, the curl command under Registry setup and the checksums in the side panel use the file you pick. Files in different folders are shown with their folder, so two files with the same name (one per platform or package revision) can be told apart; in a long list, type part of a file or folder name to find one. The install command stays the package manager's own, which chooses the right build itself. Checksum, signature and provenance files (.sha1, .md5, .asc, .sig, Helm .prov files, SHA256SUMS lists and the like) aren't offered; they're on the Files tab. A version with one file has no picker.

A version with several files: the File picker under the Install bar, with the download and checksums following the file picked
A version with several files: the File picker under the Install bar, with the download and checksums following the file picked

Choose Tree next to the breadcrumb to show the repository's tree beside the version; it's hidden on version pages to leave room, and shown on folders and packages.

TabShows
OverviewWhat the package says about itself, in cards: a Maven POM's packaging, parent, licenses, source code, organization and developers; an npm package's license, homepage, repository, author, tags, keywords, and its entry points and engines (with a warning when it's deprecated); a PyPI release's license, required Python version, authors, links, keywords, extras, classifiers and distributions; a Docker image's digest, kind, source and, per platform, size, build date, user, entrypoint, command, ports, environment and labels. npm packages and PyPI releases then show their README (or project description), folded until you choose Show full README, without HTML or images from other sites.
FilesEvery file with its size, downloads and who uploaded it, a download button for each, and delete for people who may. Pick a file to see its checksums on the side.
DependenciesMaven, npm and PyPI. Uses lists what the version needs, by scope (for PyPI, runtime or the extra that needs it, such as extra: socks), linked when the package is stored in a repository you can browse. Used by lists stored versions that depend on this package.
LayersDocker images: each platform's layers, sizes and digests.
SecuritySBOMs (SPDX and CycloneDX, JSON or XML) with their tool, date and number of components; build provenance (SLSA) with its builder and source; signatures (PGP, cosign, Notation, Sigstore) and other attestations, each with Details and a download. They come from the version's own files (for example a Maven -cyclonedx.json classifier, an npm provenance bundle, or a PyPI release's PEP 740 attestations, or a Conan revision's metadata/ folder) and, for Docker images, from build attestations and OCI referrers. Content the guard refused is listed at the top. Components no vulnerability data covers (such as Conan or conda packages) show Not covered, never clean (SBOM).

The side panel shows downloads and size, when the version was last downloaded and published, a Security summary (signed, SBOM with its component count, build provenance), the MD5, SHA-1, SHA-256 and SHA-512 checksums of the main or picked file with copy buttons, and, for repository administrators and people who can read the audit log, its Recent activity with Full history: who uploaded, changed, quarantined, released or deleted the version and its files (needs a Pro license or higher).

A quarantined, blocked or yanked version says why under its name; downloads are refused while it's quarantined or blocked. An unlisted NuGet version is marked Unlisted; Unlist and Relist on a NuGet version's page change it (Overwrite permission, hosted repositories).

Depotex also keeps the documentation inside each version (READMEs, changelogs and guides in the package, npm READMEs, PyPI descriptions) so that AI tools can search and read it, for people who can browse that repository.

Signatures are listed, not verified. Dependencies show the version or range as written; Used by lists dependents whatever version they ask for.

5. Unsafe content is quarantined

Depotex reads POMs, package manifests, image manifests and configs, SBOMs, signatures and attestations to show them. It reads them carefully: within size, nesting and time limits, without XML document type or entity declarations, never expanding compressed content far beyond its size, and never fetching anything a document points to. Content that breaks these rules is not read, and its version is quarantined automatically — on every license tier — so builds can't use it until someone checks it:

ReasonMeans
Larger than allowedOver the size limit for its kind of document
Nested too deeply / too many elementsJSON or XML built to exhaust whatever reads it
XML entity declarations aren't allowed<!DOCTYPE> or <!ENTITY>, used for XXE and "billion laughs" attacks
Expands far beyond its sizeA compression bomb
Took too long to readOver the time limit
Doesn't match the checksums its manifest listsA file inside a Conan archive differs from, is missing from, or isn't in the manifest its revision ID is the hash of
MalformedNot what it claims to be (invalid JSON or XML, a broken archive). Fields of an unexpected type, common in older packages, are not a reason. A malformed SBOM is the exception: it is harmless, so it is listed as Unreadable and its version stays available

Content is checked within seconds of being published or fetched. The version's Security tab lists what was refused, and the quarantine shows the reason (source Refused content (automatic) in the quarantine list). After checking, release the version as usual: the same content isn't refused again. The quarantine raises artifact.quarantine (after, with source guard) and is recorded in the audit log.

6. Configuration

Per server, in the environment:

VariableDefaultMeaning
INDEX_DIR./data/indexWhere this server keeps its search index. It is rebuilt from the database when missing, so it needn't be backed up; give it fast local disk.
BROWSE_GUARD_MAX_METADATA4194304Largest POM, manifest, image config or package.json read, in bytes
BROWSE_GUARD_MAX_SBOM33554432Largest SBOM (and attestation layer) read, in bytes
BROWSE_GUARD_MAX_ENVELOPE16777216Largest signature or attestation envelope read, in bytes
BROWSE_GUARD_MAX_DEPTH64Deepest JSON or XML nesting
BROWSE_GUARD_MAX_ELEMENTS2000000Most JSON values or XML elements in one document
BROWSE_GUARD_MAX_RATIO100How many times its compressed size content may expand
BROWSE_GUARD_TIMEOUT10sLongest time spent reading one document
BROWSE_GUARD_MAX_COMPONENTS50000Components kept per SBOM for the component list and API; a document with more is kept up to the limit and marked truncated, never refused
IMAGE_SCAN_ENABLEDtrueRead container images that have no SBOM, and conda packages from public channels' proxies, with Syft (Pro)
IMAGE_SCAN_TIMEOUT10mLongest one image or conda package scan may take; the scan is stopped after it
IMAGE_SCAN_MAX_BYTES4294967296Largest image scanned (its layers, compressed) or conda package file scanned, in bytes
IMAGE_SCAN_MAX_UNPACKED17179869184Largest image scanned once its layers are expanded, or conda package once unpacked, in bytes
IMAGE_SCAN_MAX_LAYERS128Most layers an image scanned may have
IMAGE_SCAN_MAX_PLATFORMS4Images of one multi-platform tag scanned (linux/amd64 and linux/arm64 first)
VULN_ARCHIVE_MAX_BYTES2147483648Largest OSV archive downloaded or uploaded for offline vulnerability data, in bytes; written to the system temp directory while it is imported
IMAGE_SCAN_TMP_DIRthe system temp directoryWhere an image or conda package is laid out and expanded while it is scanned; needs room for the largest one expanded. Emptied after each scan
BROWSE_GUARD_MAX_DOC1048576Documentation text kept per file for AI document search (READMEs, changelogs, guides, package descriptions), in bytes; longer text is cut, never refused

In a cluster every server keeps its own index and follows changes through Redis; a server that missed changes rebuilds its index by itself. System check shows each server's index (versions indexed, rebuilding, behind). Administrators with depot:write can ask every server to rebuild: POST /api/browse/index/rebuild.

7. API

RequestReturns
GET /api/browse/search?q=&space=&repository=&format=&type=&status=&vuln=&sort=Matching versions you can see, with cursor paging; vuln is any or a worst severity (critical, high, medium, low), see SBOMs
GET /api/browse/lanesRepositories you can see with their newest versions
GET /api/spaces/{space}/repositories/{repository}/tree?node=A level of a repository's tree
GET /api/spaces/{space}/repositories/{repository}/packages?node=A package's versions
GET /api/browse/versions/{id}A version, its files, checksums and download addresses, and its security summary (vulnerabilities, with notCovered: the components no vulnerability data covers, never counted as checked)
GET /api/browse/versions/{id}/metadata, /dependencies, /dependents, /attachments, /activityThe tabs' contents
GET /api/browse/versions/{id}/sbom/{n}What SBOM attachment n of the version (its index in /attachments) lists: the document (format, tool, the software it describes, counts) and the relationships between its components (see SBOMs)
GET /api/browse/versions/{id}/sbom/{n}/components?q=&cursor=&limit=The SBOM's components (purl, name, version, type, supplier, licences, hashes), in document order, with cursor paging; q keeps those whose name or purl contains it