edmarketconnector.github.io.%LOCALAPPDATA%/EDMarketConnector.EliteBGSPortal.%APPDATA%/EDMarketConnector/plugins/EliteBGSPortal/~/.local/share/EDMarketConnector/plugins/EliteBGSPortal/
load.py using the button above.load.py into the EliteBGSPortal folder you just created.elite-bgs-config.json in the plugin folder.The ETNF Forwarder is built into the same plugin file. It solves one problem: BGS Tally can only send to one server at a time. ETNF sits in between — BGS Tally points at ETNF's local proxy, and ETNF fans every request out to as many destinations as you configure simultaneously. You can also use it to forward directly to Discord or any HTTP webhook without BGS Tally being involved at all.
http://localhost:5001 (configurable)._sender_loop, so Discord and webhook targets receive data even if you never configure BGS Tally.
Each ETNF target has a type that controls how the data is sent:
| Type | When to use it | What it sends |
|---|---|---|
| BGS Portal | Your ETN squadron portal or any Elite BGS Portal instance | BGS Tally API v1.8.0 — PUT activities, POST events, GET objectives. Requires server URL, squadron slug, and API key. |
| Custom API | Comstar, third-party squadron tools, or any server using the BGS Tally protocol but with a different URL layout or auth scheme | Same BGS Tally API v1.8.0 payload. Fully configurable URL template (with {endpoint} placeholder), auth header name, auth value, and HTTP method per endpoint. |
| Webhook | Any custom HTTP endpoint — squadron bots, stat trackers, logging services | Raw JSON body. Configure URL, method (POST/PUT/PATCH), and optional custom request headers (e.g. Authorization: Bearer xyz). Choose whether to forward activities, events, or both. |
| Discord | A Discord channel webhook for live squadron activity announcements | Formatted embeds — cyan for activity snapshots (~60 s), gold for journal event batches. Configure which data types to forward to avoid channel noise. |
http://localhost:5001etnf (ETNF ignores this — you can use any name)https://elite-bgs.storemy-squadron{endpoint} where the path segment goes.https://comstar.yourserver.com/api/bgs/{endpoint}apikey). Common alternatives: Authorization, X-API-Key.Authorization and the value to Bearer your-token-here.{endpoint}=discovery URL. If the server does not implement discovery, ETNF falls back to a HEAD request on the activities URL to confirm reachability.
Header-Name: value format. Examples:Authorization: Bearer my-secret-tokenX-Squadron-ID: my-squadron
The targets list shows all configured destinations with a status icon (✓ enabled / ✗ disabled), the target type, display name, and destination URL.
etnf-config.json in the plugin folder immediately — no restart required.
http://localhost:5002).pip install pynputsudo apt install python3-pynput
sudo apt install python3-tkload.py into the EliteBGSPortal folder.The Elite BGS Companion app for Windows installs and configures the EDMC plugin automatically — no manual folder creation or file moving required.
load.py, creates the EliteBGSPortal folder, and places the file inside — fully configured with your server URL and API key.EliteBGSPortal — capitalisation matters on Linux.load.py is directly inside EliteBGSPortal, not in a subfolder.%TEMP%\EDMarketConnector.log on Windows, ~/.local/share/EDMarketConnector/EDMarketConnector.log on Linux.http://localhost:5001 (or your custom port) — not the portal URL.[ETNF] lines — they show proxy startup and any bind errors.✗) never receive data — click Enable / Disable to re-enable.sudo apt install python3-tkecho $DISPLAY — if blank, launch EDMC with DISPLAY=:0 edmc.python3 -c "import pynput; print('OK')"pip install pynput then restart EDMC.