Skip to content
MaverickArcanePublic

About

Self-hosted, modular live dashboard for Elite Dangerous with an AI-facing API (MCP). Vibe coded; fork and mess with it.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

EliteLab

A small, self-hosted dashboard for Elite Dangerous that an AI assistant can also talk to. It reads the game's journal files on your PC, shows what is going on right now (location, ship, cargo, Powerplay, carrier, materials, a star map), and exposes the same data as tools that Claude Code, any MCP client, or a shell script can call.

This project is vibe coded. I built it with an AI assistant while playing, to test things out in Elite and to have a dashboard I can interact with and call on with AI help. It is not polished software and does not try to be. Anyone is welcome to fork it, mess around with it, rip modules out, add their own, or take it somewhere else entirely. If you find a bug, open an issue with the journal lines around it. If you build a module, open a PR. Nothing fancy.

No accounts, no uploads, no dependencies: Python standard library, one web page, no build step.

EliteLab desktop dashboard with the cockpit theme, ship readouts, and engineering panels

The current desktop layout. Screenshots use the bundled sample journals; live market data and personal builds depend on your session.

Engineering workspace

Switch to the Engineering preset to bring build planning, the wishlist, recipes, and material farming together.

Engineering preset showing build planning, the engineering wishlist, recipes, and material farm sites

See the mobile layout

Cards stack vertically on narrow screens, keeping commander, location, and ship information readable.

EliteLab at a 390-pixel mobile width, with location and ship cards stacked vertically

What it does

Module Dashboard card(s) AI tools
journal Location, Ship, Cargo, Rares at this market, Live feed get_commander_state
carrier Fleet carrier: owned details or one pinned visitor carrier get_followed_carrier, pin_fleet_carrier, unpin_fleet_carrier, refresh_followed_carrier
powerplay Power, rank, merits, merits this session, cycle countdown get_powerplay_status
merits Merits per hour and per activity, worked out from the journal get_merits_summary
combat Where combat pays merits: contested systems with combat zones, acquisition, undermining, reinforcement find_combat_systems
targets Powerplay sell-target finder with jump counts, market freshness, and warnings about rares a station will not buy; power comparison find_sell_targets, compare_powers, get_system_info
loop Rare goods loop that ticks itself from your hold, sorted by distance, with the next stop get_rares_loop, select_rares_loop
materials Inventory as the game reports it, filterable; where-to-farm hints; a flat per-material wishlist for scripts get_materials, set_wishlist, get_wishlist, material_sources
recipes Engineering blueprints G1-G5 and experimental effects with materials per grade and which engineers offer them; searchable list_recipes, get_recipe
wishlist Engineering wishlist: pick a blueprint (from grade X to grade Y), experimental effect, tech broker unlock or material; have/need/short against live inventory; material trader plan for the shortfalls; nearest traders get_engineering_wishlist, wishlist_add, wishlist_remove, wishlist_options, plan_material_trades, find_material_traders
farming Where to farm: crystal shards, brain trees, Dav's Hope, Jameson, Guardian structures, HGE by state; nearest first, flagged when they cover a wishlist shortfall; map layer find_farm_sites
build Pin an EDSY or Coriolis build (or SLEF JSON) and measure your ship against it: modules to buy (with credits), blueprints and grades still to roll, effects, every material vs inventory, one click to track it on the wishlist get_build_progress, pin_build, unpin_build, build_to_wishlist
history Feeds the map get_travel_history
map Star map: starfield, visited systems coloured by star class, route trail, layers from other modules get_system_coords
core Header, live connection, layout get_state, get_recent_events, list_modules, list_tools, health

Everything updates live over Server-Sent Events the moment the game writes a journal line. Cards can be dragged, resized, hidden, saved as named layouts, or switched between presets (Powerplay, Rares run, Combat, Mining and trade, Engineering, Second screen).

