Observed since 20 Oct, 17:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Legion of xXDEATHXx Bootstrap 5 theme for Alliance Auth 5
The Legion of xXDEATHXx theme for Alliance Auth 5 (Django 5.2 LTS, Bootstrap 5). It ships a self-contained Bootstrap 5 build with the XIX brand styling and restyles the public/login pages, delivered as a standard Python package.
Русская версия: README.ru.md.
ThemeHook
named xix that appears in the user's theme picker.AA_THEME_XIX settings
dict — no template forking required (see Configuration).>=5,<6>=3.11,<3.15pip install aa-theme-xix
To install the latest unreleased changes straight from the repository instead:
pip install git+https://gitlab.com/legion-of-xxdeathxx/aa-theme-xix.git
Open your local.py and add the following right below your INSTALLED_APPS:
# XIX Theme - https://gitlab.com/legion-of-xxdeathxx/aa-theme-xix
INSTALLED_APPS.insert(0, "aa_theme_xix")
This single entry both activates the template overrides (login page, ESI token selection, icons) and registers the theme with Alliance Auth's theme selector.
Then collect the static files:
python manage.py collectstatic
Once installed, each user can pick xix from the theme selector in their Alliance Auth profile.
The theme works without any configuration. To override the operator-facing
strings on the public pages without forking the templates, add an optional
AA_THEME_XIX dict to your local.py:
AA_THEME_XIX = {
"LOGIN_TITLE": "My Alliance",
"LOGIN_SUBTITLE": "TICKER",
"DISCORD_INVITE_URL": "https://discord.gg/example",
"OPENGRAPH_DESCRIPTION": "My Alliance's auth system.",
}
| Key | Default | Description |
|---|---|---|
LOGIN_TITLE | Legion of xXDEATHXx | Heading (and logo alt text) in the login box. |
LOGIN_SUBTITLE | X.I.X | Ticker line under the heading. |
DISCORD_INVITE_URL | the XIX Discord invite | Target of the Discord link on the login page. |
OPENGRAPH_DESCRIPTION | the Alliance Auth blurb | Site description used in link previews (OpenGraph meta). |
Any key left unset keeps the theme's built-in default, so an out-of-the-box install renders exactly as shipped.
Each user selects a theme from their profile. Until a user makes a choice,
Alliance Auth renders the theme named by its core DEFAULT_THEME setting
(shipped as allianceauth.theme.flatly.auth_hooks.FlatlyThemeHook). To make
XIX the default for everyone who has not picked one yet, set DEFAULT_THEME
in your local.py:
# Make XIX the default for users who have not chosen a theme
DEFAULT_THEME = "aa_theme_xix.auth_hooks.AaXixThemeHook"
DEFAULT_THEME is an Alliance Auth core setting, not a XIX one — it only sets
the fallback; users can still switch to any installed theme from their
profile. The public login pages are always XIX-styled regardless of this
setting.
pip install --upgrade aa-theme-xix
python manage.py collectstatic
If you are using aa-gdpr,
this theme's entry needs to come after the aa-gdpr entry:
# GDPR Compliance
INSTALLED_APPS.insert(0, "aagdpr")
AVOID_CDN = True
# XIX Theme - https://gitlab.com/legion-of-xxdeathxx/aa-theme-xix
INSTALLED_APPS.insert(0, "aa_theme_xix")
The shipped CSS and JS are not edited directly — they are compiled from
scss/ and js/ with a gulp + dart-sass + PostCSS + esbuild toolchain:
npm ci # reproducible toolchain pinned by package-lock.json
npm run compile # compiles scss/ and js/ -> aa_theme_xix/static/
The Python package is built with uv on the hatchling build backend:
uv build # produces a wheel and sdist in dist/
The package version is single-sourced in pyproject.toml (version);
aa_theme_xix/__init__.py derives __version__ from the installed
distribution metadata at runtime, and the test suite enforces the match.
collectstatic after every install or upgrade — the theme serves
its Bootstrap bundle and compiled CSS from this package's static files.Distributed under the GPL-3.0-or-later license.
See CHANGELOG.md.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.5.0 | 18 Oct 2026 | 1 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitLab
| Contributor | Contributions |
|---|---|
| Boris Talovikov | 44 |
| boris_t | 6 |
| Curt Petricca | 1 |
Default-branch author identities; GitLab commit counts exclude merge commits.
Public sponsor counts have not been collected. These signals belong to the repository owner.
gitlab · 4 observations shown. Missing days are unknown.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-23 | 3 | 2026-10-23T18:54:45.6511048Z |
| 2026-10-22 | 3 | 2026-10-22T18:54:20.8958109Z |
| 2026-10-21 | 3 | 2026-10-21T18:53:55.2436540Z |
| 2026-10-20 | 3 | 2026-10-20T18:53:33.2986513Z |
Observed since 20 Oct, 17:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:b77f5fc29624e8be4fdca4276588a04bc61a4090c5303aab7c76d072c9e7c57e