Cluster Resources (Themes, Extensions, and Denylists)
Resources can be uploaded to your cluster for deployment to any Realm in that cluster. A cluster resource is one of three types:
- Theme — a Keycloak theme for login, account, or email UI customization. Uploaded per Keycloak major version.
- Extension — a Keycloak server extension JAR (providers and SPI code). Uploaded per Keycloak major version.
- Password Denylist — a list of passwords your users are not allowed to choose. It is not tied to a Keycloak major version and uses a single direct file upload. See Password Blacklist for how denylists work in Keycloak.
Resource limits by tier
The resources available depend on your cluster tier:
| Tier | Themes | Extensions | Password Denylists |
|---|---|---|---|
| Starter | 1 | Not available — themes only | Unlimited |
| Premium | 1 | 1 | Unlimited |
| Enterprise | Unlimited | Unlimited | Unlimited |
Password Denylists are not limited by tier. They are part of core Keycloak security rather than custom code, so you can upload as many as you need on any tier — including Starter, where custom extensions are not available.
Your current usage is shown next to the Resources heading (for example, 0/1 themes). Denylists are shown as a plain count, since they are uncapped.
Adding a resource
-
Visit the
Cluster > Config > Resourcestab. -
Click Add New Resource. Give the resource a recognizable name (lowercase letters, numbers, and hyphens), for example
theme-customer-1-0-0, and choose the resource type — Theme, Extension, or Password Denylist.Any type you have run out of is shown but disabled, so you can always see what a higher tier offers. On Starter clusters the Extension option is disabled, with a note that Starter clusters do not allow custom extensions; Theme and Password Denylist remain available.
Screenshot neededresources-add-dialog.png— the Add a new cluster resource dialog showing the Theme / Extension / Password Denylist type selection with their icons. Include a Premium-cluster variant where the extension limit is used, showing the disabled Extension option alongside an available Password Denylist. -
After the resource is created, upload the file.
- Themes and extensions are uploaded per Keycloak major version. Activate a specific version (for example Keycloak 26 — only major versions are supported), click the upload icon, and select your file. The file must be a
.jarfile. Upload it for each Keycloak version you need it available on. - Password Denylists use a single, cluster-wide upload and are not tied to a Keycloak major version. The file must be a
.txtfile with one password per line.
A denylist is deployed to your cluster using the name of the resource plus a
.txtextension. A resource namedcommon-passwordsbecomescommon-passwords.txt, and that is the exact file name a realm's password policy must reference. The optional label on an upload is for display only and does not change the deployed file name.
- Themes and extensions are uploaded per Keycloak major version. Activate a specific version (for example Keycloak 26 — only major versions are supported), click the upload icon, and select your file. The file must be a
Deploying resources to the cluster
After your uploads are in place, click Refresh Cluster Resources to submit the deployment request. The latest valid resources are then copied to the cluster.
Because of the way Keycloak manages themes and extensions, this requires a restart of your cluster (usually a zero-downtime operation). The refresh and the restart are automated: submitting the request starts a workflow that reconciles your resources onto the cluster and restarts it, with no manual step on the Phase Two side.
Only one refresh or restart runs against a cluster at a time. If you submit a refresh while one is already in flight, the request is rejected until the first one finishes. Environment variable changes use the same restart, so a resource refresh and an environment variable change queue behind one another rather than running together.