Console Output
+ yarn install --frozen-lockfile
yarn install v1.22.19
[1/4] Resolving packages...
warning Resolution field "jackspeak@2.1.1" is incompatible with requested version "jackspeak@^2.3.5"
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "@storybook/react-vite > @vitejs/plugin-react@3.1.0" has incorrect peer dependency "vite@^4.1.0-beta.0".
[4/4] Building fresh packages...
Done in 23.55s.
+ yarn build-keycloak-theme
yarn run v1.22.19
$ yarn build && keycloakify
$ tsc && vite build
[36mvite v5.1.1 [32mbuilding for production...[36m[39m
transforming...
[32m✓[39m 517 modules transformed.
rendering chunks...
computing gzip size...
[2mdist/[22m[32mindex.html [39m[1m[2m 0.86 kB[22m[1m[22m[2m │ gzip: 0.45 kB[22m
[2mdist/[22m[2massets/[22m[32meclipse-foundation-grey-orange-Biv-g5OH.svg [39m[1m[2m 5.80 kB[22m[1m[22m[2m │ gzip: 2.30 kB[22m
[2mdist/[22m[2massets/[22m[35mKcApp-F78DoC_F.css [39m[1m[2m 0.65 kB[22m[1m[22m[2m │ gzip: 0.36 kB[22m
[2mdist/[22m[2massets/[22m[36mError-DN-wDGOJ.js [39m[1m[2m 0.61 kB[22m[1m[22m[2m │ gzip: 0.35 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginPageExpired-sl7H3hwB.js [39m[1m[2m 0.67 kB[22m[1m[22m[2m │ gzip: 0.36 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginVerifyEmail-BAWE4nCZ.js [39m[1m[2m 0.69 kB[22m[1m[22m[2m │ gzip: 0.38 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginPageExpired-pLY2zIHC.js [39m[1m[2m 0.70 kB[22m[1m[22m[2m │ gzip: 0.40 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginIdpLinkEmail-CZtTH4v_.js [39m[1m[2m 0.87 kB[22m[1m[22m[2m │ gzip: 0.37 kB[22m
[2mdist/[22m[2massets/[22m[36mSamlPostForm-CxFrHQhY.js [39m[1m[2m 1.04 kB[22m[1m[22m[2m │ gzip: 0.54 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginIdpLinkConfirm-DMQIQvLB.js [39m[1m[2m 1.09 kB[22m[1m[22m[2m │ gzip: 0.47 kB[22m
[2mdist/[22m[2massets/[22m[36mInfo-BQCh4l2j.js [39m[1m[2m 1.16 kB[22m[1m[22m[2m │ gzip: 0.56 kB[22m
[2mdist/[22m[2massets/[22m[36mIdpReviewUserProfile-sBRhKGbX.js [39m[1m[2m 1.21 kB[22m[1m[22m[2m │ gzip: 0.57 kB[22m
[2mdist/[22m[2massets/[22m[36mLogoutConfirm-B5-y_nVe.js [39m[1m[2m 1.49 kB[22m[1m[22m[2m │ gzip: 0.66 kB[22m
[2mdist/[22m[2massets/[22m[36mUpdateUserProfile-LPWeiQUA.js [39m[1m[2m 1.60 kB[22m[1m[22m[2m │ gzip: 0.65 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginOauthGrant-BzA_mP4L.js [39m[1m[2m 1.61 kB[22m[1m[22m[2m │ gzip: 0.66 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginDeviceVerifyUserCode-BwvcMN4X.js [39m[1m[2m 1.62 kB[22m[1m[22m[2m │ gzip: 0.60 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginOtp-B7QJFDG9.js [39m[1m[2m 1.72 kB[22m[1m[22m[2m │ gzip: 0.81 kB[22m
[2mdist/[22m[2massets/[22m[36mRegisterUserProfile-DbqCy2wL.js [39m[1m[2m 1.73 kB[22m[1m[22m[2m │ gzip: 0.76 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginPassword-t8w8BLnn.js [39m[1m[2m 1.79 kB[22m[1m[22m[2m │ gzip: 0.76 kB[22m
[2mdist/[22m[2massets/[22m[36mSelectAuthenticator-BPT6_ZxA.js [39m[1m[2m 1.80 kB[22m[1m[22m[2m │ gzip: 0.73 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginResetPassword-BKKQA5ER.js [39m[1m[2m 1.82 kB[22m[1m[22m[2m │ gzip: 0.71 kB[22m
[2mdist/[22m[2massets/[22m[36mUpdateEmail-C3AjLBoT.js [39m[1m[2m 1.99 kB[22m[1m[22m[2m │ gzip: 0.72 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginOtp-B0lzsofO.js [39m[1m[2m 2.41 kB[22m[1m[22m[2m │ gzip: 0.86 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginUpdatePassword-WBQsZI5w.js [39m[1m[2m 3.01 kB[22m[1m[22m[2m │ gzip: 0.87 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginUsername-BhrxMhtZ.js [39m[1m[2m 3.24 kB[22m[1m[22m[2m │ gzip: 1.21 kB[22m
[2mdist/[22m[2massets/[22m[36mTerms-xGou86qv.js [39m[1m[2m 3.49 kB[22m[1m[22m[2m │ gzip: 1.24 kB[22m
[2mdist/[22m[2massets/[22m[36mLogin-Opj9eTG4.js [39m[1m[2m 3.57 kB[22m[1m[22m[2m │ gzip: 1.39 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginUpdateProfile-JQr20AK2.js [39m[1m[2m 3.58 kB[22m[1m[22m[2m │ gzip: 0.84 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginConfigTotp-BWDZxxjU.js [39m[1m[2m 3.92 kB[22m[1m[22m[2m │ gzip: 1.40 kB[22m
[2mdist/[22m[2massets/[22m[36mLogin-DIGmDE3t.js [39m[1m[2m 3.94 kB[22m[1m[22m[2m │ gzip: 1.36 kB[22m
[2mdist/[22m[2massets/[22m[36museGetClassName-CKDf8Ekt.js [39m[1m[2m 4.30 kB[22m[1m[22m[2m │ gzip: 1.45 kB[22m
[2mdist/[22m[2massets/[22m[36mLoginConfigTotp-8fDRhb3I.js [39m[1m[2m 4.70 kB[22m[1m[22m[2m │ gzip: 1.31 kB[22m
[2mdist/[22m[2massets/[22m[36mRegister-BaJ3mMEN.js [39m[1m[2m 4.76 kB[22m[1m[22m[2m │ gzip: 0.99 kB[22m
[2mdist/[22m[2massets/[22m[36mTemplate-D3XBNUCa.js [39m[1m[2m 5.64 kB[22m[1m[22m[2m │ gzip: 1.55 kB[22m
[2mdist/[22m[2massets/[22m[36mWebauthnAuthenticate-D4Hl8tTc.js [39m[1m[2m 5.67 kB[22m[1m[22m[2m │ gzip: 2.10 kB[22m
[2mdist/[22m[2massets/[22m[36mzh-CN-DkhZmkHw.js [39m[1m[2m 6.48 kB[22m[1m[22m[2m │ gzip: 3.71 kB[22m
[2mdist/[22m[2massets/[22m[36mKcApp-DltW6EmC.js [39m[1m[2m 8.29 kB[22m[1m[22m[2m │ gzip: 2.82 kB[22m
[2mdist/[22m[2massets/[22m[36mUserProfileFormFields-Bf5S5MTu.js [39m[1m[2m 8.31 kB[22m[1m[22m[2m │ gzip: 2.75 kB[22m
[2mdist/[22m[2massets/[22m[36mlv-GMNpMHpK.js [39m[1m[2m 9.91 kB[22m[1m[22m[2m │ gzip: 3.66 kB[22m
[2mdist/[22m[2massets/[22m[36mno-BvkP6suZ.js [39m[1m[2m 11.03 kB[22m[1m[22m[2m │ gzip: 3.63 kB[22m
[2mdist/[22m[2massets/[22m[36msv-2ec1xgMT.js [39m[1m[2m 11.22 kB[22m[1m[22m[2m │ gzip: 3.77 kB[22m
[2mdist/[22m[2massets/[22m[36mlt-Ce0JMF1u.js [39m[1m[2m 11.26 kB[22m[1m[22m[2m │ gzip: 3.87 kB[22m
[2mdist/[22m[2massets/[22m[36mru-C2pkwwXB.js [39m[1m[2m 12.31 kB[22m[1m[22m[2m │ gzip: 4.96 kB[22m
[2mdist/[22m[2massets/[22m[36mja-BdvbieeB.js [39m[1m[2m 13.21 kB[22m[1m[22m[2m │ gzip: 6.29 kB[22m
[2mdist/[22m[2massets/[22m[36mes-B0cfEmtN.js [39m[1m[2m 13.95 kB[22m[1m[22m[2m │ gzip: 4.68 kB[22m
[2mdist/[22m[2massets/[22m[36mtr-DuBdUos2.js [39m[1m[2m 14.28 kB[22m[1m[22m[2m │ gzip: 5.06 kB[22m
[2mdist/[22m[2massets/[22m[36mnl-DnUFgYRh.js [39m[1m[2m 15.67 kB[22m[1m[22m[2m │ gzip: 5.06 kB[22m
[2mdist/[22m[2massets/[22m[36mpl-uIDpYSlP.js [39m[1m[2m 15.87 kB[22m[1m[22m[2m │ gzip: 5.49 kB[22m
[2mdist/[22m[2massets/[22m[36mda-DzVJdeXm.js [39m[1m[2m 17.46 kB[22m[1m[22m[2m │ gzip: 5.57 kB[22m
[2mdist/[22m[2massets/[22m[36mit-gGO6e6D2.js [39m[1m[2m 18.17 kB[22m[1m[22m[2m │ gzip: 5.62 kB[22m
[2mdist/[22m[2massets/[22m[36mpt-BR-_o2UhGtH.js [39m[1m[2m 20.23 kB[22m[1m[22m[2m │ gzip: 6.40 kB[22m
[2mdist/[22m[2massets/[22m[36mfi-6z7njHER.js [39m[1m[2m 22.02 kB[22m[1m[22m[2m │ gzip: 7.09 kB[22m
[2mdist/[22m[2massets/[22m[36mde-DAyoxy4T.js [39m[1m[2m 23.81 kB[22m[1m[22m[2m │ gzip: 7.20 kB[22m
[2mdist/[22m[2massets/[22m[36mfr-zxuoT6dU.js [39m[1m[2m 24.37 kB[22m[1m[22m[2m │ gzip: 7.17 kB[22m
[2mdist/[22m[2massets/[22m[36mth-Dat7TxVJ.js [39m[1m[2m 24.64 kB[22m[1m[22m[2m │ gzip: 9.05 kB[22m
[2mdist/[22m[2massets/[22m[36mar-wKUTVOnX.js [39m[1m[2m 24.78 kB[22m[1m[22m[2m │ gzip: 8.93 kB[22m
[2mdist/[22m[2massets/[22m[36mfa-BuHxf-Bf.js [39m[1m[2m 24.85 kB[22m[1m[22m[2m │ gzip: 9.14 kB[22m
[2mdist/[22m[2massets/[22m[36mcs-BayNt-nX.js [39m[1m[2m 25.26 kB[22m[1m[22m[2m │ gzip: 8.48 kB[22m
[2mdist/[22m[2massets/[22m[36msk-DnCEQ4Vt.js [39m[1m[2m 26.31 kB[22m[1m[22m[2m │ gzip: 8.81 kB[22m
[2mdist/[22m[2massets/[22m[36mel-B9T19k-w.js [39m[1m[2m 27.57 kB[22m[1m[22m[2m │ gzip: 10.09 kB[22m
[2mdist/[22m[2massets/[22m[36mhu-BrypnYk-.js [39m[1m[2m 28.42 kB[22m[1m[22m[2m │ gzip: 9.10 kB[22m
[2mdist/[22m[2massets/[22m[36mca-1Vd1L5k7.js [39m[1m[2m 28.68 kB[22m[1m[22m[2m │ gzip: 8.47 kB[22m
[2mdist/[22m[2massets/[22m[36mindex-DreUWVdu.js [39m[1m[2m331.15 kB[22m[1m[22m[2m │ gzip: 103.32 kB[22m
[32m✓ built in 3.75s[39m
🔏 Building the keycloak theme...⌚
To test your theme locally you can spin up a Keycloak 23.0.6 container image with the theme pre loaded by running:
👉 $ ./dist_keycloak/start_keycloak_testing_container.sh 👈
Once your container is up and running:
- Log into the admin console 👉 http://localhost:8080/admin username: admin, password: admin 👈
- Create a realm: Master -> AddRealm -> Name: myrealm
- Enable registration: Realm settings -> Login tab -> User registration: on
- Enable the Account theme (optional): Realm settings -> Themes tab -> Account theme: keycloak-solstice-theme
Clients -> account -> Login theme: keycloak-solstice-theme
- Enable the email theme (optional): Realm settings -> Themes tab -> Email theme: keycloak-solstice-theme (option will appear only if you have ran npx initialize-email-theme)
- Create a client Clients -> Create -> Client ID: myclient
Root URL: https://www.keycloak.org/app/
Valid redirect URIs: https://www.keycloak.org/app* http://localhost* (localhost is optional)
Valid post logout redirect URIs: https://www.keycloak.org/app* http://localhost*
Web origins: *
Login Theme: keycloak-solstice-theme
Save (button at the bottom of the page)
- Go to 👉 https://www.keycloak.org/app/ 👈 Click "Save" then "Sign in". You should see your login page
- Got to 👉 http://localhost:8080/realms/myrealm/account 👈 to see your account theme
Video tutorial: https://youtu.be/WMyGZNHQkjU
Done in 14.99s.