Library / SDK
artifact-keeper/artifact-keeper avatar
artifact-keeper/artifact-keeper

Artifact Keeper: A Rust Registry That Trades Simplicity for Breadth

Open-source universal artifact registry. Drop-in Artifactory/Nexus alternative with 40+ package formats, security scanning, WASM plugins, and edge replication.

1,178 stars161 forksRustMIT

At a glance

What is it?
Artifact Keeper is a 45+ format artifact registry written in Rust, positioned as a drop-in Artifactory or Nexus replacement. Its breadth of formats and built-in scanning come with real operational complexity, and you should verify your migration path before committing.
Who is it for?
Adopt Artifact Keeper if you need a single registry for many package formats, especially if you already run PostgreSQL and OpenSearch and want built-in Trivy and Grype scanning without stitching separate services. Skip it if you need only one or two formats and prefer a smaller operational footprint, or if you require a stable, long-term commercial support contract.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • artifact-keeper/artifact-keeper1,178 ★ · +219
Star history
Repository2026-08-232026-10-22
artifact-keeper/artifact-keeper9591.2k

219 Stars in the last 60 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

What Problem It Solves and Who It Is For

Artifact Keeper is aimed at teams that manage artifacts across many ecosystems and want to replace a commercial registry like JFrog Artifactory or Sonatype Nexus with an open-source, self-hosted option. The core pitch is breadth: 45+ package formats, from Maven and NPM to Docker/OCI, Helm, Terraform, and even HuggingFace models. If your organization builds with Java, Python, and Rust, and also ships containers and Helm charts, you might otherwise need several registries or a costly commercial product. Artifact Keeper consolidates those into one backend with a unified API and a single storage layer. The README emphasizes native protocol support, meaning each format handler speaks the package manager's own wire protocol, so clients like pip or cargo should work without special configuration. This is for engineers who already operate infrastructure and are willing to run a Rust service plus PostgreSQL, OpenSearch, and optional scanners, not for small teams looking for a quick local cache.

Architecture: A Middleware Pipeline and a Mesh of Peers

The system architecture diagram shows a clear separation of concerns. Clients (CLI tools, package managers, or a frontend) hit a backend written in Rust using the Axum web framework. That backend routes to format-specific handlers, one per package ecosystem. The backend stores metadata in PostgreSQL 16 and artifacts on the filesystem or S3. OpenSearch provides full-text search across repositories and artifacts. For security, the backend calls Trivy, Grype, and OpenSCAP. The request flow goes through a middleware pipeline: CORS, authentication (JWT, OIDC, LDAP, SAML, API keys), rate limiting, tracing and metrics, and a demo mode guard. After that, a router with over 50 route groups dispatches to format handlers or core handlers for repos, artifacts, users, and auth. The README also describes Borg Replication, a recursive peer mesh with swarm-based artifact distribution and P2P transfers. That suggests a design where multiple Artifact Keeper instances can form a network and share artifacts directly, rather than a simple master-slave replication. The exact replication protocol is not detailed in the README, so you would need to read the docs or source to understand consistency guarantees.

Security Scanning: Dual Scanners and a Policy Engine

Every artifact upload goes through a security pipeline, according to the README. The flow starts with SHA-256 deduplication. If the artifact is new, both Trivy (filesystem scanner) and Grype (dependency scanner) analyze it. If it was already scanned, results are cached. The findings are combined into a vulnerability score from A to F, based on severity and count. That score feeds a policy engine, which either allows the artifact to be stored or quarantines it. Policies are configurable, so you can block or quarantine based on your own rules. The dual-scanner approach is a real strength: Trivy covers filesystem and container analysis, while Grype handles dependency trees. The README also mentions OpenSCAP for compliance scanning, though it is not described in detail. One important caveat is around container images. The base docker-compose.yml wires TRIVY_URL for legacy Trivy server filesystem scanning only. To get proper Trivy container-image reports, you must set TRIVY_ADAPTER_URL and enable the scanner-adapter service. Without that, images are still covered by Grype in registry mode, but you lose the dedicated Trivy image report. This is a concrete configuration trap that you must handle during setup.

WASM Plugins: Extending Formats Beyond the Built-In 45

The WASM plugin system is one of the most distinctive features. It uses WebAssembly with a WIT-based interface and the Wasmtime runtime. This means you can write custom format handlers in any language that compiles to WASM, without rebuilding the core Rust backend. The README explicitly says custom formats can be added via this plugin system. For teams with internal or niche package formats, this is a genuine differentiator compared to Artifactory or Nexus, where extending formats often requires writing Java plugins or using generic repository types. However, the README does not provide examples of how to write a WIT interface or how to package and deploy a plugin. You would need to consult the documentation or source code. The plugin system also introduces a security boundary: WASM runs in a sandbox, but you still need to trust the plugin author. The trade-off is clear: flexibility comes at the cost of learning a new plugin API and managing a separate build and deployment process for plugins.

Getting It Running: Docker Compose and Environment Variables

The README references a docker-compose.yml as the primary way to get started. It wires together the backend, PostgreSQL, OpenSearch, and the scanners. The key environment variable mentioned is TRIVY_URL for the legacy Trivy server, and TRIVY_ADAPTER_URL for the dedicated container image scanner. To enable container image scanning, you uncomment the TRIVY_ADAPTER_URL line and the scanner-adapter service in docker-compose.yml. The scanner-adapter implements the Harbor Pluggable Scanner API and pulls images back from the registry, so it must be given an address of the backend that is reachable from the adapter. That sentence is truncated in the README, but the implication is clear: you need to configure the backend URL that the adapter can use to reach the registry. The README also mentions a demo instance at demo.artifactkeeper.com and documentation at artifactkeeper.com/docs. For a production deployment, you would likely need to set up PostgreSQL 16 and OpenSearch separately or use the compose file as a base. The README does not list all configuration keys, so you must rely on the docs for details like storage backend selection, authentication providers, and policy rules.

