{"id":20426501,"url":"https://github.com/danikaze/eddt","last_synced_at":"2025-08-12T09:14:50.525Z","repository":{"id":37185392,"uuid":"282412901","full_name":"danikaze/eddt","owner":"danikaze","description":"Provide real time information using the Elite Dangerous Journal files","archived":false,"fork":false,"pushed_at":"2023-01-06T12:29:07.000Z","size":1853,"stargazers_count":0,"open_issues_count":21,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-05T05:18:15.441Z","etag":null,"topics":["elite-dangerous","obs-studio"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danikaze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-25T09:31:40.000Z","updated_at":"2020-09-23T01:12:22.000Z","dependencies_parsed_at":"2023-02-06T02:15:17.318Z","dependency_job_id":null,"html_url":"https://github.com/danikaze/eddt","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/danikaze/eddt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danikaze%2Feddt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danikaze%2Feddt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danikaze%2Feddt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danikaze%2Feddt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danikaze","download_url":"https://codeload.github.com/danikaze/eddt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danikaze%2Feddt/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265110032,"owners_count":23712799,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elite-dangerous","obs-studio"],"created_at":"2024-11-15T07:16:43.140Z","updated_at":"2025-07-13T08:34:50.944Z","avatar_url":"https://github.com/danikaze.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EDDT\n\n**_Elite Dangerous Desktop Tools_** is just a small app to detect and extract changes from your running session of the game by listening to changes in the game journal.\n\n## Installation\n\n[Download](https://github.com/danikaze/eddt/releases/latest) the installer and execute it. It will automatically install the application in the `%USERPROFILE%\\AppData\\Local\\Programs\\eddt` folder and create a Desktop shortcut.\n\nIt can be uninstalled as a regular Windows application, from the `Add or remove programs` menu.\n\n**Alternative:** Download the unpacked version, unzip it and execute it from your preferred location without installing it.\n\n## Architecture\n\nAll the processing is split in several phases.\n\nThere's a singleton [EventManager](main/ed/event-manager.ts) and a singleton [DataManager](main/ed/data-manager.ts).\n\n- The `EventManager` is listening to the Elite Dangerous Journal file and triggers [events](main/ed/events.ts) when they happen.\n- The `DataManager` listens to those events through the [EventProcessors](main/event-processors) and update the _data library_, which is accessible from other parts of the code as well. When any data is updated, an event is triggered so actions can be taken.\n- The next step is done by the [InfoGenerators](main/info-generators), which create texts that can be used some way (usually piped to a [file writer](main/outputters/write-file.ts) instance)\n- The last step is done by the [Outputters](main/outputters), which accept strings (provided by the `InfoGenerators`) and do something with them, so they are usable by external programs (such as [OBS](https://obsproject.com/) with a _Text Source_ reading the contents from file).\n\n### Notes\n\n`DataManager` listen to game Events (triggered by `EventManager`), and since those Events could affect more than one data at the same time, the events triggered by the `DataManager` are done after all the updates are finished, providing as well the timestamp, so the `InfoGenerators` don't run several times for the same update.\n\nSome `Outputters` could act as a _middle-ware_ for `Outputters` as well. (i.e. the [Rotator](main/outputters/rotator.ts) accepts several `InfoGenerators` and manages the info outputting it into only one file via another piped `Outputter`)\n\nThere are [middlewares](main/info-generators/middleware) for the `InfoGenerators` as well. They take the incoming data and can cancel the generation (by returning `undefined` or returning a modified version of the data itself)\n\n## Is it safe?\n\nCompletely!\nIt reads information provided by [Frontier](https://frontier.co.uk/) in the game intended to develop third party applications like [EDMC](https://github.com/EDCD/EDMarketConnector).\n\nIt only provides game of the game universe, nothing personal.\nIf you are curiours, you can check the content of the `Journal` files in the directory: `C:\\Users\\%userprofile%\\Saved Games\\Frontier Developments\\Elite Dangerous`\n\n## Configuration\n\nYes, some settings are required to make this app work! But from version 0.5.0 this is possible to be configured using [settings.json](main/static/settings.json) (or `settings.js` with `module.exports` would work too). This file will be available in the `data` directory inside the application **after** its first execution.\n\nThis is the list of all settings available so far (settings without a default are required)\n\n### Root level\n\n| Setting             | Description                                                                                                                                                  |\n| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| locale              | Language to use from an [available localization file](static/locales), as the file name without extension. Default: `en`                                     |\n| displaySettings     | If `true`, settings being used will be displayed when starting the app. Default: `false`                                                                     |\n| displayFinalData    | If `true`, all the available data from the events will be displayed when exiting the app. Default: `false`                                                   |\n| eventManager        | Settings related to the ED Event Manager ([EventManager options](#eventmanager-options))                                                                     |\n| navFilePath         | Path to the file where the navigation information will be written. If specified, the folder must exist but can left blank to not outputting this information |\n| navFileOptions      | Options related to the navigation information ([WriteFileOutputter options](#writefileoutputter-options))                                                    |\n| eventsFilePath      | Path to the file where the events information will be written. If specified, the folder must exist but can left blank to not outputting this information     |\n| eventsFileOptions   | Options related to the events information ([WriteFileOutputter options](#writefileoutputter-options))                                                        |\n| gameModeFilePath    | Path to the file where the game mode will be written. If specified, the folder must exist but can left blank to not outputting this information              |\n| gameModeFileOptions | Options related to the game mode information ([WriteFileOutputter options](#writefileoutputter-options))                                                     |\n\n### EventManager options\n\n| Setting       | Description                                                                                                                                                                                                                                                |\n| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| journalFolder | Folder where `.journal` files are. Default: `C:\\Users\\%userprofile%\\Saved Games\\Frontier Developments\\Elite Dangerous`                                                                                                                                     |\n| verbose       | If `false`, misc. information won't be displayed. Default: `true`                                                                                                                                                                                          |\n| logEvents     | Array of `'used'` or `'unused'`. Shows when one event is detected. Default: `[]`                                                                                                                                                                           |\n| ignoreBefore  | Events generated more than the especified number (in milliseconds) won't generate any output. This avoid generating a big queue of events when opening the app in the middle of the game instead of opening it at the start. Default: `30000` (30 seconds) |\n\n### WriteFileOutputter options\n\n| Setting      | Description                                                                                           |\n| ------------ | ----------------------------------------------------------------------------------------------------- |\n| verbose      | If `true` it will log the content being outputted to the file every time it changes. Default: `false` |\n| clearOnStart | If `true`, the file will be emptied when the app is opened. Default: `true`                           |\n| clearOnEnd   | If `true`, the file will be emptied when the app is closed. Default: `true`                           |\n\n## Change log\n\n### 0.7.0\n\n- Provide an executable for easy execution\n- Added info generator: `Distance`\n- Differenciate when killing skimmers from pirates, allowing to use different texts for it\n\n### 0.6.0\n\n- Added info generators: `LoadData`, `Scan`, `FactionKillBond`\n- Fixed: `DockingRequested`, `DockingGranted`, `DockingDenied` events not being loaded\n\n### 0.5.0\n\n- Added localization for messages\n- Added settings file\n\n### 0.4.0\n\n- Add info generators for `BodiesApproached`, `BodiesLeft`, `MissionsAccepted`, `MissionsCompleted`, `MissionsFailed`, `MissionsAbandoned`, `DockingRequested`, `DockingGranted`, `DockingDenied`, `InterdictionsEscaped`, `InterdictionsLost`, `InterdictionsSubmitted`, `Bounty`, `JumpDistance`, `MaterialsCollected`, `MiningRefined`, `ProspectedAsteroids` and `LaunchedDrones`\n- Refactor middleware usage for `EventManager`, `InfoGenerator` and `Outputter`\n- Refactor `EventManager` to provide events even if they are old (to be able to keep track of changes), and use the new `DataManager.eventsEnabled` instead\n- `DataManager` final content is shown when exiting the app\n\n### 0.3.0\n\n- Perform proper cleanup on exit\n- Added Outputter middleware `TextSpacer`\n- Fixed minor bugs introduced in 0.2.0\n- OutputRotator tunning\n- Added `isOld` and `middleware` options in `EventManager`\n- Define which events are old so they are not processed in case the app is opened in the middle of the game (avoid over queuing old events)\n\n### 0.2.0\n\n- Refactor the process flow to work like `Game Events` \u003e `Data management` \u003e `Info generation` \u003e `Output`\n- Added new events (`Scanned`, `HeatWarning`, `Bounty`, `ShipTargeted`) rotating into `events.txt`\n\n#### 0.2.1\n\n- Don't use already shutdown Journal files\n- Properly detect the Journal file even when the app is executed before the game is opened\n\n### 0.1.0\n\n- First version to test the PoC\n- Available events\n  - Navigation ones (`NavRoute`, `FSDJump`, `Docked`, `Undocked`, `ApproachBody`, `LeaveBody`) into `nav.txt`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanikaze%2Feddt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanikaze%2Feddt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanikaze%2Feddt/lists"}