Skip to main content

Indy Hub for Alliance Auth

A modern industry and material‑exchange management module for Alliance Auth, focused on blueprint sharing, job tracking, and corp trading workflows for EVE Online alliances and corporations.


Table of Contents


About

Current Highlights

  • Industry Jobs refresh behavior: live ESI skill refresh is now explicit on the jobs page (Force Refresh) instead of running on every render.
  • Jobs freshness visibility: the jobs header now shows Last update to clarify current data recency.
  • Settings render performance: settings hub uses a lightweight context path to reduce page render latency.
  • Token Management safety/perf: render paths avoid live token refresh side effects and use passive validity filtering for scope coverage.
  • User activity gating: manual refresh gating now uses Corptools last_known_login when available, and falls back permissively when Corptools is absent or has no usable login data.
  • Industry Structures performance: resolved structure bonuses are cached persistently and invalidated only when relevant structure/rig signature fields change.

Features

  • Blueprint Library: Browse, search, and manage personal and corporation blueprints.
  • Industry Jobs: Track active and completed manufacturing, research, and invention jobs.
  • Blueprint Copy Requests: Create requests, receive offers, chat with builders, and follow delivery status.
  • Sharing Controls: Configure who can see and fulfill blueprint copy requests.
  • Material Exchange: Submit buy/sell orders and follow validation/processing from one hub.
  • Order Tracking: View clear statuses, timelines, and history for your requests and orders.
  • Notifications: Receive in-app updates for key events (offers, deliveries, job updates).
  • Analytics Hooks: Emits Alliance Auth analytics events for key Material Exchange lifecycle transitions.
  • Admin Tools: Manage corp blueprint workflows and Material Exchange operations with dedicated admin views.
  • Modern UI: Responsive, theme-friendly interface designed for daily operational use.

Requirements

  • Alliance Auth v5.x
  • Python 3.12+
  • Django 5.2
  • django-esi 9.x
  • django-eveonline-sde 0.0.1+ (base SDE data)
  • Celery (for background sync and notifications)
  • (Optional) Director characters for corporate dashboards
  • (Optional) Corptools, to provide corptools_characteraudit.last_known_login for activity-aware refresh gating. If absent, Indy Hub falls back to permissive behavior.
  • (Optional) aa-charlink to let users authorize Indy Hub scopes through CharLink
  • (Optional) aadiscordbot (preferred) or discordnotify for Discord notifications

Installation

Bare Metal

pip install django-eveonline-sde indy-hub

Add to your local.py:

INSTALLED_APPS = [
    "eve_sde",
    "indy_hub",
]

Ensure the base eve_sde data is already loaded by following the official django-eveonline-sde setup process before using Indy Hub.

Run migrations and collect static files:

python manage.py migrate
python manage.py collectstatic --noinput

Restart services:

systemctl restart allianceauth

Docker

docker compose exec allianceauth_gunicorn bash
pip install django-eveonline-sde indy-hub
exit

Add to your conf/local.py:

INSTALLED_APPS = [
    "eve_sde",
    "indy_hub",
]

Add to your conf/requirements.txt (Always use current versions)

indy-hub==1.18.2

Ensure the base eve_sde data is already loaded in your stack by following the official django-eveonline-sde setup process before using Indy Hub.

Run migrations and collect static files:

docker compose exec allianceauth_gunicorn bash
auth migrate
auth collectstatic --noinput
exit

Restart Auth:

docker compose build
docker compose down
docker compose up -d

Common

  • Set permissions in Alliance Auth (see Permissions).
  • Authorize ESI tokens for blueprints and industry jobs.
  • If aa-charlink is installed, Indy Hub is auto-discovered by CharLink and exposes three login options: personal Indy Hub scopes, corporation admin scopes, and Material Exchange scopes. The two admin options are intentionally not selected by default because they request broader corporation access.

Permissions

Assign permissions in Alliance Auth to control access levels:

Base Access (Required for all users)

  • Visible in admin: "indy_hub | can access Indy_Hub"
    • View and manage personal blueprints
    • Create and manage blueprint copy requests
    • Use Material Exchange (buy/sell orders)
    • View personal industry jobs
    • Configure personal settings and notifications

Corporation Management (Optional)

  • Visible in admin: "indy_hub | can admin Corp"
    • View and manage corporation blueprints (director only)
    • Handle corporation blueprint copy requests (accept/reject corp BP copy sharing)
    • Access corporation industry jobs
    • Configure corporation sharing settings
    • This role is not meant for everyone — only for people who manage corp BPs (they can handle contracts for corpmates)
    • Requires ESI director roles for the corporation

Material Exchange Administration (Optional)

  • Visible in admin: "indy_hub | can admin MatExchange"
    • Configure Material Exchange settings
    • Manage stock availability
    • View all transactions
    • This role is not meant for everyone — only for people who manage the hub (they accept/reject buy and sell orders made to the corp)
    • Admin panel access

Note: Permissions are independent and can be combined. Most users only need can access Indy_Hub.


Settings

Customize Indy Hub behavior in local.py:

# Discord notifications
INDY_HUB_DISCORD_DM_ENABLED = True  # Default: True
INDY_HUB_NOTIFICATION_DISPATCH_MODE = (
    "discord_direct_only"  # aa_only | discord_direct_only | both
)
INDY_HUB_NOTIFICATION_IDEMPOTENCY_TTL_SECONDS = 300  # Default: 300s
INDY_HUB_DISCORD_ACTION_TOKEN_MAX_AGE = 86400  # Default: 24 hours

