Skip to content

Getting Started

mise-server is a pull-through cache proxy for package registries. It sits between your tools and upstream registries (npm, PyPI, Go, etc.), caching packages locally so subsequent installs are fast and work offline.

Quick Start with Docker Compose

The fastest way to get running:

bash
curl -O https://raw.githubusercontent.com/endevco/mise-server/main/docker-compose.yml
docker compose up -d

This starts:

  • mise-server on port 3000
  • PostgreSQL for metadata storage
  • MinIO for S3-compatible blob storage

Point Your Tools at mise-server

npm

bash
npm config set registry http://localhost:3000/npm/
npm install express  # cached on first install

pip

bash
pip install --index-url http://localhost:3000/pypi/simple/ requests

Go

bash
export GOPROXY=http://localhost:3000/go/
go get github.com/gorilla/mux

Cargo

Add to .cargo/config.toml:

toml
[source.crates-io]
replace-with = "mise-server"

[source.mise-server]
registry = "sparse+http://localhost:3000/cargo/"

Docker

bash
# Pull through mise-server
docker pull localhost:3000/library/nginx:latest

See Registries for all supported registries and their configuration.

What Happens

  1. Client requests a package from mise-server
  2. mise-server checks its cache (S3 or local)
  3. On cache miss, fetches from the upstream registry
  4. Stores the package as a BLAKE3-hashed blob
  5. Returns the package to the client
  6. Subsequent requests are served from cache

Next Steps

Licensed under FSL-1.1-ALv2. Maintained by @jdx.