🔏 Create Keycloak themes using React 🔏
Home - Documentation - Storybook - Starter project
This build tool generates a Keycloak theme Learn more
Whether or not React is your preferred framework, Keycloakify offers a solid option for building Keycloak themes. It's not just a convenient way to create a Keycloak theme when using React; it's a well-regarded solution that many developers appreciate.
📣 🛑 Account themes generated by Keycloakify are not currently compatible with Keycloak 22.
We are working on a solution. Follow progress.
Login and email themes are not affected.
UPDATE: The PR that should future proof Keycloakify account themes has been greenlighted by the Keycloak team. Resolution is only a matter of time.
Keycloakify is fully compatible with Keycloak, starting from version 11 and is anticipated to maintain compatibility with all future versions.
You can update your Keycloak, your Keycloakify generated theme won't break.
To understand the basis of my confidence in this, you can visit this discussion thread where I've explained in detail.
Sponsor 👼
We are exclusively sponsored by Cloud IAM, a French company offering Keycloak as a service.
Their dedicated support helps us continue the development and maintenance of this project.
Cloud IAM provides the following services:
- Simplify and secure your Keycloak Identity and Access Management. Keycloak as a Service.
- Custom theme building for your brand using Keycloakify.
Checkout Cloud IAM and use promo code keycloakify5
5% of your annual subscription will be donated to us, and you'll get 5% off too.
Thank you, Cloud IAM, for your support!
Contributors ✨
Thanks goes to these wonderful people (emoji key):
Changelog highlights
8.0
- Much smaller .jar size. 70.2 MB -> 7.8 MB.
Keycloakify now detects which of the static resources from the default theme are actually used by your theme and only include those in the .jar. - Build time: The first build is slowed but the subsequent build are faster. Update your CI so that the cache is persisted across CI build.
Breaking changes
There are very few breaking changes in this major version.
-
The
--external-assets
build option has been removed it was a performance optimization that is no longer relevant now that we have lazy loading. -
kcContext.usernameEditDisabled
is nowkcContext.usernameHidden
, the type was lying, it has been updated to reflect what's actually on thekcContext
at runtime. If you want to see in detail what should be updated see issue, or you can search and replaceusernameEditDisabled
->usernameHidden
it'll do the trick. -
The
usePrepareTemplate
prototype has been changed, you can search and replace:
src/keycloak-theme/login/Template.tsx
url,
"stylesCommon": [
"node_modules/patternfly/dist/css/patternfly.min.css",
"node_modules/patternfly/dist/css/patternfly-additions.min.css",
"lib/zocial/zocial.css"
],
"styles": ["css/login.css"],
by
"styles": [
`${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`,
`${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`,
`${url.resourcesCommonPath}/lib/zocial/zocial.css`,
`${url.resourcesPath}/css/login.css`
],
and
src/keycloak-theme/account/Template.css
url,
"stylesCommon": ["node_modules/patternfly/dist/css/patternfly.min.css", "node_modules/patternfly/dist/css/patternfly-additions.min.css"],
"styles": ["css/account.css"],
by
"styles": [
`${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`,
`${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`,
`${url.resourcesPath}/css/account.css`
],
7.15
- The i18n messages you defines in your theme are now also maid available to Keycloak.
In practice this mean that you can now customize the
kcContext.message.summary
that display a general alert and the values returned bykcContext.messagesPerField.get()
that are used to display specific error on some field of the form. See video
7.14
- Deprecate the
extraPages
build option. Keycloakify is now able to analyze your code to detect extra pages.
7.13
- Deprecate
customUserAttribute
, Keycloakify now analyze your code to predict field name usage. See doc.
It's now mandatory to adopt the new directory structure.
7.12
- You can now pack multiple themes variant in a single
.jar
bundle. In vanilla Keycloak themes you have the ability to extend a base theme. There is now an idiomatic way of achieving the same result. Learn more.
7.9
- Separate script for copying the default theme static assets to the public directory.
Theses assets are only needed for testing your theme locally in Storybook or with amockPageId
.
You are now expected to have a"prepare": "copy-keycloak-resources-to-public",
in your package.json scripts.
This script will createpublic/keycloak-assets
when you runyarn install
(If you are using another package manager likepnpm
makes sure that"prepare"
is actually ran.)
See the updated starter.public/keycloak-assets
shouldn't be tracked by GIT and is automatically ignored.
7.7
- Better storybook support, see the starter project.
7.0 🍾
- Account theme support 🚀
- It's much easier to customize pages at the CSS level, you can now see in the browser dev tool the customizable classes.
- New interactive CLI tool
npx eject-keycloak-page
, that enables to select the page you want to customize at the component level. - There is a Storybook
- Remember me is fixed
6.13
- Build work behind corporate proxies, see issue.
6.12
Massive improvement in the developer experience:
- There is now only one starter repo: https://github.com/codegouvfr/keycloakify-starter
- A lot of comments have been added in the code of the starter to make it easier to get started.
- The doc has been updated: https://docs.keycloakify.dev
- A lot of improvements in the type system.
6.11.4
- You no longer need to have Maven installed to build the theme. Thanks to @lordvlad, see PR.
- Feature new build options:
bundler
,groupId
,artifactId
,version
.
Theses options can be user to customize the output name of the .jar. You can use environnement variables to overrides the values read in the package.json. Thanks to @lordvlad.
6.10.0
- Widows compat (thanks to @lordvlad, see PR). WSL is no longer required 🎉
6.8.4
@emotion/react
is no longer a peer dependency of Keycloakify.
6.8.0
- It is now possible to pass a custom
<Template />
component as a prop to<KcApp />
and every individual page (<Login />
,<RegisterUserProfile />
, ...) it enables to customize only the header and footer for example without having to switch to a full-component level customization. See issue.
6.7.0
6.6.0
6.5.0
6.4.0
- You can now optionally pass a
doFetchDefaultThemeResources: boolean
prop to every page component and the default<KcApp />
This enables you to prevent the default CSS and JS that comes with the builtin Keycloak theme to be downloaded.
You'll get a black slate.
6.0.0
- Bundle size drastically reduced, locals and component dynamically loaded.
- First print much quicker, use of React.lazy() everywhere.
- Real i18n API.
- Actual documentation for build options.
Checkout the migration guide
5.8.0
- React.lazy() support 🎉. #141
5.7.0
- Feat
logout-confirm.ftl
. PR
5.6.4
Fix login-verify-email.ftl
page. Before - After
v5.6.0
Add support for login-config-totp.ftl
page #127.
v5.3.0
Rename keycloak_theme_email
to keycloak_email
.
If you already had a keycloak_theme_email
you should rename it keycloak_email
.
v5.0.0
Migration guide
New i18n system.
Import of terms and services have changed. See example.
v4.10.0
Add login-idp-link-email.ftl
page See PR.
v4.8.0
v4.7.4
M1 Mac support (for testing locally with a dockerized Keycloak).
v4.7.2
WARNING: This is broken.
Testing with local Keycloak container working with M1 Mac. Thanks to @eduardosanzb.
Be aware: When running M1s you are testing with Keycloak v15 else the local container spun will be a Keycloak v16.1.0.
v4.7.0
Register with user profile enabled: Out of the box options
validator support.
Example
v4.6.0
tss-react
and powerhooks
are no longer peer dependencies of keycloakify
.
After updating Keycloakify you can remove tss-react
and powerhooks
from your dependencies if you don't use them explicitly.
v4.5.3
There is a new recommended way to setup highly customized theme. See here.
Unlike with the previous recommended method,
with this new method your theme wont break on minor Keycloakify update.
v4.3.0
Feature login-update-password.ftl
.
Every time a page is added it's a breaking change for non CSS-only theme.
Change this and this to update.
v4
- Out of the box frontend form validation 🥳
- Improvements (and breaking changes in
import { useKcMessage } from "keycloakify"
.
v3
No breaking changes except that @emotion/react
, tss-react
and powerhooks
are now peerDependencies
instead of being just dependencies.
It's important to avoid problem when using keycloakify
alongside mui
and
when passing params from the app to the login page.
v2.5
- Feature Use advanced message
and
messagesPerFields
(implementation here) - Test container now uses Keycloak version
15.0.2
.
v2
- It's now possible to implement custom
.ftl
pages. - Support for Keycloak plugins that introduce non standard ftl values.
(Like for example this plugin that define
authorizedMailDomains
inregister.ftl
).