Hi,
I'm migrating my Keycloak modules to KC26.
I had to support the new admin console and I added tabs in the admin console (at clients and identity provider level).
When implementing these tabs 2 months ago, I was running Keycloak with --features=declarative-ui and was able to test them, everything went fine.
Now, it took some more time to migrate and I can now test all our modules: I am running Keycloak 26.2.4 with all our modules, still running with --features=declarative-ui parameter... but tabs are not displayed.
Is there something I'm missing? Some other property to set or a flag to configure somewhere?
Example:
Class HrdTab implements UiTabProvider, UiTabProviderFactory<ComponentModel> and includes:
@Override
public String getPath() {
return "/:realm/identity-providers/oidc/:alias/:tab?";
}
@Override
public Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("tab", "hrd");
return params;
}
File META-INF/services/org.keycloak.services.ui.extend.UiTabProviderFactory contains: io.cloudtrust.keycloak.hrd.ui.admin.HrdTab
When running Keycloak, I can see in logs:
2025-05-23 18:09:55,764 WARN [org.keycloak.common.Profile] (main)
Experimental features enabled: declarative-ui:v1
839 WARN [org.keycloak.services] (build-10) KC-SERVICES0047: hrd-authenticator (io.cloudtrust.keycloak.hrd.authenticators.browser.HRDIdentityProviderAuthenticatorFactory) is implementing the internal SPI authenticator. This SPI is internal and may change without
notice
588 INFO [io.quarkus.deployment.QuarkusAugmentor] (main) Quarkus augmentation completed in 6695ms
557 WARN [org.keycloak.common.Profile] (main) Experimental features enabled: declarative-ui:v1
648 WARN [org.keycloak.common.Profile] (main) Experimental features enabled: declarative-ui:v1
867 WARN [org.keycloak.services] (build-9) KC-SERVICES0047:
Home-realm discovery settings (io.cloudtrust.keycloak.hrd.ui.admin.HrdTab) is implementing the internal SPI ui-tab. This SPI is internal and may change without notice
039 INFO [io.quarkus.deployment.QuarkusAugmentor] (main) Quarkus augmentation completed in 7074ms
072 WARN [org.keycloak.common.Profile] (main) Experimental features enabled: declarative-ui:v1
262 WARN [org.keycloak.common.Profile] (main) Experimental features enabled: declarative-ui:v1
789 INFO [org.keycloak.quarkus.runtime.storage.database.liquibase.QuarkusJpaUpdaterProvider] (main) Initializing database schema. Using changelog META-INF/jpa-changelog-master.xml
555 INFO [org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory] (main) Starting Infinispan embedded cache manager
615 INFO [org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory] (main) JGroups JDBC_PING discovery enabled.
791 INFO [org.infinispan.CONTAINER] (main) Virtual threads support enabled
002 INFO [org.infinispan.CONTAINER] (main) ISPN000556: Starting user marshaller 'org.infinispan.commons.marshall.ImmutableProtoStreamMarshaller'
398 INFO [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_857109, Site name: null
672 INFO [org.keycloak.services] (main) KC-SERVICES0050: Initializing master realm
994 INFO [org.keycloak.services] (main) KC-SERVICES0077: Created temporary admin user with username admin
291 INFO [io.quarkus] (main) Keycloak 26.2.4 on JVM (powered by Quarkus 3.20.0) started in 11.828s. Listening on:
http://0.0.0.0:8180
I also tried to add logs in getId(), getPath(), ... of my HrdTab and I can see in logs that this part of the code is executed. But I can't see my custom tab displayed in the admin console.
Same problem with another tab defined with the following path: "/:realm/clients/:tab?"
Does anyone can point the thing I'm missing?
Thanks,
Francis Pérot
Senior software engineer

ELCA Security |
www.elcasecurity.ch
Rue Louis Casaï 18 | 1209 Genève

This message may contain confidential and/or privileged information. If you are neither the addressee nor
Authorized to receive this for the addressee, you must not use, copy, disclose or take any action based on
this message or any information herein. If you have received this message in error, please contact the sender
and delete this message. Thank you.