{"id":22631274,"url":"https://github.com/quiq/registry-ui","last_synced_at":"2026-06-23T08:00:35.469Z","repository":{"id":30629476,"uuid":"122079631","full_name":"Quiq/registry-ui","owner":"Quiq","description":"Web UI for Docker Registry","archived":false,"fork":false,"pushed_at":"2025-11-27T16:39:22.000Z","size":5313,"stargazers_count":478,"open_issues_count":1,"forks_count":105,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-11-30T08:42:54.088Z","etag":null,"topics":["container-image","container-registry","docker","docker-image","docker-registry","docker-registry-ui","image-history","manifest","oci-image","purging-tags","registry-ui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Quiq.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-02-19T15:11:01.000Z","updated_at":"2025-11-29T11:21:45.000Z","dependencies_parsed_at":"2024-05-21T15:27:54.520Z","dependency_job_id":"57f436d6-1be5-4817-8bf4-a02eafe0b691","html_url":"https://github.com/Quiq/registry-ui","commit_stats":null,"previous_names":["quiq/registry-ui","quiq/docker-registry-ui"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/Quiq/registry-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quiq%2Fregistry-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quiq%2Fregistry-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quiq%2Fregistry-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quiq%2Fregistry-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Quiq","download_url":"https://codeload.github.com/Quiq/registry-ui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quiq%2Fregistry-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34680621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container-image","container-registry","docker","docker-image","docker-registry","docker-registry-ui","image-history","manifest","oci-image","purging-tags","registry-ui"],"created_at":"2024-12-09T02:07:57.437Z","updated_at":"2026-06-23T08:00:35.463Z","avatar_url":"https://github.com/Quiq.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Registry UI\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/quiq/registry-ui)](https://goreportcard.com/report/github.com/quiq/registry-ui)\n\nA lightweight, fast web interface for browsing and managing Docker Registry and OCI-compatible registries.\n\nDocker image: [quiq/registry-ui](https://hub.docker.com/r/quiq/registry-ui/tags/)\n\n### Features\n\n- Browse repositories, tags, and nested repository trees at any depth\n- View full image details: layers, config, and command history\n- Support for Docker and OCI image formats, including multi-platform image indexes\n- Event listener to capture registry notifications, stored in SQLite or MySQL\n- Built-in CLI for tag retention: purge tags older than X days while keeping at least Y tags\n- Auto-discovery of authentication methods (basic auth, token service, keychain, etc.)\n- Repository list and tags are cached and refreshed in the background\n\n\u003e **Note:** The UI does not handle TLS or authentication. Place it behind a reverse proxy such as nginx, oauth2_proxy, or similar.\n\n### Quick start\n\nStart a Docker registry on your host (if you don't already have one):\n\n    docker run -d --network host --name registry registry\n\nPush any image to `127.0.0.1:5000/owner/name`:\n\n    docker tag alpine:edge 127.0.0.1:5000/owner/name\n    docker push 127.0.0.1:5000/owner/name\n\nRun Registry UI and open http://127.0.0.1:8000 in your browser:\n\n    docker run --rm --network host \\\n        -e REGISTRY_HOSTNAME=127.0.0.1:5000 \\\n        -e REGISTRY_INSECURE=true \\\n        --name registry-ui quiq/registry-ui\n\n### Configuration\n\nConfiguration is stored in `config.yml` with self-descriptive options. Any option can be\noverridden via environment variables using `SECTION_KEY_NAME` syntax,\ne.g. `LISTEN_ADDR`, `PERFORMANCE_TAGS_ASYNC_REFRESH_INTERVAL`, `REGISTRY_HOSTNAME`.\n\nTo pass a full config file:\n\n    docker run -d -p 8000:8000 -v /local/config.yml:/opt/config.yml:ro quiq/registry-ui\n\nTo use a custom root CA certificate:\n\n    -v /local/rootcacerts.crt:/etc/ssl/certs/ca-certificates.crt:ro\n\nTo persist the SQLite database for event data:\n\n    -v /local/data:/opt/data\n\nEnsure `/local/data` is owned by `nobody` (uid 65534 on Alpine).\n\nThe container supports `--read-only` mode. If you use the event listener, mount the data folder\nin read-write mode as shown above so the SQLite database remains writable.\n\nTo set a custom timezone:\n\n    -e TZ=America/Los_Angeles\n\n### Event listener\n\nTo receive notification events, configure your Docker Registry:\n\n    notifications:\n      endpoints:\n        - name: registry-ui\n          url: http://registry-ui.local:8000/event-receiver\n          headers:\n            Authorization: [Bearer abcdefghijklmnopqrstuvwxyz1234567890]\n          timeout: 1s\n          threshold: 5\n          backoff: 10s\n          ignoredmediatypes:\n            - application/octet-stream\n\nAdjust the URL and token as appropriate.\nIf you run the UI under a non-default base path (e.g. `/ui`), use `/ui/event-receiver` as the endpoint path.\n\n### Using MySQL instead of SQLite\n\nTo use MySQL, update `event_database_driver` and `event_database_location` in the config file.\nCreate the database referenced in the DSN beforehand. Required privileges: `SELECT`, `INSERT`, `DELETE`.\n\nTo create the table manually (avoids granting `CREATE`):\n\n\tCREATE TABLE events (\n\t\tid INTEGER PRIMARY KEY AUTO_INCREMENT,\n\t\taction CHAR(4) NULL,\n\t\trepository VARCHAR(100) NULL,\n\t\ttag VARCHAR(100) NULL,\n\t\tip VARCHAR(45) NULL,\n\t\tuser VARCHAR(50) NULL,\n\t\tcreated DATETIME NULL\n\t);\n\n### Tag purging\n\nFirst, enable tag deletion in your Docker Registry config:\n\n    storage:\n      delete:\n        enabled: true\n\nThen schedule a cron job to purge old tags (assumes the container is already running):\n\n    10 3 * * * root docker exec -t registry-ui /opt/registry-ui -purge-tags\n\nPreview what would be purged with dry-run mode:\n\n    docker exec -t registry-ui /opt/registry-ui -purge-tags -dry-run\n\n\u003e **Note:** Purging tags only removes tag references. To reclaim disk space, run garbage collection on your registry afterwards.\n\n### Screenshots\n\nRepository list:\n\n![image](screenshots/1.png)\n\nTag list:\n\n![image](screenshots/2.png)\n\nImage Index info:\n\n![image](screenshots/3.png)\n\nImage info:\n\n![image](screenshots/4.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquiq%2Fregistry-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquiq%2Fregistry-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquiq%2Fregistry-ui/lists"}