Installation
Requirements
Use Node.js 24 for local development, or Docker with Compose for the complete stack. An existing registry must expose Registry HTTP API V2; the bundled stack uses the official registry:3.1.2 image.
Complete Docker Compose stack
git clone https://github.com/crateview/registry-ui.git
cd registry-ui
docker compose pull
docker compose up -d
Open http://localhost:3000. Compose downloads the released ghcr.io/crateview/registry-ui:v0.1.0 image and starts the registry on an internal Docker network. Registry storage persists in the registry-data volume. Only the frontend port is published, bound to loopback by default.
Push an image through the same origin:
docker pull alpine:latest
docker tag alpine:latest localhost:3000/alpine:latest
docker push localhost:3000/alpine:latest
Use an existing registry
git clone https://github.com/crateview/registry-ui.git
cd registry-ui
npm ci
cp .env.example .env
Set the upstream in .env, then start development mode:
NUXT_REGISTRY_UPSTREAM=http://127.0.0.1:5000
npm run dev
The UI runs on port 3000 with hot module replacement. When the frontend runs inside a container, 127.0.0.1 means that container. Use a reachable service address, such as http://registry:5000, instead.
Production Node server
npm run build
NUXT_REGISTRY_UPSTREAM=http://127.0.0.1:5000 HOST=127.0.0.1 PORT=3000 npm start
The production Node process reads actual environment variables, not .env automatically. Configure your process manager or container environment accordingly. Serve HTTPS for remote authenticated use.
Crateview needs its Nitro server for authentication and API proxying. Serving only the frontend files as a static website will not provide a working registry UI.
Continue with configuration before exposing the service beyond your own machine.
Build from source
Published images support Linux amd64. To build locally instead:
docker compose -f compose.yaml -f compose.build.yaml up --build -d
