LibWorld

Getting started

Four steps to a working mirror, then where to read more. Every command on this page is a real verb — checked against the CLI, not written from memory.

Start here

  1. 01

    Run it

    One process serves every backend. It starts with no database and no object store, keeping blobs on local disk. It serves pulls like that, but the catalog lives in Postgres, so until one is configured listing and pinning are refused with a 503 that says so. One script sets up a local database.

    bash
    # server, build service, and the world CLI
    make build
    # put world on your PATH (~/.local/bin)
    make -C lib-world-cli-cpp install
    
    # optional: a local Postgres for the catalog
    ./lib-world-server-cpp/scripts/pg-local.sh up
    set -a; . ~/.lib-world/postgres-local.env; set +a
    
    # serves on 127.0.0.1:10220, and fails if it does not
    make server-start
    
    # health, backends, and what each one verifies against
    world status
  2. 02

    Point a client at it

    Each backend speaks its ecosystem's real protocol, so adopting it is a config line rather than a migration. npm is the shortest example; the exact line for each of the thirteen backends is on its own page.

    ~/.npmrc
    registry=http://HOST:10220/npm/
  3. 03

    Warm it before you need it

    A cache can only serve what it has already been asked for once. Prefetch runs as a background job you can poll, so priming a whole dependency tree does not block on one request.

    bash
    world prefetch pip requests
    world prefetch docker alpine:3.19
    world git add torvalds/linux
    
    # what you actually have now
    world ls --backend pip --limit 20
  4. 04

    Keep what matters

    A mirror that only grows fills the disk. Retention reclaims by age and last use; anything pinned is protected, and every change to the mirror is recorded.

    bash
    world pin cargo <blob-key>
    world gc
    world audit --since 2026-09-01