Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - rwharpernc/ED-PLG: Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total. · GitHub
Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rwharpernc/ED-PLG: Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total. · GitHub
Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rwharpernc/ED-PLG: Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total. · GitHub
Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - rwharpernc/ED-PLG: Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total. · GitHub
Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rwharpernc/ED-PLG: Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total. · GitHub
Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rwharpernc/ED-PLG: Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total. · GitHub
Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - rwharpernc/ED-PLG: Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total. · GitHub
Skip to content

Repository files navigation

ED-PLG

Elite Dangerous Pillage Ledger & Gear-tracker

A lightweight Elite Dangerous Market Connector (EDMC) plugin for Elite Dangerous: Odyssey. ED-PLG tracks on-foot microresources — the components, items, and data you spend on suit and weapon upgrades — and tells you what you just looted, how much of it you now own, and whether you still have room to carry it.

Author: CMDR Bocheaux
Version: 1.0.0
License:MIT


What it does

When you loot a container on foot, ED-PLG announces it — in the EDMC panel, in the log, and (optionally) on an in-game overlay:

[Manufacturing Instructions] pillaged! New Inventory Total: 12

That total is the number that matters when you are deciding whether a pickup is worth a backpack slot, and it is not just what is in your backpack — see How it works below.

  • Live inventory tracking across your suit backpack, ship locker, and fleet carrier locker
  • Pillage notifications on every pickup, with your new combined total
  • In-game overlay alerts via EDMCModernOverlay (optional — the plugin works fine without it)
  • Inventory window — a tabbed view of everything you hold, with capacity bars per category, so you can see at a glance how close your backpack is to full
  • Ship locker capacity warning — an in-game overlay alert when a ship locker category hits 90% full, so you're not caught having to drop loot before you can offload it (at your ship, or remotely via an Apex shuttle)
  • Real names for Frontier's internal resource IDs (manufacturinginstructionsManufacturing Instructions)

Deliberately out of scope: ship engineering materials (Raw, Manufactured, Encoded) and commodity cargo. Those are separate game systems. ED-PLG deals only in Odyssey microresources — the stuff that upgrades your ground gear.

Requirements

That is all. ED-PLG is pure Python and uses only the standard library plus what EDMC provides — no pip install, and no separate Python installation (EDMC bundles its own).

Optional:

  • EDMCModernOverlay for in-game overlay alerts. The legacy EDMCOverlay also works. With neither installed, the overlay feature simply switches itself off and everything else runs normally.
  • Node.js 18+ — only if you want to run the build script, which just copies files. You never need it to use the plugin.

Installation

Installing means putting a folder named EDPLG into your EDMC plugins directory and restarting EDMC. Nothing is compiled.

Step 1 — Find your plugins folder

Easiest: open EDMC, go to File → Settings → Plugins, and click Open next to "Plugins folder".

Or navigate there yourself:

PlatformPlugins folder
Windows%LOCALAPPDATA%\EDMarketConnector\plugins
macOS~/Library/Application Support/EDMarketConnector/plugins
Linux~/.local/share/EDMarketConnector/plugins

On Windows, paste %LOCALAPPDATA%\EDMarketConnector\plugins into the File Explorer address bar and press Enter.

Step 2 — Put EDPLG in place

Download or git clone this repository, then copy the plugin/ folder into your plugins directory and rename it to EDPLG.

That is the whole install. (If you have Node.js and prefer a folder that is already named correctly and stripped of __pycache__, run npm run build and copy dist/EDPLG/ instead — the result is identical.)

The final layout must look like this:

<EDMC plugins folder>/
└── EDPLG/
├── __init__.py
├── load.py
├── inventory.py
├── suit.py
├── overlay.py
├── window.py
├── names.py
└── ui.py

The folder name matters. It must be exactly EDPLG, with the .py files sitting directly inside it. If you end up with EDPLG/plugin/load.py, move the files up a level. EDMC derives the plugin's logger name from the folder name, so a rename breaks logging.

Step 3 — Restart and verify

  1. Fully quit EDMC and start it again — plugins load only at launch.
  2. You should see the ED-PLG panel on the EDMC main window, and EDPLG listed under Enabled plugins in File → Settings → Plugins.
  3. With no game running the panel shows a neutral status. It changes to Inventory synced once you load a commander.

Nothing showing up? See Troubleshooting.

Usage

Launch Elite Dangerous and EDMC as usual, load your commander, and go raid something. Each pickup updates the panel, writes a line to the log, and draws an overlay message if you have an overlay plugin.

The inventory window

Click Inventory on the ED-PLG panel:

TabContents
BackpackWhat you are carrying, against your suit's capacity
Ship LockerWhat is stowed in the ship (1000 per category)
Carrier LockerFleet carrier locker from CAPI, when available

Each tab shows a total and capacity bar for Assets, Goods, and Data, then every resource you hold and its count. It updates live as you loot and can stay open while you play.

Because your suit sets your capacity, the heading names it and whether the capacity mod is fitted — for example Suit: Maverick Suit (Grade 4) + Extra Backpack Capacity.

Overlay notifications

With an overlay plugin installed, each pickup draws a line in-game:

+1 Manufacturing Instructions: 13
+2 Circuit Board: 5

Up to five lines stack, newest first, each lasting 8 seconds. Looting the same item again updates its existing line instead of adding a duplicate, so a fast loot run does not spam the stack.

Every ED-PLG message uses the edplg- ID prefix, which means you can reposition the whole stack from ModernOverlay's controller by adding an edplg- prefix group. Do that rather than editing coordinates in overlay.py — your change will survive plugin updates.

If the overlay throws an error at any point, ED-PLG disables it for the session rather than letting it break inventory tracking. Tracking is the job; the overlay is a nicety.

Settings

File → Settings → ED-PLG:

SettingDefaultDescription
Show pillage notifications on the in-game overlayOnGreyed out when no overlay plugin is installed
Suit Backpack CapacityUnengineered default per suitOne editable row per suit loadout you've worn; see Backpack capacity above

Troubleshooting

The EDMC log is at %TEMP%\EDMarketConnector.log on Windows; search it for EDPLG. Python import and syntax errors surface there.

  • Plugin not listed / no panel — Check the folder is named exactly EDPLG with the .py files directly inside (see the layout above), then restart EDMC.
  • Listed as disabled — A folder name ending in .disabled is skipped by EDMC. Remove the suffix and restart.
  • Overlay messages not appearing — Confirm EDMCModernOverlay is installed and running. In File → Settings → ED-PLG, a greyed-out checkbox means EDMC could not import edmcoverlay at all. If the box is enabled but nothing draws, search the log for EDMCModernOverlay is not available to accept messages.
  • Wrong backpack capacity — Expected for an engineered suit or the Flight Suit; the game never publishes capacity, so unengineered defaults are hardcoded. Enter the correct number for that specific loadout in File → Settings → ED-PLG.
  • Carrier numbers look stale — Also expected. CAPI is throttled; see Fleet carrier data is late.

How it works

ED-PLG never touches the game

The plugin does not read your game files, inject anything, or talk to Elite Dangerous at all. It is a passive listener sitting behind EDMC:

Elite Dangerous → writes journal files → EDMC tails them → ED-PLG reacts

EDMC watches the game's journal (the event log Frontier writes to disk as you play), parses each event, and hands it to every installed plugin. ED-PLG implements EDMC's plugin callbacks — chiefly journal_entry() — and updates its own counts from what it is given. Everything you see in the panel, window, and overlay is derived from that stream.

This is why the plugin is read-only and safe by construction, and also why it can only know what the journal chooses to report. Most of the limitations below trace back to that one fact.

Three stores, one total

ED-PLG keeps three separate ledgers, because the game does:

StoreSourceNotes
BackpackJournalWhat you are carrying on foot. Capacity depends on your suit.
Ship lockerJournalWhat is stowed in the ship. 1000 per category.
Carrier lockerFrontier CAPIYour fleet carrier's locker, if you have one. Lags the live game.

The number in a pillage message — "New Inventory Total: 12" — is the sum of all three. That is the question you actually want answered when a container pops open: do I already have enough of this? Not how many are in my backpack right now? If you are ever confused why the announced total exceeds what your backpack could possibly hold, this is why. The Inventory window breaks the same data back out per location.

Baselines and deltas

Two kinds of journal event drive the counts, and they work differently:

  • Baseline events (LoadGame, Backpack, ShipLocker, SuitLoadout, …) carry a full listing. ED-PLG throws away its counts and rebuilds them from scratch. These fire when you log in, disembark, board, or resupply.
  • Delta events (BackpackChange) carry only what changed — "+1 Manufacturing Instructions". ED-PLG applies the change to its running counts, and this is the only event that triggers a pillage announcement.

Deltas are fast but can drift if one is ever missed. So after processing every BackpackChange, ED-PLG reconciles against EDMC's own inventory state rather than trusting its arithmetic (load.py:244). The delta tells you what to announce; EDMC's state decides what is true. Errors cannot accumulate across a session.

Categories

The game's UI and its journal use different words for the same three things. ED-PLG speaks journal internally and shows you the in-game labels:

In gameJournal / codeExample
AssetsComponentCircuit Board
GoodsItemHealth Pack
DataDataManufacturing Instructions

Consumables (grenades, energy cells) are counted internally to keep the backpack model honest, but never announced as pillage — you did not loot them, you were issued them.

Resource names

Frontier's journal identifies resources by internal ID (manufacturinginstructions). Display names are resolved in this order:

  1. Name_Localised from the journal event — the game's own label, correct and localised
  2. A curated override table in names.py
  3. Names learned from Name_Localised earlier in this session or a previous one — the learned cache is persisted to EDMC's config and restored on the next launch
  4. A title-cased fallback

Because the game supplies Name_Localised for essentially every resource whose label differs from its ID, the curated table rarely needs to grow. It exists to fix the cases the fallback mangles — acronyms like rdxRDX — not to enumerate the game.

Backpack capacity: defaults plus your own numbers

The journal reports what is in your backpack, but never how much it holds. There is no event, anywhere, that publishes your capacity. So ED-PLG hardcodes the unengineered defaults, in suit.py, keyed by suit type and whether the Extra Backpack Capacity mod is fitted. Suit grade does not affect capacity on its own — a Grade 5 Maverick carries exactly as much as a Grade 1 one unless Extra Backpack Capacity is engineered onto it, and the journal only reports whether that mod is present, not which grade.

SuitGoods (Item)Assets (Component)Data
Maverick40 → 8060 → 12020 → 40
Artemis20 → 4040 → 8010 → 20
Dominator10 → 2020 → 4010 → 20
Flight Suitunknownunknownunknown

(base → with Extra Backpack Capacity)

Because engineering grade isn't visible to the plugin, and the Flight Suit has no known figure at all, File → Settings → ED-PLG lists every suit loadout you've been seen wearing, with an editable capacity field per category, pre-filled with the default above. Leave a field alone if it's right; update it if that specific loadout is engineered (or otherwise holds a different amount) — the Inventory window's capacity bar for that loadout then uses your number instead of the default. Where no default exists (Flight Suit) and you haven't entered one either, the window shows a plain count and no capacity bar rather than inventing a limit.

Fleet carrier data is late

Carrier locker contents do not appear in the journal at all. They come from Frontier's CAPI, which EDMC fetches on carrier events with a 15-minute throttle — so carrier figures can lag the live game by 15–30 minutes. Treat them as a recent snapshot, not a live readout. Data is cached per commander, so switching accounts never bleeds counts between CMDRs.

Ship locker capacity warning

