Maya Workflow Kit
The whole Maya workflow in Blender, in one install. Free and open source, Blender 4.5 – 5.2.
翻译准备中
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证This repository provides a custom Keycloak theme designed to emulate the aesthetics of the Django Unfold Theme (https://github.com/unfoldadmin/django-unfold)
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗[!WARNING] Disclaimer: This project is experimentally written almost entirely by AI. Any usage of this software should keep this in mind, and the execution of this software is at your own risk.
Keycloak Unfold is a modular custom theme for Keycloak designed to emulate the clean, modern aesthetics of the popular Django Unfold Theme. It builds on Keycloak's native v2 theme and overrides PatternFly 5 CSS variables to deliver a premium user interface out of the box.
prefers-color-scheme) and manual overrides via a interactive toggle..ftl).Keycloak Unfold is versioned independently using Semantic Versioning (SemVer) starting from 0.0.1.
| Theme Version | Supported Keycloak | Tested Keycloak | Base Theme | PatternFly Version | Django Unfold Alignment | Support Status |
|---|---|---|---|---|---|---|
0.0.x (current: 0.0.1) | >= 26.8.0 | v26.8.0 | v2 | PatternFly 5 (--pf-v5-*) | v0.101.0 | 🟢 Active |
X.0.0): Breaking template architecture redesigns or major Keycloak base theme upgrades.0.X.0): New theme variants, feature additions, or layout enhancements.0.0.X): Bug fixes, CSS refinements, and compatibility updates for Keycloak point releases.For detailed design system and upstream version alignments, see UNFOLD_VERSION.md.
The themes are registered in keycloak-themes.json and follow an inheritance chain:
graph TD
A[Keycloak keycloak.v2 / keycloak.v3] --> B[unfold-base]
B --> C[unfold-default]
B --> D[unfold-full]
C -.-> E[your child theme]
D -.-> E
unfold-base: the core theme. It holds every FreeMarker template (.ftl), including the single shared login layout login/template.ftl. It also holds the shared CSS, the self-hosted Inter font, logos, the dark mode script and the messages_*.properties bundles. The common/unfold-base type is imported by login, account and admin.unfold-default: the centered card login. The account and admin consoles keep the default Keycloak layout and only change colors and typography.unfold-full: the split-screen login, with the form on the left and a configurable hero image on the right (unfoldLayout=split). It also applies extra widget styling to the account and admin consoles.Login pages that the theme does not override (OTP, TOTP setup, device code, and so on) fall back to upstream keycloak.v2 and render inside the Unfold layout.
All key styling variables live in unfold-common.css:
:root {
/* Font family (Inter is bundled; no external font requests) */
--pf-v5-global--FontFamily--sans-serif: 'Inter', -apple-system, ..., sans-serif;
/* Primary theme accent */
--color-primary-600: #7c3aed; /* light mode accent */
--color-primary-500: #8b5cf6; /* dark mode accent */
/* Neutral slates */
--color-base-50: #f8fafc;
--color-base-900: #0f172a;
}
To change them after installation, use a child theme (Post-Install Customization). Do not edit the JAR.
Theme-specific strings ("Welcome back to", "Return to site", the terms sentence, the hero quote, and so on) are message keys prefixed with unfold, in theme/unfold-base/login/messages/. English and Italian ship with the theme. Add a messages_<lang>.properties file, or override single keys under Realm settings → Localization. When the realm has internationalization enabled, a language selector appears above the form.
Ensure you have Docker, Docker Compose and Node.js (v20+) installed.
docker compose up
This mounts theme/ directly, with theme caching off in dev mode, and imports the demo realms from demo/. Keycloak is available at http://localhost:8080. If that port is taken, publish another one with KC_PORT=8180 docker compose up.
admin / admintestuser / passworddemo realm): otpuser / password. It shows the upstream TOTP page inside the Unfold layout.The project uses Tailwind CSS v4. The compiled tailwind.css is committed, because Keycloak serves it as-is. If you add utility classes to .ftl templates, rebuild it. CI fails when the committed file is stale.
Build CSS:
npm run build
Watch and auto-compile (recommended for development):
npx @tailwindcss/cli -i ./theme/unfold-base/login/resources/css/tailwind-input.css -o ./theme/unfold-base/login/resources/css/tailwind.css --watch
To deploy this theme on a production Keycloak cluster, package it as a JAR file (Keycloak best practice). Tagged releases attach the JAR to the GitHub release and publish it to Maven Central as io.github.ffalcinelli:keycloak-unfold.
npm run package
This builds the CSS, prepares the META-INF files and writes keycloak-unfold-v<version>.jar to the repository root (requires zip).
mvn clean package
This writes the JAR to target/keycloak-unfold-v<version>.jar. Maven only packages the files. Build the CSS first with npm run build; the tests run through npm (see below).
Requires Keycloak 26.8.0 or newer.
.jar file to the providers/ directory of your Keycloak installation.bin/kc.sh build
bin/kc.sh start
Customize the installed theme through a child theme: a small folder in /opt/keycloak/themes/ that sets parent=unfold-default (or unfold-full) and contains only what you change. Everything else is inherited from the JAR, so upgrades only mean swapping the JAR.
[!IMPORTANT] Do not create a folder named
unfold-base,unfold-defaultorunfold-fullin/opt/keycloak/themes/. A folder theme with the same name replaces the JAR theme entirely rather than merging with it. Withparent=<same name>it makes login requests hang.
A ready-to-copy child theme is provided in customization/my-brand/:
my-brand/
├── common/resources/css/my-brand.css ← brand colors, shared by login/account/admin
├── login/theme.properties ← parent, logo, terms URL, dark mode, unfold-full options
├── login/resources/img/ ← logo-light.svg, logo-dark.svg, favicon.svg, login-bg.jpg
├── account/theme.properties
└── admin/theme.properties
customization/my-brand to /opt/keycloak/themes/my-brand. You can rename it.my-brand.css and login/theme.properties, and drop your images into login/resources/img/.my-brand as the realm's Login/Account/Admin theme.See customization/README.md for details and deployment patterns.
Set these in your child theme's login/theme.properties:
| Property | Applies to | Default | Description |
|---|---|---|---|
unfoldLogoUrl | all variants | img/logo-light.svg | Light mode logo path (relative to login/resources/) |
unfoldLogoUrlDark | all variants | img/logo-dark.svg | Dark mode logo path |
termsUrl | all variants | (unset: no terms link) | Terms of service link shown below the login form |
darkMode | all variants | true | false hides the toggle and ignores the OS dark preference (realm switch also applies) |
unfoldLayout | all variants | centered (split in unfold-full) | Login shell: centered card or split screen |
bgImage | unfold-full | img/login-bg.jpg | Split-screen hero image |
kcLogoLink | unfold-full | (unset: link hidden) | URL for the "Return to site" back-link |
unfoldQuote | unfold-full | unfoldQuote message key | Fixed quote over the hero image (overrides the translatable default) |
unfoldQuoteSubtext | unfold-full | unfoldQuoteSubtext key | Fixed subtext below the quote |
services:
keycloak:
image: quay.io/keycloak/keycloak:26.8.0
volumes:
- ./keycloak-unfold-v0.0.1.jar:/opt/keycloak/providers/keycloak-unfold.jar:ro
- ./my-brand:/opt/keycloak/themes/my-brand:ro
command: start-dev
npm install
npm run test
The suite starts Keycloak with docker compose up -d --wait and stops it afterwards. If Keycloak is already running, the suite reuses it. It refuses to run against a port that answers but is not Keycloak. To use another port:
KC_PORT=8180 KEYCLOAK_URL=http://localhost:8180 npm run test
To test the packaged JAR instead of the theme/ folder (CI does both):
mvn package
THEME_JAR=target/keycloak-unfold-v0.0.1.jar COMPOSE_FILE=docker-compose.jar.yml npm run test
Unit tests for the dark mode script run without Keycloak: npm run test:unit. For interactive test debugging, use npx playwright test --ui. To refresh the README screenshots, run npm run screenshots against a running instance.
npm run lint (ESLint, Stylelint and the package.json/pom.xml version sync check).npm run format:check (Prettier).npm run format.The unfold-default variant focuses on a clean, "Keycloak-native" feel with custom accent colors.
| Login Page | Account Console |
|---|---|
The unfold-full variant provides a highly customized split-screen, premium visual layout.
| Login Page | Account Console |
|---|---|