kalbasit/ncps

Nix binary cache proxy service -- with local caching and signing.

241 stars10 forksUpdated Jan 26, 2026
npx skills add kalbasit/ncps

README

ncps logo

ncps: Nix Cache Proxy Server

A high-performance proxy server that accelerates Nix dependency retrieval across your local network

Go Report Card License: MIT Sponsor

What is ncps?

ncps acts as a local binary cache for Nix, fetching store paths from upstream caches (like cache.nixos.org) and storing them locally. This reduces download times and bandwidth usage, especially beneficial when multiple machines share the same dependencies.

Key Features

  • Multi-upstream cache with automatic failover
  • Flexible storage: local filesystem or S3-compatible (AWS S3, MinIO, etc.)
  • Database support: SQLite, PostgreSQL, or MySQL/MariaDB
  • High availability with Redis distributed locking for zero-downtime deployments
  • Smart caching: LRU management with configurable size limits
  • Secure signing: Signs cached paths with private keys for integrity
  • Observability: OpenTelemetry and Prometheus metrics support
  • Easy setup: Simple configuration and deployment

Quick Start

Get ncps running in minutes with Docker:

# Pull images and create storage
docker pull alpine && docker pull ghcr.io/kalbasit/ncps
docker volume create ncps-storage
docker run --rm -v ncps-storage:/storage alpine /bin/sh -c \
  "mkdir -m 0755 -p /storage/var && mkdir -m 0700 -p /storage/var/ncps && mkdir -m 0700 -p /storage/var/ncps/db"

# Initialize database
docker run --rm -v ncps-storage:/storage ghcr.io/kalbasit/ncps \
  /bin/dbmate --url=sqlite:/storage/var/ncps/db/db.sqlite up

# Start the server
docker run -d --name ncps -p 8501:8501 -v ncps-storage:/storage ghcr.io/kalbasit/ncps \
  /bin/ncps serve \
  --cache-hostname=your-ncps-hostname \
  --cache-storage-local=/storage \
  --cache-database-url=sqlite:/storage/var/ncps/db/db.sqlite \
  --cache-upstream-url=https://cache.nixos.org \
  --cache-upstream-public-key=cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=

Your cache will be available at http://localhost:8501. See the Quick Start Guide for more options including S3 storage.

Documentation

  • Getting Started - Quick start guide, core concepts, and architecture
  • Installation - Docker, Docker Compose, Kubernetes, Helm, NixOS
  • Configuration - Complete configuration reference, storage and database options
  • Deployment - Single-instance and high-availability deployment guides
  • Usage - Client setup and cache management
  • Operations - Monitoring, troubleshooting, backup and upgrades
  • Architecture - System architecture and design details
  • Development - Contributing, development setup, and testing

Installation Methods

MethodBest ForDocumentation
DockerQuick setup, single-instanceDocker Guide
Docker ComposeAutomated setup with dependenciesDocker Compose Guide
KubernetesProduction, manual K8s deploymentKubernetes Guide
Helm ChartProduction, simplified K8s managementHelm Guide
NixOSNixOS systems with native integrationNixOS Guide

Deployment Modes

  • Single-instance: Simple deployment with local or S3 storage, SQLite or shared database
  • High Availability: Multiple instances with S3 storage, PostgreSQL/MySQL, and Redis for zero-downtime operation

See the Deployment Guide for detailed setup instructions.

Support the Project

If you find ncps useful, please consider supporting its development! Sponsoring helps maintain the project, fund new features, and ensure long-term sustainability.

[![Sponsor

...

Read full README

Publisher

kalbasitkalbasit

Statistics

Stars241
Forks10
Open Issues10
LicenseMIT License
CreatedNov 28, 2024