The ship locker caps at 1000 per category. Fill one while out looting and you can be forced to drop items rather than store them — whether you're offloading at your own ship, or remotely via an Apex shuttle's "Manage Items" screen (which isn't separate storage — it's a proxy into the same locker your ship uses).

When a category (Assets, Goods, or Data) reaches 90% of capacity (900/1000), ED-PLG sends a red, longer-lived overlay warning distinct from ordinary pillage notifications, and logs it. It won't repeat while you stay over 90%, but it rearms — so if you offload and later refill past 90% again, you'll get warned again. Requires the in-game overlay to be installed and enabled; it also always logs to EDMarketConnector.log either way.

Known Limitations

Nearly all of these come from the same root cause: the plugin can only know what the journal tells it.

  • Backpack capacity is not published by the game — hence the hardcoded default table in suit.py, which can't reflect Extra Backpack Capacity's engineering grade or the Flight Suit (no known default at all). Correct it per suit loadout in File → Settings → ED-PLG rather than guessing.
  • Backpack contents may be incomplete if you log in already on foot — the game does not always emit a full baseline in that case. ED-PLG can't fill the gap, but it does track whether a real baseline has arrived this session and will show "backpack pending first sync" in the panel and inventory window instead of presenting a possibly-stale zero as confirmed.
  • Some consumable changes have no journal event at all (throwing a grenade, for instance), so those counts can drift until the next baseline.
  • Fleet carrier data lags 15–30 minutes — CAPI, not journal, and throttled.
  • Inventory tracking leans on EDMC's best-effort BackPack state; ED-PLG reconciles against it after every change, which corrects drift but inherits any gaps EDMC itself has.

See Design Specification — Known Limitations for the detail.

For Developers

npm run build # copies plugin/ → dist/EDPLG/, stripping __pycache__
npm run package # does the above, then zips it to dist/EDPLG-v<version>.zip

The build script is a convenience, not a compiler — the plugin is its source. Edit plugin/, rebuild if you like, copy to EDMC, restart. npm run package's zip is the same artifact published on the Releases page.

ED-PLG/
├── plugin/ # Python source — this is the plugin
├── docs/ # Specifications and credits
├── scripts/ # build.mjs, package.mjs
├── dist/EDPLG/ # Build output (gitignored)
├── CHANGELOG.md
├── LICENSE
└── README.md

Module map, in rough order of the data flow described above:

FileRole
load.pyEDMC entry point; receives journal events and dispatches them
inventory.pyThe three stores; applies baselines, deltas, and CAPI data
suit.pyCurrent suit and the backpack capacity table
names.pyInternal ID → display name resolution
ui.pyEDMC main-window panel and settings tab
window.pyThe tabbed inventory window
overlay.pyIn-game overlay client

Dependencies point one way: load.py knows about everything; ui.py does not import load.py (the Inventory button is wired through a callback); window.py reads a snapshot() from the tracker rather than reaching into it.

The tracker, names, suit, overlay, and window modules can all be exercised outside EDMC by stubbing the config and theme modules in sys.modules and replaying real journal lines through the tracker — useful, since the alternative is flying to a settlement to test a one-line change.

See the Technical Specification for the full API surface, event schemas, and handler behaviour.

Documentation

DocumentDescription
Design SpecificationUser experience, requirements, and event flow
Technical SpecificationAPI surface, modules, journal events, build system
Attributions & CreditsThird-party references and acknowledgements
ChangelogRelease history

Credits & License

ED-PLG is a fan-made tool by CMDR Bocheaux. It is not affiliated with Frontier Developments or the EDMC development team.

Full credits — including EDMC, the Elite Dangerous Player Journal documentation, and EDCD/FDevIDs microresource data — are in docs/ATTRIBUTIONS.md.

Copyright (c) 2025 CMDR Bocheaux. Released under the MIT License.

About

Lightweight EDMC plugin for Elite Dangerous: Odyssey that tracks on-foot microresources (backpack, ship locker, fleet carrier locker) and announces pickups with a running total.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages