Skip to main content

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.",
}
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.

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.

Metadata

Release files for aa-theme-xix 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aa-theme-xix 0.5.0
File Size Uploaded Provenance
aa_theme_xix-0.5.0.tar.gz 261.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for aa-theme-xix 0.5.0
File Interpreter ABI Platform
aa_theme_xix-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 529.7 kB

Release files / aa_theme_xix-0.5.0.tar.gz

Download URL aa_theme_xix-0.5.0.tar.gz
Size 261.1 kB
Tags Source
SHA-256 checksum
How to use checksums
6a1e32f0b576f0ecfb4ccd20b9d45fa0ec2aecc5db552e614f111dedd2230da0
BLAKE2b-256 checksum
How to use checksums
29f7c3ad69da23768cf9911da78807610b46ca2178270ece50db56be2bcfd574
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / aa_theme_xix-0.5.0-py3-none-any.whl

Download URL aa_theme_xix-0.5.0-py3-none-any.whl
Size 268.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c3c06258666cfd429403f0b5b61a968c48adcbe7f43caa80dfe7ad6508405b3e
BLAKE2b-256 checksum
How to use checksums
98991be4bf1ae62fc402d039e5314064be61bca0d83087a93c71333e825f1745
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for aa-theme-xix 0.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page