You do not need to own a fleet carrier to use the Fleet carrier card. Choose a carrier from your journal visits and click Pin to follow its last reported system and services. The selection survives restarts. Your journal updates it when you dock, log in aboard, or ride a jump; Spansh reports are checked every five minutes while EliteLab runs. Refresh uses the same five-minute cache. Reports can lag behind movements, so the card shows the source, observation time and last check separately. Offline mode keeps saved observations. Unpin restores the owned-carrier view, if available. Fuel, balance and free capacity are owner-only information. If the card is hidden by your layout preset, enable Fleet carrier in the Layout menu.

Quick start

Windows, no Docker

Requires Python 3.10 or newer (python.org, tick "Add to PATH").

git clone https://github.com/MaverickArcane/EliteLab.git
cd EliteLab
"Start EliteLab.cmd"

That opens http://localhost:8766. The journal folder is found automatically at %USERPROFILE%\Saved Games\Frontier Developments\Elite Dangerous.

Docker

cp .env.example .env        # set ELITELAB_JOURNAL_DIR
docker compose up -d --build

Journals are mounted read-only. Wishlists and the selected loop persist in a named volume.

Linux and macOS

./start.sh --journals "/path/to/Saved Games/Frontier Developments/Elite Dangerous"

Talking to it from an AI

With the lab running, open the repo folder in Claude Code. The .mcp.json in the repo registers the elitelab MCP server automatically. Then ask things like:

I want to work on getting materials for an FSD G5 Increased Range roll.

The assistant adds the blueprint to your engineering wishlist, reads your shortfalls, suggests material trader exchanges from your surplus, and tells you where to farm the rest. The Engineering wishlist card shows the same shortfalls going down as you collect.

Any agent with a shell can do the same without MCP:

python -m elitelab tools
python -m elitelab call get_materials only_short=true
python -m elitelab call find_sell_targets min=125 max=165

See docs/AI.md.

Configuration

Variable Default Meaning
ELITELAB_HOST / ELITELAB_PORT 127.0.0.1 / 8766 Bind address (0.0.0.0 in Docker)
ELITELAB_JOURNAL_DIR Saved Games path, or /journals Where the game writes Journal.*.log
ELITELAB_DATA_DIR ./data Persistent files (wishlist, selected loop)
ELITELAB_RECENT_JOURNALS 3 Journal files replayed at startup
ELITELAB_DISABLE Comma-separated module names to skip
ELITELAB_OFFLINE Set to 1 to never call Spansh or EDSM (tests use this)
ELITELAB_URL http://127.0.0.1:8766 Where the MCP proxy finds the lab

Bind to 0.0.0.0 to open the dashboard from a tablet on your LAN. There is no auth, so do not expose it to the internet.

How it is built

game journal --> watcher --> event bus --> modules --> state store --> SSE --> browser cards
                                              |
                                              +--> routes = /api/* = MCP tools

A core (bus, store, services, HTTP, loader, journal watcher) and modules that declare what they require and provide. Modules talk only through the store and the bus. The loader sorts them by dependency and refuses to start on a missing one. Every route registered with a tool name is automatically an MCP tool.

  • docs/ARCHITECTURE.md: how the pieces fit
  • docs/MODULES.md: how to write a module
  • docs/API.md: every endpoint and tool, generated from /api/schema
  • docs/AI.md: MCP, shell and HTTP usage for assistants
  • ROADMAP.md: what I want to do next
  • CONTRIBUTING.md: how to help

Tests

python -m unittest discover -s tests -v

Runs offline against a synthetic journal in tests/fixtures/journals. CI runs the same on Linux and Windows, syntax-checks the front end, and builds the Docker image.

Similar projects

EliteLab is small and Powerplay-first. For more complete tools, see:

Data sources and thanks

Spansh (https://spansh.co.uk) for station and system search, EDSM (https://www.edsm.net) for coordinates, and Frontier's Player Journal manual for the format. Elite Dangerous is a trademark of Frontier Developments plc. This project is not affiliated with Frontier.

License

MIT. See LICENSE.

About

Self-hosted, modular live dashboard for Elite Dangerous with an AI-facing API (MCP). Vibe coded; fork and mess with it.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages