EDHelper is a Python desktop companion app for Elite Dangerous focused on live journal monitoring, current commander/game-state visibility, and historical journal import into a local SQLite database.
EDHelper currently includes:
- Live journal monitoring
- Live status monitoring
- In-memory game state tracking
- UI updates driven by incoming events
- Historical journal import
- Local SQLite persistence for selected imported data
- Exploration-related state handling
- Exobiology-related state handling
- PowerPlay-related state handling
- Item/material metadata support
- User settings management
The application currently has two important runtime paths:
This path handles what happens while the game is running.
Flow:
edc/app.pybootstraps the applicationedc/ui/main_window.pycreates the main UIMainWindow.start_auto_watch()starts live watchersedc/core/journal_watcher.pywatches journal files and emits eventsedc/ui/main_window.py::_on_event(evt)receives live eventsedc/core/event_engine.py::process(event)updates in-memory stateMainWindowupdates logging and refreshes UI elements
This path handles backfilling historical journal data into local persistence.
Flow:
edc/app.py::run()instantiatesJournalImporteredc/core/journal_importer.py::import_all()starts import processing- Journal files are parsed and normalized
- Repository methods in
persistence/repository.pypersist imported data - Processed journal files are marked as imported
Core runtime behavior, state management, live watchers, importer logic, and item catalog support.
Notable files:
event_engine.pyjournal_importer.pyjournal_watcher.pystatus_watcher.pystate.pyitem_catalog.py
Feature-specific event handling logic.
Notable files:
exploration.pyexobio.pyinventory.pypowerplay.py
Main UI, formatting helpers, and settings dialog.
Notable files:
main_window.pysettings_dialog.pyformatting.py
SQLite schema, connection layer, and repository/data access layer.
Notable files:
database.pyrepository.pyschema.py
The historical importer currently persists data through repository methods such as:
save_system(...)save_body(...)save_body_signals(...)save_exobiology(...)mark_journal_processed(...)
Live event processing currently updates in-memory state through EventEngine and UI logic through MainWindow. Historical import is the main confirmed persistence path.
| Tool | Purpose |
|---|---|
| Visual Studio Code | Primary IDE |
| Claude Code (VS Code extension) | AI-assisted analysis and architecture discussion — analysis only, no direct file edits |
| Python venv (Windows) | Isolated runtime environment |
| Git | Version control with branch-based workflow |
| GitHub | Remote repository and release tracking |
Claude Code usage rule: Claude Code is used in read-only/discussion mode only. All code changes are reviewed and applied manually before committing. No AI tool writes directly to project files.
Current startup is driven through the application bootstrap in edc/app.py, with run() acting as the main application startup function.
Recommended local workflow:
- Activate the project virtual environment
- Start the app through the normal project launcher/bootstrap path
- Verify watcher startup
- Verify live journal monitoring
- Verify database path/settings if historical import is enabled
The project has a good functional foundation and clear subsystem direction, but the documentation has lagged behind the codebase.
The biggest current needs are:
- updated technical documentation
- clearer ownership boundaries
- stronger change safety
- better regression coverage for live event and import flows
- continued refactoring of large or mixed-responsibility files
The main issues currently identified are:
- documentation drift
- unclear boundaries between some runtime components
- likely oversized or over-centralized UI orchestration in
main_window.py - need for stronger regression tests around live event processing and import processing
- need for better logging/debug visibility in high-risk paths
- refresh
README.md - replace the old project structure doc with a current version
- add a practical project plan
- add regression tests around
EventEngine.process(...) - add regression tests around
JournalImporter.import_all() - improve event and import logging
- continue reducing responsibility in
main_window.py - tighten boundaries between UI orchestration, engine logic, handlers, and importer logic
- document “where to edit for X” for future maintenance
The immediate goal is not just to add more features, but to make the existing codebase easier and safer to maintain by:
- documenting the real runtime flows
- reducing confusion between live and historical paths
- improving testability
- improving observability
- supporting safer future enhancements