A simple, lightweight UI for exploring and managing Docker/OCI container registries.
Important
I’m currently working towards the upcoming v1.0.0 release. While the current version works well, it doesn’t scale efficiently—even for relatively small projects (e.g., repositories with 100+ tags).
To address this, I’ve opened a tracking issue: #28.
Community input is welcome — feel free to share your ideas or propose improvements in the issue.
The UI can be deployed in minutes with Docker Compose:
services:
  registry-ui:
    image: ghcr.io/eznix86/docker-registry-ui:latest
    ports:
      - "8011:80"
    environment:
      - REGISTRY_URL=http://your-registry.com:5000
      - REGISTRY_AUTH=base64basicauthhereThen open the UI at: http://localhost:8011
services:
  registry-ui:
    image: ghcr.io/eznix86/docker-registry-ui:latest
    ports:
      - "8011:80"
    environment:
      - REGISTRY_URL=http://your-registry.com:5000
      - REGISTRY_AUTH=base64basicauthherehelm repo add docker-registry-ui https://eznix86.github.io/docker-registry-ui
helm repo update
helm install docker-registry-ui docker-registry-ui/docker-registry-ui \
  -n docker-registry-ui \
  --create-namespacekubectl create secret generic registry-ui-secret \
  -n docker-registry-ui \
  --from-literal=url="http://your-registry.com:5000" \
  --from-literal=auth="$(echo -n 'username:password' | base64)"Reference the secret in your Helm values:
env:
  - name: REGISTRY_URL
    valueFrom:
      secretKeyRef:
        name: registry-ui-secret
        key: url
  - name: REGISTRY_AUTH
    valueFrom:
      secretKeyRef:
        name: registry-ui-secret
        key: authFor registries with authentication, you must add the auth environment variable as a base64 encoded value of username:password
echo -n "username:password" | base64
# dXNlcm5hbWU6cGFzc3dvcmQ=Afterwards, use this value through the following environment variables:
REGISTRY_URL=https://registry.test
REGISTRY_AUTH=dXNlcm5hbWU6cGFzc3dvcmQ=The UI supports connections to multiple registries. Configure them via environment variables with suffixes:
# Default registry
REGISTRY_URL=https://repository.a.com
REGISTRY_AUTH=...
# Additional registries
REGISTRY_URL_PERSONAL=https://repository.b.com
REGISTRY_AUTH_PERSONAL=...
REGISTRY_URL_BUSINESS=https://repository.business.com
REGISTRY_AUTH_BUSINESS=...
REGISTRY_URL_CUSTOM=https://repository.whatever.com
REGISTRY_AUTH_CUSTOM=...Notes:
- 
From
v0.3.2,REGISTRY_AUTH(or its suffixed variants) can be omitted for unauthenticated registries. - 
From
v0.5.0, GitHub Container Registry is supported:REGISTRY_URL_GHCR=https://ghcr.io REGISTRY_AUTH_GHCR=base64(github-username:PAT)
The PAT requires
delete:packages, repo, write:packagespermissions. Generate a PAT. 
To contribute, set up a local development environment:
# Prepare environment variables
cp .env.example .env
# Example: echo -n "USERNAME:PASSWORD" | base64 > .env
bun install
bun run dev         # start local dev server
bun run lint        # run linter
bun run lint:fix    # auto-fix linting issues where possiblePull requests are welcome. Please ensure code is linted and tested before submission.
When deleting images, Docker Registry v2/v3 only marks them as deleted. Disk space is not automatically reclaimed. To free space, run garbage collection inside your registry container:
# Run garbage collection
bin/registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
# Optionally, remove an entire repository manually
rm -rf /var/lib/registry/docker/registry/v2/repositories/<repository_name>Further reading:
- Docker Distribution: Garbage Collection
 - Cleaning Up Registry Blobs in Kubernetes
 - DigitalOcean: Clean Up Container Registry
 - Community Guide: Reclaiming Disk Space
 - GitHub Issue: Registry Garbage Collection
 
Contributions are welcome. Whether you want to fix a bug, improve performance, or add a new feature, here’s how to get started.
git clone https://github.com/<your-username>/docker-registry-ui.git
cd docker-registry-uigit checkout -b feature/your-feature-nameUse a descriptive branch name, for example fix/tag-pagination or feature/multi-registry-auth.
cp .env.example .env
bun install
bun run devbun run lint
bun run lint:fixEnsure your code passes all checks before committing.
git commit -m "feat: add registry pagination support"
git push origin feature/your-feature-nameOpen a pull request to the main branch
Please include:
- A clear description of what your change does.
 - Screenshots or examples if relevant.
 - Links to related issues, for example 
Fixes #28. 
- Follow the existing code style and linting rules.
 - Keep commits small and descriptive.
 - Document any new features or configuration options.
 - Pick any issue listed.
 - Open an issue before contributing
 
