PulpUI is a community driven single-page application that talks to a running pulpcore instance over its REST API, giving that content - across whichever plugins your Pulp deployment has installed - a shared, consistent web UI instead of requiring the CLI or raw API calls.
- Task Management
- User / Group / Role management
- Content Signing Keys
- Cross-plugin search
- Ansible (repositories, remotes, collections, namespaces, approvals, imports)
- File (repositories, remotes)
- RPM (content)
- Container (execution environments, tags, manifests)
- Node.js >= 22.32.2
- npm >= 10
- Python 3 + pip
Follow the pulp-oci-images quickstart
mkdir -p ~/pulp-backend-oci/{settings/certs,pulp_storage,pgsql,containers}
cd ~/pulp-backend-oci/
echo "
CONTENT_ORIGIN='http://$(hostname):8080'
ANSIBLE_API_HOSTNAME='http://$(hostname):8080'
ANSIBLE_CONTENT_HOSTNAME='http://$(hostname):8080/pulp/content'
" >> settings/settings.pycd ~/pulp-backend-oci/
podman run --publish 8080:80 \
--replace --name pulp \
--volume "$(pwd)/settings":/etc/pulp \
--volume "$(pwd)/pulp_storage":/var/lib/pulp \
--volume "$(pwd)/pgsql":/var/lib/pgsql \
--volume "$(pwd)/containers":/var/lib/containers \
docker.io/pulp/pulpcurl localhost:8080/pulp/api/v3/status/ | jqpodman exec -it pulp pulpcore-manager reset-admin-password --password adminpip install pulp-cli[pygments]
pulp config create --username admin --base-url http://localhost:8080 --password admin
pulp --help
pulp user listgit clone https://github.com/pulp/pulp-ui
cd pulp-ui
npm installnpm run startOpen http://localhost:8002/.
If your API listens elsewhere, you can use API_PROXY=http://elsewhere:12345 npm run start. The server at elsewhere must allow CORS requests from localhost; using changeOrigin is out of scope for pulp-ui, and breaks pulp API URLs. Do NOT use the webpack proxy in production.
A production build (npm run build) can be further configured by serving a /pulp-ui-config.json alongside the built UI, mapped at /.
| Key | Default | Purpose |
|---|---|---|
API_BASE_PATH |
/pulp/api/v3/ |
Change when using domains or a different path |
UI_BASE_PATH |
/ui/ |
Change when only serving index in a subdirectory, or want different browser path prefix |
UI_EXTERNAL_LOGIN_URI |
null |
Set to something like /login/ when using SSO |
EXTRA_VERSION |
"" |
An extra version string to display in about modal |
See the Pulp developer guide to contribute, or reach the community on Discourse / Matrix (#pulp, #pulp-dev)
