Getting started
EVE Together is a local-first desktop companion for EVE Online. It runs fully on your own machine — managing fits, fleets, compositions, runs, killmails and a map of New Eden, with live combat metrics — and an optional self-hosted server when you want to fly as a group.
There are two ways to run it:
- Solo / local-only — just the desktop client. Every character authenticates locally, tokens stay on your disk, nothing is shared.
- Together — one person in your group hosts a server (Docker). Characters you mark as synced couple to it; everything else stays local.
Installation
Desktop client
Download the build for your platform from the Releases page. The builds are self-contained — no separate .NET install needed — and are packaged with Velopack, so an installed copy keeps itself up to date.
| Platform | Asset |
|---|---|
| Windows | The -Setup.exe installer, or the -Portable.zip if you would rather not install |
| Linux | The .AppImage |
| macOS | The -Setup.pkg (Apple silicon and Intel builds) |
1. Install, or unpack, the build for your OS
2. Start EVE Together; the first start downloads EVE's static data once
3. + ADD CHARACTER -> sign in with EVE SSO
4. Tick the ESI scopes the features you want require
5. Settings -> General: check that the game log folder is right
Your data lives in %LOCALAPPDATA%\EveTogetherData on Windows: settings, sign-ins, fits,
runs, caches and backups. Settings → Show Data Folder opens it. Delete the folder and the app starts clean.
Updates: Settings → Updates has a Check for updates on startup toggle and a Check now button. The release channel is Stable by default; switch it to Nightly to follow a rolling build of the latest changes.
Self-hosted server (optional)
The server ships as a Docker image — ghcr.io/evetogether/eve-together-server,
tagged :latest and per release version. It comes with no EVE credentials baked in:
every deployment registers its own EVE application at
developers.eveonline.com
and supplies the Client ID and Secret, or the server refuses to start outside Development.
docker run -d --name eve-together-server \
-p 7443:7443 -v eve-together-data:/data \
-e Esi__ClientId="your-client-id" \
-e Esi__ClientSecret="your-secret-key" \
-e Esi__CallbackUri="https://your-server.example.com/auth/eve/callback" \
-e Server__AdminSeedPassword="choose-a-strong-password" \
ghcr.io/evetogether/eve-together-server:latest
Then, in the client, couple a character to it: open that character's settings (the gear on its card) → couple a server → enter the server address (and an optional label) → sign in as the character you want synced. The client pins the server's TLS fingerprint on that first connection (trust-on-first-use); the server prints it at startup.
Everything persists in the /data volume — the database, the TLS certificate, the app log,
the ESI cache and the auth store. Back it up. The full guide (database providers, the pairing
allowed-list, reverse proxies, upgrades) lives in
docs/server-installation.md.
Core concepts
| Concept | What it is |
|---|---|
| Character | An EVE pilot you've added. Each carries its own auth mode (local/synced) and ESI scopes. |
| Fit | A ship fitting, imported or authored, validated against the SDE. |
| Composition | A doctrine: roles with per-role minimums and the fits approved for each. |
| Run | One thing you flew — a site, mission, mining op, abyssal or homefront — with its time, bounty, loot, consumables and ISK. |
| Killmail | One of your own kills or losses, read from ESI and linked to the run it belongs to. |
| Fleet | A live or forming group. Members pick comp-scoped fits; doctrine compliance is tracked. |
| Coupled fleet | A fleet linked to your live in-game EVE fleet. Structure changes, invites, moves and kicks are mirrored into EVE when you hold the in-game write access. |
| Server | A self-hosted instance you couple characters to. Fits, compositions, fleets and live metrics are shared with the people on that server — and nowhere else. |
| Module | A vertical feature slice (Fittings, Fleet, Runs, Map…). In the app, each rail entry opens one as a tab or a window; see Using the modules. |
Using the modules
Every entry in the left rail of the app opens one module as a tab (or, with FLOAT, as a window of its own). HOME shows the start screen again without closing your tabs. Most modules have a keyboard shortcut, listed under Settings → Keyboard shortcuts.
Characters
The character column on the left lists your pilots as cards: portrait, corporation, the ESI and server badges, and three buttons for metrics, the overlay and the character's settings.
- Add: + ADD CHARACTER opens EVE SSO in your browser. The scope dialog lets you pick what to grant; you can grant more later and sign in again.
- Order: drag a card to reorder it. The order is used everywhere characters are listed.
- Server: in the character's settings, couple it to a server or decouple it.
- Remove: the bottom of the character's settings. Its sign-in is revoked at CCP and its tokens and cached data are deleted from your PC; its runs and fits stay unless you tick the box to delete them too.
Home
The start screen. Read it top to bottom: ISK earned today, this week and this month; your pilots with their skill-queue standing; the runs going right now and the latest ones; your fleets with START and NEW FLEET; your best drops; and the activity of the last 30 days. A band at the top tells you when something needs attention, such as a character that must sign in again or a server connection that dropped.
Fits
- Browse: the tabs are your Local library and one per coupled server. Search by fit, hull, class, tag or uploader and sort the cards.
- Import: from ESI, an EFT block, a DNA string or an eveship.fit link. When the clipboard watch is on, a copied fit is offered for import automatically.
- Detail: open a card for the radial view. Pick the character whose skills and implants apply and an environment; capacitor, offence, defence, targeting, drones and the required skills update live. An untrained skill gives no bonus.
- Export: as EFT, DNA or an eveship.fit link, or push it to ESI.
Fleet
- Lists: fleets are grouped as ACTIVE, STANDING BY and FINISHED, local and per server. A line tells you when a character is not connected to a server and its fleets are therefore not shown.
- Create and start: pick a composition, set a name and a schedule, then START. Stopping returns a fleet to standing by; concluding finishes it.
- Roster: members by wing and squad, each with a fit from the composition. Share a fleet by invite or make it public; join requests are accepted from the roster.
- In-game link: couple the fleet to your live EVE fleet to push structure, invite, move and kick. This needs the fleet scopes.
- AUTO-JOIN: the chip beside a fleet name cycles between default, always and never, deciding whether your runs join that fleet's runs on their own.
- Edits are live: renaming, rescheduling or changing the visibility of a fleet reaches every connected pilot who may see it, provided the server is up to date.
Fleet metrics
Press METRICS on a started fleet. You get a summary (members, the fleet commander, totals), a member list in a compact or a detailed density, and a map card that follows the fleet. In the compact list, click a member and the map flies to them. Live figures come from each member's own game log: DPS in and out, application (how well shots land), repairs, mining and bounty. The overlay button pops the figures out into a small window for a second screen. Members only appear on the map when they share their location, and pilots known to be logged out are left off.
Compositions
- Open COMP and choose New composition; give it a name and an optional description.
- Add role groups such as dps, logi and transport, each with a group minimum of pilots.
- Per group, + ADD FIT from your library or a server and set the minimum needed per fit.
- SAVE. The footer counts roles, fits and the minimum pilots; DETAIL opens a fit read-only.
Compositions live in your local library or are shared through a server. The list updates live, including changes other pilots make; if you are editing while someone else changes it, the editor offers RELOAD instead of overwriting you.
Map
- Move: wheel, double-click or the buttons to zoom, drag to pan. Regions show first, then constellations, then systems with their security.
- Route: type a start and a destination (SWAP flips them), choose SHORTEST, SAFER or LESS SECURE, optionally avoid lowsec or nullsec, and press PLAN ROUTE. The jump list shows how much runs through high, low and null; click a jump to fly there. Routes are computed locally, so they work offline.
- Find: FIND SYSTEM jumps to a system; click any system to route from or to it. Hover for its constellation, region, faction, jumps from you, and the stargates out.
- Follow: FOLLOW → CHARACTER recentres on every jump and can draw a trail of the last 5 to 50 jumps or a time window. FOLLOW → FLEET keeps every member of an active fleet in view and marks the commander. Moving the map pauses following until you press RESUME.
- Pop out: POP OUT puts the same map in its own window. The side panel can be folded away.
Jove systems and Pochven have no gate route in, and the map says so.
Runs
A run is one thing you flew: a combat, data or relic site, a mission, a mining op, an abyssal or a homefront. The app starts and stops them from your game log; you save the ones you want to keep.
- Running band: shows who is running what right now, with OPEN to see the live window and SAVE (also Ctrl+Shift+S) to keep it. DISCARD throws it away.
- Calendar and strip: twelve weeks of days coloured by ISK, with losses in red. Click a day to see it; step with the arrows.
- Filters: the TYPES and CHARACTERS tiles are checkboxes with counts. Totals count your own earnings, not the whole fleet's.
- SUMMARY: adds up the day, week or month — ISK by source (bounty, loot, homefront payout, mission rewards), by type and by character, and the top runs.
- Run detail: enemies, loot, bounty, consumables and the fleet. Loot and consumables can be rewritten by hand per character, and a linked loss shows up as a block of its own.
- Local and server tabs: a run stays on your PC until you publish it; PUBLISH sends a day or the current list to a server, and fleet mates' runs in the same activity show up there.
Homefront
While you are in a fleet, the app watches the game log for the enemies and structures that belong to one particular homefront site and asks Start Homefront run: <site>?. Press Start and the run opens on that site with your characters in the fleet already along; Ignore stays ignored for that site. A homefront run tracks attendance per pilot, the outcome and the payout, and unfolds in the runs list into one line per pilot with their own ISK and time. Sites the app cannot recognise yet can be started from the probe scanner copy or by hand. Turn the offer off under Settings with Offer homefront runs from enemies seen.
Killmails
- Opens on all characters; a dropdown narrows it to one. Filter to All, Kills, Losses or Not linked to a run, or search by ship, pilot or system. Totals show kills, losses, ISK destroyed, ISK lost and efficiency.
- A character that has not shared its killmails shows GRANT ACCESS instead of an empty list. New kills and losses of the last 90 days are picked up every five minutes and kept on your PC.
- Detail: double-click a row for the victim, the fit split into destroyed and dropped, every attacker and the value. OPEN FIT shows the fit as flown, read-only.
- Linking: a loss is linked to the one run that fits it; OPEN RUN, LINK TO OTHER RUN and UNLINK are on the detail. PASTE LINK imports an ESI or in-game killmail link at once.
Game logs
LOGS → Game logs lists the log lines of all characters, oldest first with the newest at the bottom, and follows along while EVE runs. It opens on today. Use the character dropdown, the type chips, the search box and the period (today, last 7 days, or a day you pick). Times are EVE time. The log files are only ever read. The game log folder is set under Settings → General.
Logs, inbox & ESI metrics
- Inbox: messages from your servers. The unread count shows on the LOGS item and in the menu.
- ESI metrics: how many calls the client makes, what is cached and where rate limits bite.
- Client logs: the app's own log, the first place to look when something misbehaves.
Tools
- EVE Settings Sync: choose a source character or account and copy its window layout, overview and account settings to your other characters. A backup is taken first.
- Appraisal: paste a hangar, wreck or can and see what it is worth from the market prices the client already keeps; copy the total.
- Start Run: start a run by hand — pick a character, an activity and a site, or type one in after the fact. Missions start with autocomplete on the name and rewards.
Settings & About
| Category | What is in it |
|---|---|
| General | The game log folder, and Show Data Folder to open %LOCALAPPDATA%\EveTogetherData. |
| Interface | Faction theme, toast notifications, week start (Monday or Sunday), fleet runs auto-open, fit images, fleet metrics sharing and the clipboard watch. |
| Integrations | The local API server and its port, the widget manager and Include my location. |
| Updates | Check for updates on startup, the Stable / Nightly channel and the version of this install. |
| Keyboard shortcuts | The in-app shortcuts and the global shortcut that saves a run while EVE has focus (Windows). |
ABOUT shows the version and the CCP attribution.
The server control panel
The server serves a Blazor panel next to its gRPC endpoint. Dashboard counts characters, fleets, compositions, shared fits, run groups and sessions and lists what needs attention. Data has a list per kind, with the record and everything it touches on the right. The Allowed list controls which characters may pair; Users and Roles control who may sign in to the panel and what they may do; API keys, ESI metrics and Logs round it off. Backup writes one AES-256 encrypted ZIP with the database, the key that decrypts stored tokens and the TLS certificate, so a restore on a fresh install brings every linked character back.
Architecture
EVE Together is three pieces over one shared foundation:
EveUtils.Client— Avalonia desktop app (C#/MVVM, .NET 10), local SQLite, its own ESI connector with a file cache, a read-only SDE store and a gRPC client. Runs autonomously.EveUtils.Server— optional, self-hosted via Docker. Minimal API + Blazor admin panel + gRPC + SignalR on a single Kestrel TLS endpoint (HTTP/1.1 and HTTP/2 side by side via ALPN), against SQLite, MySQL, SQL Server or PostgreSQL.EveUtils.Shared— entities, the EF contexts, CQRS infrastructure, identity/messaging/logging, the gRPC protos, and all vertical-slice modules.
The technical foundation: CQRS with its own dispatcher (no MediatR), modules over DDD, gRPC (call +
bidirectional streaming), a two-level event bus (in-process plus a gRPC stream),
IDbContextFactory with a short-lived context per operation, and a code-derived permission
gate. Crucially, the identity and permission seams shipped from day one — so adding "together" is
additive, not a rewrite.
Each feature is a self-contained folder under EveUtils.Shared/Modules/ with its own
entities, DTOs, repositories, queries, commands and permission codes. Entities never leave their
module; the DTOs are the contract. The modules today:
| Module | What it does |
|---|---|
Esi | EVE SSO/OAuth (PKCE, JWT validation), per-character encrypted token store, rate-limit monitor, scope registry. |
Fittings · Dogma | Local and server-shared fits, ESI import/push, and the stat engine — DPS, EHP, capacitor, resource usage. |
Fleet | Fleets, compositions/doctrines, the roster, and ESI fleet-coupling. |
Runs | Runs, their loot, bounty and consumables, the run-type catalogue and the day, week and month summaries. |
Killmails | Your kills and losses from ESI, name caches and the link between a loss and a run. |
Map · Location | The New Eden map and routing from the static data, and where your characters are. |
Gamelog | Live game-log tailing, combat parsing and DPS aggregation, in several client languages. |
Sde | Static Data Export import + lookups. |
Skills · Implants · Market | Character skills and training queue, implants, and item price lookups. |
Messaging | The inbox and the server→client message queue. |
Permissions | The code-derived permission registry and its toggles. |
ServerAuth · AdminAuth · ApiKeys | Pairing state and issued sessions; control-panel users, roles and API keys. |
Backup · Settings · Sync · Ships | Encrypted backup and restore, client preferences, server-side sync logs, and the canonical reference module. |
docs/architecture.md.Auth & security
Authentication is per character, with two flows you toggle individually:
- Local — the client runs the EVE SSO PKCE flow itself over a loopback redirect; the token lives on your machine.
- Synced — the character is paired to your server (pairing id + secret + state); the server holds the token. The token lives where the character belongs.
- Refresh tokens are encrypted at rest.
- Scope-gating: a feature only works if you've granted the matching ESI scope — otherwise it's disabled with a clear message, never failing silently.
- Scopes you can grant: location and ship type (where you are and what you fly), fleets (read and write, for the in-game link), fittings (read and write), skills and skill queue, implants, and killmails. Nothing else is requested.
- The client is untrusted. The server derives identity only from the EVE-signed JWT it fetches itself, and the permission gate is enforced server-side on the event bus — a modified open-source client cannot talk its way past it. The client-side check is deliberately cosmetic.
- TLS: the server generates a self-signed certificate on first start and the client pins its fingerprint at pairing (trust-on-first-use). The EVE SSO callback is browser-based, so a public deployment runs behind a reverse proxy (Caddy, nginx, Traefik…) that terminates TLS with a real certificate.
- Who may pair is an allowed-list, enforced by default — seed the characters up front or add them in the control panel, or switch the server to public mode if anyone who completes the EVE auth flow may join.
ESI & data
EVE Together aims to be a polite ESI citizen:
- Honour
Expirescaching headers; sensible fallbacks; cache immutable data effectively forever, with jitter. - Conservative retries, rate-limits respected (per-character and per-IP).
- A pinned
X-Compatibility-Dateand a descriptive User-Agent with contact info.
Data minimisation is a hard rule — the app persists as little as possible and prefers an ephemeral cache over a data warehouse.
The SDE store
EVE's Static Data Export (the game's reference data) is built locally into a dedicated, read-only, memory-mapped SQLite store from the official JSONL. It's separate from your live database, rebuilt with an atomic swap when CCP publishes updates.
latest.jsonl → build → sde.sqlite (read-only) → atomic swap
The local API
The client can expose an opt-in HTTP server on loopback, so an overlay, a stream widget or your own dashboard can read what the app knows — without any of it leaving the machine. Turn it on (and pick the port) in Settings; it is off until you do.
| Endpoint | Returns |
|---|---|
GET /api/v1/health | App and API version — the liveness check. |
GET /api/v1/characters | Your characters, with presence and live metrics. |
GET /api/v1/metrics | The live combat metrics feed. |
GET /api/v1/fits · /fits/{id} | The fit library; a single fit, optionally with computed stats. |
GET /api/v1/fleets · /fleet | Your fleets, and the one you're currently flying. |
GET /api/v1/compositions · /compositions/{id} | Doctrine compositions. |
GET /api/v1/types/{id} | Name/icon resolver for any EVE type. |
GET /api/v1/runs/current | The run you are flying: type, site, abyssal tier and weather, the clock's start, bounty, loot, total ISK so far and the crew. |
GET /api/v1/runs/summary | Run totals for the session, today, this week or this month, for all runs or one kind — the same figures as Home and the runs overview. |
GET /api/v1/killmails/latest | Your newest kills and losses, with the names of victim and corporation. |
GET · POST · PUT · DELETE /api/v1/widgets | The built-in widgets and your saved ones, with the address to load in OBS. The only endpoints that write, and they only touch your saved widgets. |
WS /ws · SignalR /hub/fleet | The same data pushed live, over a WebSocket or a SignalR hub, including run.changed, runs.summary, killmail.added and widget.config. |
The app also serves its own reference at /docs and a ready-made overlay page at
/widget, so you can point OBS at a browser source and be done. The interactive reference of the
version you run is at /scalar.
Widgets and OBS
The widget manager (Settings → Integrations → Open widget manager…, or the Local API line on Home) lists eight built-in widgets with a live preview: Live DPS, DPS graph, Current run, Run totals, Abyssal totals, Last killmail, Kill alert and Fleet DPS. Customize one to choose its characters, fields, theme (together, minimal or ticker), accent colour, background, size and options; saving makes your own copy under My widgets, and a change you save shows up in OBS by itself. The built-in widgets never change.
Each widget has its own address, http://127.0.0.1:<port>/w/<id>: a transparent page, pinned top-left, with no
status line and no error on stream.
- In OBS, under Sources, click + and pick Browser.
- Paste the widget's URL (Copy URL in the manager).
- Set Width and Height to the size the manager shows; leave Custom CSS alone.
- Click OK and drag the widget into place.
?key=…), because OBS cannot send
headers. Keep that address off stream. While OPSEC mode is on, your location is left out of the API and the widgets.Versioning
The version is in the path (/api/v1) and GET /api/v1/health reports it. Within v1 the API only grows:
new endpoints, fields, events and widgets can appear, while existing fields keep their name, type and meaning. Ignore
what you do not know and treat later additions as optional. There is no /api/v2 planned for the location change below.
Breaking change: Include my location
The Local API used to send where you are to every widget and tool, even with location sharing off. It is now
off by default. location in metrics is null, fleet.metrics sends no
Location samples (not for your fleet mates either), and the signature, system and solar-system fields of runs and
killmails stay empty. To get it back, turn on Include my location under Settings → Integrations; OPSEC mode
overrides it and leaves the location out again while it is on. If your own overlay or tool reads location,
treat it as nullable and switch the setting on.
FAQ
Do you store my data on a server?
No. There is no EVE Together cloud. The client is fully local; any server is one you (or your group) host.
Is it affiliated with CCP?
No. It's a third-party tool that uses CCP's official ESI API, and is not endorsed by or affiliated with CCP hf.
Does it copy EVE Workbench or zKillboard?
No code is copied. EVE Workbench is used only as a visual/behavioural reference; the implementation is entirely our own.
What does it cost?
Nothing. It's free and open source under the GNU AGPL v3.0. The network clause means anyone who offers a modified server over a network has to share their modified source.
Which game log languages work?
English, German, Russian, French, Spanish, Japanese and Chinese clients. A game log in any other language shows "Game log language not supported yet" instead of quietly doing nothing.
Does it need a server?
No. Fits, runs, killmails, the map and live metrics all work with just the client. A server adds shared fits and compositions, server fleets and fleet-wide metrics.
Where do I report a problem?
On GitHub or in the Discord. The Client logs under LOGS are what we will ask for first.
Contributing
EVE Together is open source as a trust requirement — so anyone can verify exactly what is stored and what is sent over the wire. The source lives at github.com/EveTogether/EveTogether.
- Questions or ideas? Join the Discord.
- Bug or feature request? Open an issue — the templates show what's needed to act on it. A good bug report needs no code and is genuinely useful.
- Pull request? Read
CONTRIBUTING.mdandAGENTS.mdfirst — PRs are judged against the conventions inAGENTS.md, and out-of-scope ones are closed without a line-by-line review. It's a small team with a high bar. - Security issue? Don't open a public issue — follow
SECURITY.mdto report it privately.
Material related to EVE-Online is used with limited permission of CCP Games hf by using official Toolkit. No official affiliation or endorsement by CCP Games hf is stated or implied. © 2026 RaymondKrah & Jithran — licensed under the GNU AGPLv3.