# ESI task staggering (rate-limit friendly scheduling)
INDY_HUB_ESI_TASK_STAGGER_THRESHOLD = 0  # Default: 0
INDY_HUB_ESI_TASK_TARGET_PER_MIN_BLUEPRINTS = 90  # Default: 90
INDY_HUB_ESI_TASK_TARGET_PER_MIN_JOBS = 60  # Default: 60
INDY_HUB_ESI_TASK_TARGET_PER_MIN_SKILLS = 80  # Default: 80
INDY_HUB_ESI_TASK_TARGET_PER_MIN_ROLES = 60  # Default: 60
INDY_HUB_BLUEPRINTS_BULK_WINDOW_MINUTES = 0  # Default: 0
INDY_HUB_INDUSTRY_JOBS_BULK_WINDOW_MINUTES = 0  # Default: 0

# Stale refresh thresholds (hours)
INDY_HUB_SKILL_SNAPSHOT_STALE_HOURS = 24  # Default: 24
INDY_HUB_ROLE_SNAPSHOT_STALE_HOURS = 24  # Default: 24
INDY_HUB_STRUCTURE_NAME_STALE_HOURS = 24  # Default: 24

Notification dispatch modes:

  • aa_only: persist Alliance Auth notifications only (recommended when a proxy already relays AA notifications to Discord).
  • discord_direct_only: send direct Discord DM first; fallback to Alliance Auth notifications when direct delivery fails.
  • both: persist Alliance Auth notifications and send direct Discord DMs (explicit opt-in).

Scheduled Tasks (auto-created):

  • indy-hub-update-all-blueprints → Daily at 03:30 UTC
  • indy-hub-update-all-industry-jobs → Every 2 hours
  • indy-hub-refresh-stale-snapshots → Hourly (skills/roles/structures)

Updating

For release-specific operational notes, see docs/UPGRADE_NOTES.md.

Bare Metal Update

# Update the package
pip install --upgrade indy-hub

# Apply migrations
python manage.py migrate

# Collect static files
python manage.py collectstatic --noinput

# Restart services
systemctl restart allianceauth

Docker Update

Update Versions in conf/requirements.txt (Always use current versions)

indy-hub==1.18.2

Update the Package:

# Exec Into the Container
docker compose exec allianceauth_gunicorn bash

# Update the package
pip install -U indy-hub

# Apply Migrations
auth migrate

# Collect static files
auth collectstatic --no-input

# Restart Services
exit
docker compose build
docker compose down
docker compose up -d

If Celery runs in dedicated containers/services in your stack, also restart worker and beat/scheduler containers.


Usage

  1. Navigate to Indy Hub in the Alliance Auth dashboard
  2. Authorize ESI for blueprints and jobs via the settings
  3. View Your Data:
  • Personal blueprints and industry jobs
  • Corporation blueprints (if director)
  • Pending blueprint copy requests
  • Material Exchange buy/sell orders and transaction history
  1. Share Blueprints: Set sharing scopes and send copy offers to alliance members
  2. Receive Notifications: View job completions and copy request updates in the notification feed

Screenshots

Below are a few UI highlights from the current release.

Dashboard Overview

Dashboard overview

Blueprint Library

Blueprint library filters and list

Blueprint Copy Requests

Copy request workflow

Material Exchange Hub

Material exchange overview

Order Requests

Order request details

Discord Notifications

Discord notification example

User Settings

User settings and preferences


Contributing

  • Open an issue or pull request on GitHub for help or to contribute Or contact me on discord: erkaek

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

indy_hub-1.18.2.tar.gz (935.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

indy_hub-1.18.2-py3-none-any.whl (1.1 MB view details)

Uploaded Python 3

File details

Details for the file indy_hub-1.18.2.tar.gz.

File metadata

  • Download URL: indy_hub-1.18.2.tar.gz
  • Upload date:
  • Size: 935.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for indy_hub-1.18.2.tar.gz
Algorithm Hash digest
SHA256 f61212063a59599d6d16b074000fa51aa7e7117fab871b43db809f2cba771c41
MD5 42e0f5670185808c3c5c1345f286cb19
BLAKE2b-256 d376de3dd83dd96a6a99b629d088fd87cee540c763fca3ee7b3fe84356a202db

See more details on using hashes here.

File details

Details for the file indy_hub-1.18.2-py3-none-any.whl.

File metadata

  • Download URL: indy_hub-1.18.2-py3-none-any.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for indy_hub-1.18.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cdb9623b469f518acefc7651b1c83985b646d888c8bbf81f71564a9c91adb861
MD5 9492a789d801af02400402bde5bbf9ae
BLAKE2b-256 551981ee21688e5fb13efeacb108bed9798e3e8d61390f94f6994444fd994b53

See more details on using hashes here.

Release history Release notifications | RSS feed

1.18.3

2 files

This release

1.18.2 This release

2 files

1.17.2

2 files

1.17.1

2 files

1.17.0

2 files

1.16.2

2 files

1.16.1

2 files

1.16.0

2 files

1.15.1

2 files

1.15.0

2 files

1.14.5

2 files

1.14.4

2 files

1.14.3

2 files

1.14.2

2 files

1.14.1

2 files

1.14.0

2 files

1.13.13

2 files

1.13.12

2 files

1.13.11

2 files

1.13.10

2 files

1.13.9

2 files

1.13.8

2 files

1.13.7

2 files

1.13.6

2 files

1.13.5

2 files

1.13.3

2 files

1.13.2

2 files

1.13.0

2 files

1.12.2

2 files

1.12.1

2 files

1.11.0

2 files

1.10.2

2 files

1.10.0

2 files

1.9.11

2 files

1.9.10

2 files

1.9.9

2 files

1.9.8

2 files

1.9.6

2 files

1.9.5

2 files

1.8.4

2 files

1.8.3

2 files

1.8.2

2 files

1.8.1

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

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