Catalog PyPI
PACKAGE EXPLORERView in registry

aa-theme-xix

PyPI

Legion of xXDEATHXx Bootstrap 5 theme for Alliance Auth 5

Versions collected1
Direct dependencies1From release 0.5.0
Last observed20 Oct, 17:05 UTC

README

Version 0.5.0 documentation

Alliance Auth XIX Theme

PyPI version Python versions License: GPL-3.0-or-later

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.

Features

  • Dashboard theme via the AA5 theme selector. Registers a ThemeHook named xix that appears in the user's theme picker.
  • Self-contained assets. The theme serves its own Bootstrap 5 CSS, JS bundle and the Lato web font from this package's static files; nothing is loaded from a CDN or Google Fonts.
  • Restyled public pages. The login chain — with an animated starfield background — and the django-esi character-pick page are overridden with Bootstrap 5 layouts that match the theme.
  • Operator-configurable strings via an optional AA_THEME_XIX settings dict — no template forking required (see Configuration).
  • English and Russian translation catalogues.

Requirements

  • Alliance Auth >=5,<6
  • Python >=3.11,<3.15

Installation

pip 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.

Configuration

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.",
}
KeyDefaultDescription
LOGIN_TITLELegion of xXDEATHXxHeading (and logo alt text) in the login box.
LOGIN_SUBTITLEX.I.XTicker line under the heading.
DISCORD_INVITE_URLthe XIX Discord inviteTarget of the Discord link on the login page.
OPENGRAPH_DESCRIPTIONthe Alliance Auth blurbSite 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.

Default theme

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.

Upgrade

pip install --upgrade aa-theme-xix
python manage.py collectstatic

Using aa-gdpr

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")

Building from source

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.

Limitations

  • Alliance Auth 5 only. The templates target the AA5 / Bootstrap-5 theme-hook era; Alliance Auth 4 is not supported.
  • Run collectstatic after every install or upgrade — the theme serves its Bootstrap bundle and compiled CSS from this package's static files.
  • This is a presentation layer only: it adds no models, views, or URLs.

License

Distributed under the GPL-3.0-or-later license.

Changelog

See CHANGELOG.md.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.5.018 Oct 20261

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

ACCESSIBLE
legion-of-xxdeathxx/aa-theme-xix

Shared repository data · GitLab

License detected in repository
GNU General Public License v3.0 or later
License branch / ref
main
Contributor identities
3 · complete API traversal
License file
Contributors · showing 3 of 3 collected
ContributorContributions
Boris Talovikov44
boris_t6
Curt Petricca1

Default-branch author identities; GitLab commit counts exclude merge commits.

Public sponsor counts have not been collected. These signals belong to the repository owner.

Downloads & popularity

3identities
Gauge · observed snapshots23 Oct 2026
31.50
2026-10-20: 3 · observed 2026-10-20T18:53:33.2986513Z2026-10-21: 3 · observed 2026-10-21T18:53:55.2436540Z2026-10-22: 3 · observed 2026-10-22T18:54:20.8958109Z2026-10-23: 3 · observed 2026-10-23T18:54:45.6511048Z
20 Oct23 Oct

gitlab · 4 observations shown. Missing days are unknown.

View observed values
Date / source periodValueObserved at
2026-10-2332026-10-23T18:54:45.6511048Z
2026-10-2232026-10-22T18:54:20.8958109Z
2026-10-2132026-10-21T18:53:55.2436540Z
2026-10-2032026-10-20T18:53:33.2986513Z

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:05 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:b77f5fc29624e8be4fdca4276588a04bc61a4090c5303aab7c76d072c9e7c57e