Limitations and Failure Modes

The most obvious limitation is operational complexity. Running Artifact Keeper means managing PostgreSQL, OpenSearch, Trivy, Grype, and optional OpenSCAP, plus the backend itself. That is a significant infrastructure footprint compared to a single-binary registry like Gitea or a simple S3-backed proxy. The README does not mention a lightweight mode or a SQLite option, so every deployment requires a full database and search engine. Another failure mode is the container scanning configuration trap. If you forget to set TRIVY_ADAPTER_URL, you get a false sense of security because images are still scanned by Grype, but the README says no Trivy image report is produced. That could lead to gaps in vulnerability coverage. The README also does not specify how the policy engine behaves when scanners fail or time out. If Trivy or Grype goes down, does the upload fail, get quarantined, or proceed without a score? The documentation would need to clarify that. Finally, the 45+ formats claim is broad, but the README lists aliases like Yarn and Bower under NPM, which may mean those clients are supported through the NPM protocol, not as separate native handlers. That is fine, but you should verify that your exact client version works with the current release.

Alternatives: Artifactory, Nexus, and the Open-Source Middle Ground

The obvious commercial alternatives are JFrog Artifactory and Sonatype Nexus Repository Pro. Both support a wide range of formats, but they are proprietary and require licensing fees. Artifactory has a strong migration story, and the README even includes built-in tooling to migrate from Artifactory, which is a direct acknowledgment of that competitor. Nexus has a smaller format list but is also widely used. On the open-source side, you could use a combination of format-specific registries: Harbor for containers, PyPI server for Python, and a simple static file server for Maven. That approach avoids the operational weight of Artifact Keeper but requires multiple services and no unified search or policy engine. Another open-source option is Gitea with its built-in package registry, which supports a handful of formats (npm, PyPI, Maven, etc.) but far fewer than 45+. The key difference is scope: Gitea is a lightweight forge with a package registry as a side feature, while Artifact Keeper is a dedicated registry with a plugin system and scanning pipeline. If you only need a few formats, the simpler tools may be easier to maintain. If you need broad coverage and a single control plane, Artifact Keeper's approach is different from assembling multiple tools.

Maintenance and Upgrade Cost, and License Implications

The project is licensed under MIT, which is permissive and allows commercial use, modification, and redistribution with attribution. That is a low-license-friction choice. The repository is actively maintained, with recent releases v1.8.1 and v1.7.8 in August 2026, and the default branch is main. The release cadence suggests regular updates. However, the README does not provide a migration guide for upgrades between versions, nor does it mention a database migration tool. Given the complexity of the schema (PostgreSQL with OpenSearch indexes), upgrading could involve careful coordination of backend, database, and search index versions. The WASM plugin system also means that plugin compatibility with the host runtime must be maintained across releases. The README mentions hardened containers based on Red Hat UBI 9, non-root execution, and no shell or package manager in the runtime image, which is good for security but also means you cannot exec into the container to debug easily. You would rely on logs and metrics. The documentation and demo are available, but the README is the primary source here, and it is sparse on operational details like backup and restore procedures. You should verify those before relying on Artifact Keeper in production.

Editorial conclusion

Adopt Artifact Keeper if you need a single registry for many package formats, especially if you already run PostgreSQL and OpenSearch and want built-in Trivy and Grype scanning without stitching separate services. Skip it if you need only one or two formats and prefer a smaller operational footprint, or if you require a stable, long-term commercial support contract. Before adopting, verify that your specific package managers' wire protocols work against the current version, that your storage backend (filesystem or S3) meets your scale needs, and that the WASM plugin system supports the custom formats you need. Also confirm the TRIVY_ADAPTER_URL setup for container image scanning, because without it you get only Grype registry-mode coverage for images.

Frequently asked questions

What package formats does artifact-keeper support?

It claims 45 or more. Its own tables enumerate 36 rows across languages and runtimes, containers, system packages, configuration management, machine learning, editor extensions, schemas and other, with Conda and Helm each appearing twice, so 34 distinct packages are named.

Does artifact-keeper scan container images with Trivy by default?

No. The base compose file wires the legacy Trivy server for filesystem and container runtime rootfs scanning only. First class container image reports need a second adapter URL set and the adapter service uncommented, and without it images are still covered by the other scanner in registry mode.

How does artifact-keeper extend its registry to new formats?

With a WebAssembly plugin system, using WIT-based interfaces on a Wasmtime runtime, so a custom format handler can be added without recompiling the backend. The plugin contracts are published as a separate package in the repository.

What database does artifact-keeper use?

PostgreSQL 16, with the default connection URL in the environment example being a local instance with a two-word username and the same word as the password. The pool defaults to 50 open connections and 5 idle, with a 5 second acquire timeout kept short so callers fail fast rather than queue.

Is the artifact-keeper compose file safe for production?

No, and its own header says so. It states the file is a starting point, that credentials are hardcoded, that volumes use the local driver and that no resource limits or redundancy are configured, and it lists managed databases, external storage, real certificates and secrets management as the things to substitute.

What authentication methods does artifact-keeper support?

JWT, OpenID Connect, LDAP, SAML 2.0 and API tokens, handled in a middleware pipeline that also applies CORS, rate limiting, tracing and metrics, and a demo mode guard ahead of the router.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/artifact-keeper-artifact-keeper.svg)](https://hysenlabs.com/projects/artifact-keeper-artifact-keeper)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/artifact-keeper-artifact-keeper.svg)](https://hysenlabs.com/projects/artifact-keeper-artifact-keeper)

Was this useful?