Skip to main content

Web UI Reference

Reference for the Angos web interface.


Configuration

[ui]
enabled = true
name = "My Registry"
OptionTypeDefaultDescription
enabledboolfalseEnable the web interface
namestring"angos"Registry name displayed in the header

URL Structure

URLs follow Docker reference format:

URLViewDescription
/Repository listAll configured repositories
/{repository}Namespace listImages within a repository
/{repository}/{namespace}Manifest listAll manifests for an image
/{repository}/{namespace}:{tag}Manifest detailsManifest by tag
/{repository}/{namespace}@{digest}Manifest detailsManifest by digest

Examples:

  • / - List all repositories
  • /library - List namespaces in the "library" repository
  • /library/nginx - List all nginx manifests
  • /library/nginx:latest - Details for the latest tag
  • /library/nginx@sha256:abc123... - Details for a specific digest

API Endpoints

UI Configuration

GET /_ui/config

Returns the UI configuration.

Response:

{
"name": "My Registry"
}

Static Assets

GET /_ui/*

Serves static UI assets (JavaScript, CSS, fonts).


Access Control Actions

UI-specific actions for access policies:

ActionDescription
ui-assetStatic files (JS, CSS, images)
ui-configUI configuration endpoint (/_ui/config)
list-repositoriesRepository list view
list-namespacesNamespace list view
list-revisionsManifest list view
list-uploadsActive uploads view

Minimal Policy for UI Access

[global.access_policy]
default_allow = false
rules = [
# Allow UI to load
"request.action == 'ui-asset' || request.action == 'ui-config'",

# Allow authenticated users to browse
"identity.username != '' && request.action.startsWith('list-')",

# Allow reading manifests
"identity.username != '' && request.action == 'get-manifest'"
]

Read-Only Policy

rules = [
"request.action == 'ui-asset' || request.action == 'ui-config'",
"identity.username != '' && request.action.startsWith('list-')",
"identity.username != '' && request.action == 'get-manifest'",
"identity.username != '' && request.action == 'get-blob'"
]

Full Access Policy

rules = [
"request.action == 'ui-asset' || request.action == 'ui-config'",
"identity.username != ''"
]

Views

Repository List

Repository ListRepository List

Displays all configured repositories with:

  • Repository name
  • Namespace count
  • Feature badges:
    • Pull-through: Has upstream configuration
    • Immutable: Immutable tags enabled

Namespace List

Namespace ListNamespace List

Displays images within a repository:

  • Image name (namespace)
  • Manifest count
  • Upload count (if any in progress)
  • Repository configuration summary

Manifest List

Manifest ListManifest List

Tree view of all manifests:

  • Multi-platform indexes with expandable children
  • Platform badges (e.g., linux/amd64, linux/arm64)
  • Attestations badges: SBOM, SLSA, signature, etc.
  • Tags as clickable badges
  • Digest (shortened, click to copy full)
  • Push time
  • Last pull time (if tracked)

Manifest Details

Manifest DetailsManifest Details

Complete manifest information:

  • Header: Digest, media type, size
  • Tags: List with delete buttons
  • Layers/Children: For images or indexes
  • Annotations: Expandable metadata
  • Files: For ORAS artifacts with download links
  • Referrers: Linked signatures, SBOMs, etc.
  • Parent: Link to parent index if applicable

Uploads

UploadsUploads

Shows in-progress blob uploads:

  • Upload UUID
  • Current size
  • Start time
  • Cancel button

Interactive Features

Delete Operations

Delete buttons require double-click confirmation:

  1. First click: Arms the button (changes to red)
  2. Second click: Executes the deletion
  3. Click elsewhere: Disarms

Deletable items:

  • Tags (removes tag, keeps the manifest unless a retention policy allows its deletion)
  • Manifests (by digest)
  • Uploads (cancels in-progress uploads)

Copy to Clipboard

Click on digests to copy the full value.

Theme Toggle

Toggle between light and dark themes using the header button. Preference is saved in browser local storage.

Dark and Light Theme

Annotations Expansion

Click [+] to expand annotation values. Well-known annotation keys are displayed with friendly names:

  • org.opencontainers.image.title → Title
  • org.opencontainers.image.description → Description
  • org.opencontainers.image.version → Version
  • org.opencontainers.image.created → Created
  • org.opencontainers.image.source → Source

ORAS Artifacts

ORAS FilesORAS Files

For OCI artifacts (non-container content), the UI displays:

  • Filename (from annotations or media type)
  • Media type
  • Size
  • Download button

Download URL format:

/v2/{namespace}/blobs/{digest}

Platform Display

Multi-platform images show platform information:

BadgeMeaning
linux/amd64Linux on x86_64
linux/arm64Linux on ARM64
linux/arm/v7Linux on ARMv7
windows/amd64Windows on x86_64
unknownPlatform not specified

Error States

StateDisplay
LoadingSpinner animation
Not found404 message with navigation
UnauthorizedLogin prompt or 401 message
Forbidden403 message explaining access denied
Server error500 message with retry option

Browser Requirements

  • Modern browser with JavaScript enabled
  • ES2020+ support (Chrome 80+, Firefox 74+, Safari 14+, Edge 80+)
  • CSS Grid and Flexbox support