#artifact-registry #storage #package #mise #tcp-port #bind-address #curl

app entrepot

Artifact registry for mise tools and garni packages

1 unstable release

Uses new Rust 2024

new 0.1.0 Feb 21, 2026

#3 in #tcp-port

FSL-1.1-ALv2

20KB
305 lines

entrepot

Artifact registry server for mise tools and garni packages. A lightweight HTTP service for uploading, downloading, and managing versioned artifacts backed by filesystem storage.

Install

cargo install --path .

Usage

entrepot --port 3000 --data-dir ./data

Options

Flag Env Default Description
--port, -p ENTREPOT_PORT 3000 Port to listen on
--data-dir, -d ENTREPOT_DATA_DIR ./data Data directory for artifact storage
--bind ENTREPOT_BIND 0.0.0.0 Bind address

Set RUST_LOG to control log verbosity (e.g. RUST_LOG=info, RUST_LOG=entrepot=debug).

API

Health check

GET /health

Returns {"status": "ok"}.

Upload artifact

PUT /v1/artifacts/:name/:version

Body must be raw bytes (e.g. a tarball). Returns 201 Created with artifact metadata. Returns 409 Conflict if the artifact already exists — uploads are immutable.

Download artifact

GET /v1/artifacts/:name/:version

Returns the raw artifact bytes with content-type: application/octet-stream. Returns 404 if not found.

Delete artifact

DELETE /v1/artifacts/:name/:version

Returns 204 No Content. Returns 404 if not found.

List artifacts

GET /v1/artifacts

Returns a JSON array of artifact names.

List versions

GET /v1/artifacts/:name

Returns a JSON array of version metadata objects, sorted by version.

Artifact metadata

Each version has associated metadata:

{
  "name": "my-tool",
  "version": "1.0.0",
  "size": 10485760,
  "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "created_at": "2025-02-21T12:00:00Z"
}

Examples

# Upload
curl -X PUT http://localhost:3000/v1/artifacts/my-tool/1.0.0 \
  --data-binary @artifact.tar.gz

# Download
curl http://localhost:3000/v1/artifacts/my-tool/1.0.0 -o artifact.tar.gz

# List all artifacts
curl http://localhost:3000/v1/artifacts

# List versions
curl http://localhost:3000/v1/artifacts/my-tool

# Delete
curl -X DELETE http://localhost:3000/v1/artifacts/my-tool/1.0.0

Storage layout

Artifacts are stored on the filesystem under --data-dir:

data/
└── <name>/
    └── <version>/
        ├── artifact.tar.gz
        └── meta.json

Development

Requires mise (optional, for task runner):

mise run build   # cargo build
mise run test    # cargo test
mise run dev     # start dev server on port 3000

Or use cargo directly:

cargo build
cargo test
cargo run -- --port 3000

License

FSL-1.1-ALv2 — converts to Apache 2.0 on 2027-02-21.

Dependencies

~28MB
~432K SLoC