artifact-keeper · GitHub

✨ Read this insightful post from Hacker News 📖

📂 **Category**:

✅ **What You’ll Learn**:

Artifact Keeper - Your packages. Your servers. Your freedom.

Your packages. Your servers. Your freedom.

Website ·
Docs ·
Live Demo ·
MIT Licensed

GitHub Stars
License
45+ Formats
Rust


A full-featured, enterprise-grade artifact registry you can self-host in minutes. Drop-in replacement for JFrog Artifactory and Sonatype Nexus with zero feature gates — security scanning, SSO, replication, all 45+ package formats — everything ships in the open-source release.

No open-core. No “enterprise edition.” No surprise invoices.

Artifact Keeper Web Dashboard

Repository Description Stack
artifact-keeper Backend server, CLI, and Docker deployment Rust, Axum, PostgreSQL, Meilisearch
artifact-keeper-web Web frontend Next.js 15, TypeScript, Tailwind CSS, shadcn/ui
artifact-keeper-ios iOS & macOS app SwiftUI, Swift 6, Alamofire
artifact-keeper-android Android app Jetpack Compose, Kotlin, Material 3
artifact-keeper-api OpenAPI 3.1 spec (165 endpoints) TypeScript + Rust SDK generation
artifact-keeper-example-plugin Example WASM plugin (Unity .unitypackage) Rust, WIT, Wasmtime

45+ Package Formats — Native protocol support. Not a generic blob store with format labels. Your package managers (pip install, npm install, docker pull, cargo add, helm install, go get, etc.) talk directly to Artifact Keeper using their native protocols.

Security Scanning — Automated vulnerability detection with Trivy and Grype. Policy engine with severity thresholds, quarantine workflows, and scan-before-download enforcement.

WASM Plugin System — Extend with custom format handlers via WebAssembly. Ship your own package format support without forking the backend.

Edge Replication — Mesh-based artifact distribution with swarm sync and P2P transfers between nodes. Put caches close to your build agents.

SSO & Multi-Auth — OpenID Connect, LDAP, SAML 2.0, JWT, and API tokens. RBAC with per-repository permissions.

Artifactory Migration — Built-in tooling to migrate repositories, artifacts, users, and permissions from JFrog Artifactory. One command.

Full-Text Search — Meilisearch-powered search across all repositories, packages, and artifact metadata.

Manage your registries from anywhere. Monitor builds, browse repositories, trigger security scans, and administer users — all from native mobile apps with adaptive layouts.

Artifact Keeper macOS App

Artifact Keeper Android App
Android
Artifact Keeper iOS App
iOS

A full management interface for repositories, packages, security policies, user administration, SSO configuration, replication topology, and operational analytics.

Artifact Keeper Web Dashboard

# Clone and start with Docker Compose
git clone https://github.com/artifact-keeper/artifact-keeper.git
cd artifact-keeper
docker compose up -d

# That's it. Visit http://localhost:9080

Or pull the pre-built images directly:

# Backend (required)
docker pull ghcr.io/artifact-keeper/artifact-keeper-backend:latest

# Web dashboard (recommended)
docker pull ghcr.io/artifact-keeper/artifact-keeper-web:latest

Full deployment guides for Docker, Kubernetes, and AWS are in the docs.

graph TB
    subgraph Clients["Clients"]
        CLI["CLI & Package Managers
pip · npm · docker · cargo
helm · go · maven · ...
"] WebApp["Web Dashboard
Next.js 15 · Desktop Browser"] iOS["iPhone · iPad · Mac
SwiftUI · Swift 6"] Android["Android Phone · Tablet
Jetpack Compose · Kotlin"] end subgraph Core["Artifact Keeper Backend"] API["REST API Gateway
Rust · Axum"] Handlers["45+ Format Handlers
Native protocol support"] WASM["WASM Plugin Runtime
Wasmtime · WIT"] Auth["Auth Engine
OIDC · LDAP · SAML · JWT"] Policy["Policy Engine
Severity gates · Quarantine"] end subgraph Data["Data Layer"] PG[("PostgreSQL 16
Metadata & config")] Storage[("Storage
S3 / Filesystem")] Meili[("Meilisearch
Full-text search")] end subgraph Security["Security Scanning"] Trivy["Trivy
Container & FS scanning"] Grype["Grype
Dependency scanning"] end subgraph Edge["Edge Replication"] Peer1["Edge Node"] Peer2["Edge Node"] Peer3["Edge Node"] end CLI -->|"Native protocols"| API WebApp --> API iOS --> API Android --> API API --> Handlers API --> Auth Handlers --> WASM Handlers --> Policy API --> PG Handlers --> Storage API --> Meili Policy --> Trivy Policy --> Grype API <-->|"Borg Replication"| Peer1 API <-->|"Borg Replication"| Peer2 API <-->|"Borg Replication"| Peer3 Peer1 <-->|"P2P Mesh"| Peer2 Peer2 <-->|"P2P Mesh"| Peer3 Peer1 <-->|"P2P Mesh"| Peer3 style Core fill:#1a1a2e,stroke:#e94560,color:#fff style Data fill:#16213e,stroke:#0f3460,color:#fff style Security fill:#1a1a2e,stroke:#e94560,color:#fff style Edge fill:#0f3460,stroke:#533483,color:#fff style Clients fill:#16213e,stroke:#0f3460,color:#fff style API fill:#e94560,stroke:#e94560,color:#fff style Handlers fill:#e94560,stroke:#e94560,color:#fff style WASM fill:#533483,stroke:#533483,color:#fff style Auth fill:#e94560,stroke:#e94560,color:#fff style Policy fill:#e94560,stroke:#e94560,color:#fff style PG fill:#0f3460,stroke:#0f3460,color:#fff style Storage fill:#0f3460,stroke:#0f3460,color:#fff style Meili fill:#0f3460,stroke:#0f3460,color:#fff style Trivy fill:#533483,stroke:#533483,color:#fff style Grype fill:#533483,stroke:#533483,color:#fff style Peer1 fill:#533483,stroke:#533483,color:#fff style Peer2 fill:#533483,stroke:#533483,color:#fff style Peer3 fill:#533483,stroke:#533483,color:#fff style CLI fill:#0f3460,stroke:#0f3460,color:#fff style WebApp fill:#0f3460,stroke:#0f3460,color:#fff style iOS fill:#0f3460,stroke:#0f3460,color:#fff style Android fill:#0f3460,stroke:#0f3460,color:#fff



Loading


Contributions are welcome. Pick an issue, open a PR, or start a discussion. The backend is Rust, the frontend is TypeScript/React, and the mobile apps are native Swift and Kotlin.

MIT. Every feature. No exceptions.

⚡ **What’s your take?**
Share your thoughts in the comments below!

#️⃣ **#artifactkeeper #GitHub**

🕒 **Posted on**: 1770370147

🌟 **Want more?** Click here for more info! 🌟

By

Leave a Reply

Your email address will not be published. Required fields are marked *