OrangeLion is a CSS-only theme extension for Apache Guacamole. It repaints the login page, menus, header bars, buttons, connection list, and admin settings screens in the orange colour scheme, using a lion emoji mark rather than any trademarked logo. It ships as a single .jar that you drop into your Guacamole extensions folder, so it layers on top of any install without rebuilding the web app. This project is unofficial and community-maintained.
| Login | Connections |
|---|---|
![]() |
![]() |
| Admin: Users | Admin: Groups |
|---|---|
![]() |
![]() |
- orange (
#FF6200) colour palette applied across the interface. - White login card with a lion emoji mark (a standard Unicode glyph, not a trademarked logo).
- Themed menu, header bars, and buttons.
- Themed connection list and admin settings pages (Users, Groups, and more).
- Single-file, drop-in extension: just copy one
.jar. - No web-app rebuild and no source changes to Guacamole.
- Configurable through build options or the CSS variables at the top of the stylesheet.
- Automatic dark mode: follows the OS/browser
prefers-color-scheme, with a dark palette tuned to WCAG AA. - Optional theme-only (neutral) build that keeps Guacamole's own logo and product name.
- Optional product-name rename on the login page via a translation override.
- Custom browser-tab favicon and app icon (an orange lion mark).
- Accessible by default: WCAG AA contrast across text, borders, and focus indicators, a visible keyboard focus ring, and brand-coloured form controls.
Download the latest guacamole-theme-orangelion.jar from the Releases page β each release attaches the CI-built jar plus a SHA-256 checksum and a build-provenance attestation β or build it yourself with ./build.sh.
Quick version:
- Copy
guacamole-theme-orangelion.jarintoGUACAMOLE_HOME/extensions/. - Restart Guacamole.
- Hard refresh your browser (Ctrl+Shift+R, or Cmd+Shift+R on macOS) to clear cached CSS.
Copy the jar into place:
mkdir -p "$GUACAMOLE_HOME/extensions" && cp guacamole-theme-orangelion.jar "$GUACAMOLE_HOME/extensions/"Docker note: with the official Guacamole image, mount a folder that contains extensions/guacamole-theme-orangelion.jar and set the GUACAMOLE_HOME environment variable to point at that folder, then restart the container. For Docker Compose:
services:
guacamole:
image: guacamole/guacamole
environment:
GUACAMOLE_HOME: /etc/guacamole
volumes:
- ./guacamole:/etc/guacamolePlace guacamole-theme-orangelion.jar in ./guacamole/extensions/, then restart the container.
After restarting, the Guacamole log should show: Extension "OrangeLion Theme" (orangelion) loaded
Finally, hard refresh your browser (Ctrl+Shift+R, or Cmd+Shift+R on macOS) to clear cached CSS so the new theme loads.
For full step-by-step instructions, customisation options, and uninstall steps, see INSTRUCTIONS.md. Deploying on Docker, Kubernetes, or OpenShift? See docs/DEPLOYMENT.md.
The quickest way to restyle is with build options β no CSS editing. build.sh reads them from environment variables, or from a theme.config file (copy theme.config.example):
- Recolour everything:
BRAND_COLOR=#1565C0 ./build.sh(the darker shades are derived automatically). - Custom login mark:
WORDMARK="Acme" ./build.sh, or a logo image withLOGO=images/my-logo.svg ./build.sh. - Rename the product on the login page/tab:
APP_NAME="Acme Remote" LOCALES="en nl de" ./build.sh. - Theme-only build with no OrangeLion branding (keeps Guacamole's own logo and name):
VARIANT=neutral ./build.sh.
See INSTRUCTIONS.md for the full option reference.
You can also hand-edit the CSS variables in the :root block at the top of orangelion.css:
| Variable | Default | Controls |
|---|---|---|
--brand-orange |
#FF6200 |
Bright brand accent: login backdrop, mark, borders |
--brand-orange-dark |
#E15700 |
Primary-button border edge |
--brand-orange-darker |
#C24E00 |
Accessible orange: text + white-on fills (4.79:1) |
--brand-orange-deep |
#A84300 |
Deep hover fill (6.06:1 on white) |
--brand-charcoal |
#333333 |
Body text |
--brand-grey |
#767676 |
Secondary text |
--brand-border |
#8C8C8C |
Input borders (3.36:1 on white) |
--brand-white |
#FFFFFF |
Cards / text on orange |
--brand-page |
#FFFFFF |
Page background |
Worked example, recolour to blue: run BRAND_COLOR=#1565C0 ./build.sh, or set --brand-orange, --brand-orange-dark, and --brand-orange-darker to your blue shades in the :root block by hand and rebuild.
After any change, rebuild the jar with build.sh (output: dist/guacamole-theme-orangelion.jar), then reinstall and hard refresh.
OrangeLion is CSS-only and declares guacamoleVersion "*". The build workflow smoke-tests that the extension loads on each version below.
| Guacamole | Extension loads | Visual surfaces | Notes |
|---|---|---|---|
| 1.5.5 | β PASS (CI) | Expected | Smoke-tested in CI on every push/PR. |
| 1.6.0 | β PASS (CI) | Expected | Smoke-tested in CI; this version's jar is the uploaded build artifact. |
- PASS (CI) β the build workflow builds the jar, boots
guacamole/guacamole:<version>, and assertsExtension "OrangeLion Theme" (orangelion) loaded. This proves the extension is accepted and loads. - Expected β because the theme is pure CSS layered on the default theme, the login card, lion mark, menu/header bars, connection list, and admin Settings render once it loads. CI does not do pixel inspection, so these cells are expected, not visually verified.
Guacamole reads guacamoleVersion from the manifest as the version the extension was built for and uses it as a load-time gate: if an extension declares a version newer than the running server, Guacamole refuses to load it. The wildcard "*" opts out of that check, so OrangeLion never claims to need a newer server than the one it is dropped into β which maximises compatibility. That is safe here because the extension ships only CSS (plus icons and optional translations) and calls no version-specific APIs. Older releases such as 1.4 may work but are untested.
- Add the tag (for example
"1.6.1") tostrategy.matrix.guacin .github/workflows/build.yml. - When that CI job is green, add a row here marked PASS (CI).
- Only mark a visual surface Verified if it was actually inspected on that version.
OrangeLion follows Semantic Versioning. Each release is tagged vMAJOR.MINOR.PATCH and recorded in the CHANGELOG. Pushing a version tag triggers CI to build the jar and attach it β with a SHA-256 checksum and a build-provenance attestation β to the matching GitHub Release, which is the canonical download. The built jar is not committed to the repository (dist/ is git-ignored); build it locally with ./build.sh when working from source.
Is this affiliated with Apache Guacamole? No. OrangeLion is unofficial, community-maintained, and unaffiliated with the Apache Guacamole project.
Does it change functionality or only appearance? Only appearance. It is CSS-only and changes no behaviour.
Does it support dark mode?
Yes. A dark variant activates automatically when your OS or browser is set to a dark colour scheme (prefers-color-scheme: dark); no toggle needed.
Will it conflict with LDAP, database, SAML, or other extensions? No. It is a CSS-only extension and does not touch authentication or other extension logic.
Does it work with both the WAR/Tomcat install and the Docker image? Yes, both are supported.
Does it work on older Guacamole such as 1.4?
The manifest sets guacamoleVersion to "*", and the theme is tested on 1.5.5 and 1.6.0. Older versions may work but are untested.
Is it safe for production? It only adds CSS, so risk is limited to appearance.
Recent work has landed a configurable brand colour and wordmark, an optional logo image, a theme-only (neutral) build, multi-language product names, an automatic dark-mode variant, a documented WCAG contrast audit, a Guacamole version compatibility matrix, and CI-built tagged Releases. Further improvements are tracked as issues; contributions are welcome.
Contributions are welcome. Please read CONTRIBUTING.md, then open an issue or a pull request with your ideas, fixes, or improvements. This project also follows a Code of Conduct.
Released under the MIT License. See LICENSE.



