Releases: kernoeve/EveConsole
Release list
EVE Console v0.9.16
EVE Console 0.9.16 speaks eight languages: English, Simplified Chinese, German, Spanish, French, Japanese, Korean and Russian, with items and places named as the game client names them. It adds a fitting tool built on the SDE's own dogma rules. Planetary Industry tools forecast every colony and put extractor restarts and hauling on the worklist. The Universe Map gains tabs, live hostiles and your own characters, route and jump planners, and jump bridges under the new Ansiblex zone rules. The main window splits in two and tools detach into windows of their own. EVE Console can now post to Discord channels, and the entity viewer shows zKillboard's full record. Background ESI work paces itself to stay inside ESI's limits. On Windows, your data moves out of the install folder, so Setup and uninstall can no longer delete it.
Read this before upgrading
- Upgrade every client that shares a database. Once 0.9.16 has opened a database, a 0.9.15 client stops at start with "the database is ahead of this build". From 0.9.16 on, a client left behind offers Update and restart instead of closing.
- On Windows, the first start moves your data, once. Settings, the SQLite database, backups, images, profiles and Kokoro's model go from
%LocalAppData%\EveConsoleto%LocalAppData%\EVE Console Data.- Paths in
config.jsonthat pointed inside the old folder follow the data. A database you moved somewhere else yourself is left where it is. - The move is all or nothing. If a file is in use, nothing moves, that run uses the old folder, and the move is tried again at the next start.
- A note in the old folder says where the data went. Linux is unchanged.
- Paths in
- The first start re-imports the SDE in the background to fill the new tables: names in every language, item descriptions, the effect rules the fitting tool needs and the planetary schematics. There is nothing to do.
- The interface language follows the computer's language. A German Windows starts in German, and so on. To choose another, go to Settings → Other → Language.
- Settings save as you change them. The Save buttons are gone. Database keeps its Save and Restart.
- Older settings are carried over:
- An intel alarm watching "within N jumps of" one system is rewritten to a list of systems.
- Kill mail retention splits into two rules. Anyone who had the old purge on gets both rules, with the old window.
Eight languages
- Every screen is translated: 7,000 strings, translated against glossaries of the game client's own terms. Every view was rendered in every language to check that nothing is cut short.
- Items, stations and everything else from the game carry the client's own name in your language. Searches match those names and the English ones.
- Numbers and dates are read and written your language's way.
- Posts to Slack and Discord use the interface language. Each store has its own language for its EVE mail and web store. The mail store understands orders written in any client language.
- Code, logs, the AI agent's own context and tool formats (EFT, multibuy) stay English.
Fitting tool and the main window
- Fitting tool: one fit per tab. Search for a hull, paste or copy EFT, and drag modules from a market-group tree onto slots.
- Fits come from EVE Console or from your characters' in-game fittings. Existing ships opens any assembled ship you or your corporations own, with hull, fit and total values.
- It covers capacitor simulation, DPS, tank and repair, the Reactive Armor Hardener, tactical destroyer modes, T3 subsystems and fleet boosts from any number of boosting fits. It also handles remote repair, electronic warfare, lock times, mining yield, fighters, and doomsdays and other strikes.
- Checked against an outside benchmark over every published module, drone, implant and hull.
- Main window: two sides, with tabs dragged between them. Tools can be dragged out into windows of their own, with their own tab strips. Navigation sections fold away, and the panel hides.
Planetary Industry
- Industry → Planetary Industry lists every colony of the characters with PI turned on. Each row shows the planet with its icon, type, system and region, wormholes included. It also shows exact extractor end times, when storage fills and when inputs run out, a status, profit per day and efficiency.
- Each colony is simulated forward from its last ESI update and shows:
- each extractor's timeline;
- factories running or idle;
- storage and launchpads, with when each fills;
- flows, money per day after customs and skyhook tax, and imports and exports;
- what the period could make against what it will, with the shortfall split into destroyed output and idle factories.
- Tax has a default rate. Each planet then takes its own rate from the wallet's planetary tax entries, since null-sec alliances tax planet types differently.
- Alerts, an alarm and worklist tasks: extractors stopped or stopping, storage filling, inputs running out, unused colony slots and stale data. The worklist adds restarting extractors, hauling output off, bringing input, setting up colonies and upgrading command centers.
- Each character has a PI checkbox on Settings → Characters, on by default. Tax defaults are on Settings → Industry.
Universe Map and intel
- Tabs: several maps and system pages, side by side. Search covers systems, constellations and regions.
- Live marks: hostiles from intel and killmails, and your online characters, with portraits, ships and logos on hover.
- Planners: the route planner and jump planner are map tabs now. Thera and Turnur connections come from EVE-Scout, and there is an avoid list. A route can be set as an online character's destination. A jump range tab shows where a ship can reach.
- Jump bridges: Ansiblexes are read from your corporations' structures or added by hand. They follow the rules since 2026-09-22: who may jump, and the capacitor cost by zone.
- Overlays: sovereignty standings and zones, sovereignty campaigns, faction warfare front lines, incursions and storms. Sovereignty now comes from ESI's
/sovereignty/systems, which replaced the routes ESI retired. - Intel parser, rewritten:
- Short system names are matched through the regions each channel reports on.
- Counts, ships, gates and flags (spike, camp, bubbles, cyno, hotdrop and more) are read from reports.
- Blues are left out. Alliance contacts are now read, so coalition blues no longer show as hostile.
- Intel alarm:
- It can watch around your undocked characters, wherever your characters are, or a list of systems, by jumps or light years.
- Kills by hostile pilots count as sightings.
Game logs and alarms
- Game logs are read again. A file-name pattern bug had stopped them being read since 11 August. The local log folder is always read now, so the Detect buttons are gone.
- The game log rules match all eight client languages.
- A new Game log event alarm sounds when a character is decloaked, warp scrambled or attacked. You can limit it to attacks by players.
- A Ship stopping after the undock now ends the wake-up alarm. This can be switched off.
Discord
- A new Settings → Discord tab holds named webhooks, each with a Test button.
- Post to Discord sits beside Post to Slack on the Corp Top 10, the monthly summary and Sale Posting. Discord webhooks are also destinations for scheduled tasks, charts included.
- Posts never ping anyone. Long text is split to fit, and webhook links never appear in logs or on screen.
zKillboard and kill mails
- Entity viewer: Kills / Losses come from zKillboard, 200 at a time, back to its 20,000 limit. The header shows zKillboard's stats panel for all time, 90 days or 7 days.
- The R2Z2 firehose keeps under R2Z2's rate limit, and stops asking while it is refused. Two copies on one machine had been refused for five hours.
- Kill mail retention has two rules. One covers kills involving your characters and corporations, 365 days by default. The other covers everyone else's, 7 days by default.
- Kill mail rows no longer overlap at high UI scale (#124).
ESI
- ESI limits is a new tab under Background Processes. It shows the error budget, every rate-limit group with its lowest bucket and whose it is, and errors by route.
- Background work is spaced out, then queued, then held as the error budget runs low. The header shows ESI slowed while that happens.
- Public contract items are read open contracts first, about 3.6× faster. A contract that closed before its items were read is settled without a call. This brings back blueprint-copy prices, so build costs for BPC-only items (navy dreadnoughts, CONCORD modules and the like) no longer fall back to market prices.
- Corporation fittings are no longer requested. ESI has no endpoint for them.
Industry, trade and the worklist
- T2 blueprint inventory levels now raise copy and invention jobs, sized from the best scientist's odds and the chosen decryptor. Copy jobs use the original at the park's copy lab.
- Asset safety tasks: one per owner and deadline.
- Tasks with no item now have icons. The + on a row opens again after a filter.
- Personal deployables (mobile depots, tractor units and the like) take the equipment rig, not the structure facility.
- Trade Opportunities: 30-day sales at the destination, optional cargo, and each buy capped at the destination's sales over a window you set. Trade and Industry Opportunities both gain an item name filter.
- A merged purchase shows how its total adds up.
Order Tracker and stores
- Stock follows contracts. A contract made, deleted or accepted since the last asset poll moves the stock at once. A hull contracted to one buyer no longer reads "ready now" to the next.
- **S...
EVE Console v0.9.15
EVE Console 0.9.15 gives the agent more than one model: pick each from its service's own list, then give them roles — one to talk, one to answer data questions, one to summarise — with a router between them, a hand-off, and a fallback that says when it steps in. Its voice gets the same treatment: a named list of voices across Kokoro, OpenAI, ElevenLabs and local voice servers such as Chatterbox and Orpheus, with announced failover when one drops out, the next sentence made while one plays, and the same volume from every one of them. The Order Tracker now counts contracts by the unit, so an order can go out over several contracts and one contract can carry several orders, and Corp Activity counts only members as active players and keeps every day of moon mining. Alongside that, fixes across Indy Parks, Industry Opportunities, the Item Browser, notifications and themes, and a settings file that a failed read can no longer wipe.
Read this before upgrading
- Upgrade every client that shares a database. Once 0.9.15 has opened a database, a 0.9.14 client stops at start with "the database is ahead of this build".
- The first start upgrades the database once, in about a second. The moon-mining ledger moves to a table kept by the day, fourteen duplicate indexes are dropped, and the Order Tracker gains three columns. On PostgreSQL, the Hoboleaks revision column is also widened. There is nothing to do.
- Some numbers change, and the new ones are right.
- Players Active on Corp Activity counts members only, so a corp that trades a lot will see a fraction of the figure it showed before.
- Mining totals rise once the first mining poll, within the hour, restores the last ~90 days.
- Store web sites on a light theme turn a step darker on their next site update, to match the app.
The agent and its models
- Models are chosen from each service's own list. Roles decide which model talks, which answers data questions and which summarises, with a router, a hand-off between them and an announced fallback per role. Models say when they are down, and can be checked for free.
- Summaries fit a local model's window. A local model's thinking stays out of its answer, and thinking can be switched off.
- The agent knows the tab you have open. Every tool is in its guide, which now describes the price-source Method dropdown as it is. New models are priced from LiteLLM's price list.
Voices and speech
- A named voice list with local voice servers (Chatterbox, Orpheus and anything else that speaks WAV) and announced failover between them. A local server must actually speak to count as up. Test This Voice says what happened.
- The next sentence is made while one plays, and Kokoro, local servers, OpenAI and ElevenLabs all play at the same volume. ElevenLabs voices are listed by name.
- Kokoro speaks in the released app again, and stopping it frees the voice at once. Emoji, markdown, headings, rules and tables are not read out.
Order Tracker
- A contract is matched over all its lines. Fitted rigs and other extras, and whether a hull is packaged or assembled, no longer stop a match, and a contract attached by hand is read directly.
- An order can be delivered over several contracts, and one contract can carry several orders.
- New On contract and Delivered columns show where each unit stands; only the units still to supply are planned from stock and builds.
- An order completes when every unit has been accepted, and a declined contract covering the whole order cancels it.
- Store mail and alarms report part-deliveries.
Corp Activity
- Players Active counts members only. It used to count everyone the corp's wallet and contracts named: customers, contract partners, users of its structures, NPC mission agents, other corporations. Former members still count for the months they were in. This covers Monthly Activity, the 24h header, the monthly summary, the trend chart and scheduled reports.
- Moon mining is kept by the day. The refinery ledger kept only each miner's newest day per ore, so every earlier day was lost and mining read low. Now each poll refreshes the days ESI still returns (about 90) and keeps everything older as history. Dates are the same whichever machine polls.
Elsewhere
- Settings:
- A Characters tab, holding what was Industry Characters.
- zKillboard import is on by default.
- Keys and Kokoro's model sit with the row that uses them.
- Changing the UI scale no longer cuts Settings off, and adding a model no longer blanks the role choices.
- The settings file can no longer be wiped by a read that failed. A file busy for a moment is retried, never overwritten with defaults, and the previous version is kept as
config.json.bak. - Indy Parks:
- Pick the system from a list.
- NPC stations take the fixed 0.25% tax, and a linked facility sets its own name and hull.
- Deleting the default park passes the default on, and deletes ask first.
- Other tools see park changes at once.
- Industry:
- Unassigned job categories plan at the park's catch-all facility, and jobs at NPC stations are never flagged as unrigged.
- Industry Opportunities keeps Price At, filters and sort when you leave the tab, and "BPO only" skips storyline, officer and deadspace items.
- Every link in the Industry Jobs grid works again.
- Item Browser: a new Assets tab lists every stack of the item by location or owner. A reaction product says what makes it. Produced By Reprocessing can show ore, non-ore or both.
- Overview: notifications are cards with readable types and bodies laid out per type.
- Themes: tooltips follow every theme, and the light themes come down a step.
- Small fixes: security just above 0.0 shows as 0.1 low sec, as in game. A long Slack post goes out in parts with its code blocks whole.
- Development builds:
--profile <name>runs a build against a data folder of its own, so development never touches your real database. A PostgreSQL client no longer holds the old SQLite file open.
Schema
Applied at the first start, on both engines:
TrackedOrdersgainsLinkedContracts,UnitsDeliveredandUnitsContracted.EsiCorpMiningLedgerDaysreplacesEsiCorpMiningLedger. Its rows are carried over with their dates at 00:00 UTC, and the old table is dropped.- Fourteen indexes that fresh installs built twice now have one name each, and the copies are dropped.
- On PostgreSQL,
HoboBuildInfos.Revisionbecomes bigint.
Tested on SQLite, PostgreSQL and Linux, on new installs and existing databases, including a 0.9.14 SQLite database migrated to PostgreSQL and then upgraded.
🤖 Generated with Claude Code
Installing
- Installer (recommended): download
EveConsole-win-Setup.exeand run it. It installs EVE Console and keeps it updated automatically. - Portable: download
EveConsole-win-Portable.zip, extract it anywhere, and runEveConsole.exe.
Linux
- AppImage: download the
.AppImage,chmod +xit, and run it. It keeps itself updated. - Tarball: download
EveConsole-linux-x64.tar.gz, extract it anywhere, and run./EveConsole.
Alarm sounds and speech need VLC on the system — the vlc package on most
distributions (Debian and Ubuntu also accept libvlc-dev). It is the one piece the
build cannot carry itself; everything else works without it.
No .NET install is required on either platform — the runtime is bundled.
First launch (Windows SmartScreen)
EVE Console is not code-signed yet, so Windows may show a "Windows protected your PC" warning the first time you run it. This is expected for a new indie app.
- If the warning appears, click More info, then Run anyway.
- To avoid it entirely: right-click the downloaded file -> Properties -> tick Unblock -> OK before running.
EVE Console v0.9.14
EVE Console 0.9.14 gives the agent tools of its own and two more model providers, lets every store sell through its own web site, adds an Item Valuation tool for any pasted list, and reworks the Contracts tool. Alarms gain a staged wake-up call for a ship left undocked or landed too long, a Ship Undocks check, store order events and active hours. The worklist loads in seconds over a slow link where it took minutes, Eve Mail renders as EVE wrote it with reply and forward, a Background Processes tool with live status-bar labels replaces the polling text, the interface scales from 50% to 200%, and ESI stands down for Tranquility's nightly downtime within seconds. Alongside that, a long run of fixes across the worklist, the order tracker, grids and the SSO.
Read this before upgrading
- Upgrade every client that shares a database. The schema changes are additive, but a client on an older build now stops at start with "the database is ahead of this build" rather than running against columns it does not know. An old headless unit left running on another machine will do the same.
- Imports may start on their own. If the startup schema pass adds SDE or Hoboleaks columns to an existing database, the matching import starts in the background on the first launch, with no dialog, because a column the pass adds is empty until an import fills it. Nothing to do; it is noted here so the activity is not a surprise.
- Tokens the SSO refuses are retired, not retried. After a long absence the refresh tokens are dead; the first start says so once per character or corporation in the error log, Settings → ESI Tokens shows them in red as "Token Expired — re-authorise", and the status bar counts them beside ESI Calls until they are re-authorised. Polling for those owners stops until then.
The agent
The agent can now act as well as answer. esi_call asks ESI for what the database does not hold, several paths per call, with per-route rate limits and answers kept until ESI's expiry; show_query, show_table and show_document put its output in a tab of its own; set_destination is the first in-game action; manage_alarms creates and edits alarms; a personalisation tool keeps the capsuleer's name and standing instructions. It discovers the database schema instead of being told a quarter of it, with notes on what the schema cannot say and a drift check on its own instructions.
OpenAI and local models join Anthropic as providers, with settings shared through the database. The stable half of the prompt and the conversation history are cached rather than re-sent, with a cache lifetime of an hour by default, and an AI Usage & Cost tool prices every turn, speech included. It speaks as the answer arrives and says EVE words the way capsuleers do; the Whisper model loads once; the agent, text-to-speech and transcription run off the UI thread, so the window no longer freezes while a tool call is written. The panel is resizable, timestamps its messages, says what each reply called, and summarises before a local model's window fills.
Alarms
- Wake-up call. A staged alarm for a ship left undocked, or landed by jump drive or bridge, for too long: three stages with actions under each, a sound window with its own stop button, a TTS-direct action that bypasses the model, acknowledgement by any reply to the agent, and a snooze per episode. It addresses the person and names the character. A jump arrival's episode ends at the first dock.
- Ship Undocks. Fires when a character undocks, with optional location and ship lists, and fit, fuel and ammunition as either-way choices; judged against the ship that undocked, so a later change of ship cannot re-judge an old undock. Evaluated the moment the location poll sees the undock.
- Store order events: new orders with store, buyer, item and price, orders contracted, accepted or cancelled, and orders newly fillable from stock; each kind switchable.
- Active hours on every alarm. Intel alarms say the facts in order, once per sighting, at once. The seen-key ledger keeps one row per key, a voice-only stage goes out, and reopening an alarm no longer doubles its actions.
Contracts
A Scope filter in place of Owner — all owners; all characters and personal corporations, the default; each character, each corporation, then the alliances present — where a contract is in scope when the From side, the assignee or the acceptor is the chosen party. A Status filter opening on Active. A From column for whose contract it is, the corporation when issued on its behalf, and an Expires column. The detail pane splits the items into offered and requested, each row with its picture, market value and build value, each list ending in a total; a contract without items says why, and a button asks ESI for them again. Two Overview alerts, on by default under Settings → Alerts: outstanding contracts issued to you, and contracts in the last 15% of their life; either opens the tool on your active contracts, soonest to expire first.
The item sweep no longer skips corporation contracts issued by another corporation. That rule dated from July and the data contradicted it: the corporation endpoint had served items for dozens of them, while some six hundred sat unasked and read as empty, among them contracts assigned to and accepted by the player's own corporation. Every one is asked once now, and ESI's answer is kept on the row.
Web store
A store can sell through a web site as well as by EVE mail. The site is a Cloudflare Worker with its own database, one per store, which the app deploys and updates itself through the Cloudflare API and keeps current with a signed push of the price list and order book each cycle; buyers sign in with EVE SSO, order and cancel, see their history across every channel, and get the store's own theme, blurb and banner. The app books web orders under the same checks as mailed ones, holds the rest for review on the Overview, carries a channel per order in the Order Tracker, and enforces a per-buyer purchase limit on every channel. A store with no orders no longer loops on a full resend, which was how a day's write allowance went on nothing.
Item Valuation
Paste any list the client copies — a hangar, a cargo hold, a contract, a fit, a multibuy — and see what it is worth at any station with orders in the app's books: at market, built, and reprocessed, side by side, each with its standing against the best; then the same list priced at other stations to compare. Sell, Buy or Split prices with a percentage for buyback terms, headings over each group of columns with its total and how many of the items were priced, and the list folds away once valued. The price type Midpoint is called Split wherever a person sees it.
Eve Mail and the worklist
The worklist took five to ten minutes to load over a remote link: thousands of small queries at a round trip apiece. It now runs three hundred, in about seven seconds on the same link, with every generator's output compared before and after and identical. Mail bodies are prefetched with the headers, rendered as EVE wrote them — bold, colour, links that open items, pilots, corporations, structures, systems, killmails and contracts in the app — with reply and forward, a refresh that keeps your place, and external links that confirm first. The store answers its Inbox only.
Background Processes and ESI
The monitor is a tool under Data / Logs, and the status bar's polling text gives way to five live labels — LP Store, Killmails, Contract Items, Price History, ESI Calls — each saying in a few words what that process is doing and opening the tool at its tab, live on every client whichever holds the worker lease.
The user's own calls no longer queue behind the poller: background work has a lane of its own and an interactive call always finds a slot. Any 502, 503 or 504 prompts a status check within seconds, three in a minute stand the whole app down, and paused calls are neither logged nor recorded, where the nightly downtime used to cost a few minutes of errors. A corporation 403 marks that endpoint denied for that token instead of being retried twice an hour.
Elsewhere
- UI scale from 50% to 200%, from Settings or the status bar, kept per machine; fixed-size windows and popups follow it.
- Grids: Ctrl+C copies what every column shows, in every grid; ESI Explorer exports the whole table, as filtered and sorted, to CSV.
- Order Tracker: only your own assets and jobs are supply; a job's output is shared out across the orders it covers; a contract to the order's named recipient is the order's. The Overview's Orders section shows the item's picture and drops the Status column.
- Worklist: purchases net every level against stock and running jobs — a live list went from 125.81B to 22.48B of purchases with nothing unbought; delivered output counts as stock until the polls catch up; a print the build tree asks for is netted in runs.
- Sales Tracker: profit by buyer, market group and item, each ranked by profit with a sales column and a pie beneath; every percentage is a share of the period's profit.
- Corp Activity: monthly charts two by two, with Players Active, and mining as reprocessed value.
- Item pictures on the Order Tracker, sale listings, the worklist sections of the Overview and the Sales Tracker, cached on disk so each is fetched once.
- Overview alert for industry jobs ready to deliver; the Activity Summary counts only contracts you issued; online characters hover shows the docked place.
- Fresh installs no longer fail with "attempt to write a readonly database"; two SQLite queries that silently ended the mail prefetch and the worklist's market stamp are fixed; the Linux release job merges its upload into the release instead of failing to create it.
Schema
Additive only, both engines, with defaults: agent telemetry...
EVE Console v0.9.13
EVE Console now runs natively on Linux and Linux builds will be included alongside the Windows builds with each release. We have also included support for PostgreSQL as the datastore instead of an SQLite file. For PostgreSQL setups, multiple clients can connect to the same database, and all background tasks can be run in a background process independent of the frontend client, allowing those processes to continue to run after the application closes. Alongside that it gains a themeable interface with six initial themes, and a long run of fixes across the worklist, SDE import, and the market and wallet tools.
Read this before upgrading
- Run Update SDE once after upgrading. This release reads fields from the static data export that earlier versions ignored, and the columns holding them arrive empty. Until an import fills them, ship haul volumes stay based on the assembled size rather than the packaged one — 115,000 m³ for a Vexor instead of 10,000 — and the new NPC corporation details show blank. The SDE tab will say you are up to date, because CCP's build number has not changed; run it anyway.
- PostgreSQL is opt-in. Nothing moves on its own. Existing installations keep opening the same SQLite file they always have, and Settings offers to test a server and copy the data across when you want it.
PostgreSQL
The app can now keep its data on a PostgreSQL server rather than a local file, which is what makes several clients on several machines share one set of data. Settings picks the engine, tests the connection, and copies an existing database across with progress and a confirmation before anything is overwritten; the password is stored outside config.json. Backups and restores run through pg_dump, and the storage breakdown works on both engines.
Most of the work was in the SQL rather than the plumbing. SQLite had been forgiving of about sixty things PostgreSQL is not: LIKE is case-sensitive there, booleans are not integers, COUNT returns bigint, dates are not strings to be fed to substr, UNION branches must agree on a type, and a join condition is not evaluated left to right. The one worth calling out is REAL, which is 32-bit on PostgreSQL and had been silently truncating ISK figures. The server is now asked to typecheck the SQL the app emits, which found two more.
Linux
Ships as a Velopack AppImage that keeps itself updated, or a plain tarball to extract and run. The only dependency the build cannot carry is the system vlc package, needed for alarm sounds and speech; everything else, including the .NET runtime, is bundled. Fonts, audio failure reporting, process detachment, SIGTERM handling and the AppImage's own icon and paths are all handled per platform.
Background processing
The polling, importing and alarm work can now run without a client window. One client among many takes a lease and does the work, and the others show what it is doing; on PostgreSQL that lease is what stops two machines duplicating it. It can also run with no UI at all — --headless, as a systemd user unit on Linux or a Windows service — with a --tray notification-area icon for the user's own session. The worker pushes call logs, polling status and alarms out to the clients, each of which can mute independently.
Themes
The interface is themed through a palette rather than colour literals — 4,335 of them became lookups — with six tinted themes in light and dark, a picker on the title bar, and charts, maps, the jump planner and the ship fitting canvas all following a change live.
Industry and the worklist
A blueprint that makes itself is no longer treated as a recipe, jobs already started no longer have their materials offered again, a job's materials are rounded once on the job rather than on every run, and a blueprint copy with no market price falls back to the last one seen rather than dropping to zero.
The worklist grid could not be scrolled upward without sticking and jumping. The cause was in Avalonia's own scroll arithmetic — it derives a row-height estimate from the details estimate, so no single value is ever right — and it is fixed structurally: expanded detail now floats in a popup and row details are gone from the tool. Separately: blueprint copies count in runs rather than items, a T2 blueprint is invented rather than bought, a running job counts as stock arriving, and a haul or buy lists every job waiting on it rather than only the ones it releases.
The SDE and Hoboleaks imports
Both are now undoable as a unit, and how differs by engine deliberately: PostgreSQL wraps the wipe and refill in one transaction, while SQLite copies the tables aside first, because a transaction held for the length of an import holds SQLite's single write lock the whole time and blocks every other writer in the app. Row counts are compared before and after, and a table that held rows and now holds none rolls the import back — a fault that had previously left ten tables empty, reprocessing among them, with nothing reporting it.
The SDE import also reads fields it had been downloading and discarding, including the packaged volume above. Hoboleaks gains an update check: it publishes a manifest the app was not reading, so Settings can now say whether there is anything new rather than only when you last imported.
Elsewhere
Orders find any pilot or corporation and rank the best match first, and are routed by whoever placed them rather than by whose wallet holds them. Corp Activity gains filters and monthly charts. The wallet shows the reason on an entry instead of reading it and throwing it away. ESI cache expiry is honoured as sent rather than guessed at, with a limit on how far a single implausible header can defer a poll. The title bar says which build this is, which SDE is loaded, which database is open and which client is doing the background work. A database that will not open now offers recovery instead of hanging on the splash screen. NPC entities gain the headquarters, ticker, description and tax rate; numeric columns across several grids are right-justified and sort as numbers.
Failures that used to be silent now say what happened, on screen and in the log.
Installing
- Installer (recommended): download
EveConsole-win-Setup.exeand run it. It installs EVE Console and keeps it updated automatically. - Portable: download
EveConsole-win-Portable.zip, extract it anywhere, and runEveConsole.exe.
Linux
- AppImage: download the
.AppImage,chmod +xit, and run it. It keeps itself updated. - Tarball: download
EveConsole-linux-x64.tar.gz, extract it anywhere, and run./EveConsole.
Alarm sounds and speech need VLC on the system — the vlc package on most
distributions (Debian and Ubuntu also accept libvlc-dev). It is the one piece the
build cannot carry itself; everything else works without it.
No .NET install is required on either platform — the runtime is bundled.
First launch (Windows SmartScreen)
EVE Console is not code-signed yet, so Windows may show a "Windows protected your PC" warning the first time you run it. This is expected for a new indie app.
- If the warning appears, click More info, then Run anyway.
- To avoid it entirely: right-click the downloaded file -> Properties -> tick Unblock -> OK before running.
EVE Console v0.9.12
A feature release. Two new tools, a store that takes orders over EVE mail, and a long run of accuracy work on what the industry planner tells you to build.
Read this before upgrading
- Slack connections must be reconnected. Uploading a chart needs the
files:writescope, which tokens issued before this release do not carry. Settings → Slack → Disconnect, then Connect to Slack. - Build costs move. Structure and XL rigs were matched against the wrong rules, and titans, supercarriers, the Keepstar and the Fortizar are now costed from a bought ME9 BPC instead of a BPO nobody owns. Recalculate before trusting a figure you had before.
- The worklist's output moves. Job counts, purchase amounts and the order of the list all change.
- The Order Tracker's stock tick moves. Partial stock is now reserved by whichever order claims it first, so an order that used to show the tick may lose it to one ranked above it.
- The Scheduler and Alarms both say on screen that they are still taking shape. Their stored settings may change between releases.
EVE Mail Store
A store character's inbox is polled and answered. Buyers put a command in the mail subject — PRICES, ORDER, STATUS, CANCEL, INFO, HELP — and the app replies, books the order into Order Tracker, and mails the buyer as it progresses. The new Stores screen sits under Market / Trade, with Overview, Config, Info and Usage tabs.
Orders are priced from the sale posting at the moment they are placed, never from anything in the mail. Items are read from dragged showinfo: links first and typed names second. Contracts default to the sender when nobody else is named, so every order has a recipient. Replies split across several mails when they outgrow EVE's limit.
This is the app's only untrusted input, so the mail path was reviewed before it shipped: every database access reachable from a mail goes through EF Core LINQ rather than raw SQL, ownership is checked on CANCEL and STATUS against the ESI mail header rather than anything the sender writes, quantities are bounded, and a mail with no identifiable sender is refused rather than served.
Scheduler
A new tool behind the clock icon in the title bar. Tasks fire on an interval, on days of the week, monthly or yearly — all in EVE time — and either post to Slack or raise the same alert an alarm raises.
A post is composed from sections: Text, Corp Top 10, Corp Monthly Summary, Sale Posting, Standing Projects, Corp ISK Trends Chart and Corp Activity Trends Chart. Each carries its own parameters, because a task firing at 00:01 has no screen to read them from.
The two chart sections are drawn to PNG and uploaded. Channels only — an incoming webhook cannot carry a file, so those sections are skipped and the run reports how many rather than claiming success.
Reports that used to live inside the screens that drew them are now single definitions read by both the screen and the scheduler, so a scheduled post cannot drift from what the tab shows. The Corp Top 10 settings tab is now Corp Top 10 / Summary, and every heading it produces — Top 10 and monthly summary alike — can be overridden, with a prefix for the summary's first line. Top 10 headings carry the month they cover, since in Slack each list is its own box and a date line above them travels with none of them.
Worklist: Bottlenecks and Final Products
Bottlenecks answers one question per tab — Slots, Item Contention, BPO / Formula, Hauling — with a Summary that ranks the actions themselves by the work each is holding up: "raise level 200 to 570", "buy 1 of 4 owned (+25% output)". Every "how much does this hold up" figure walks blocked tasks rather than the recipe tree, which is what stopped an earlier version reporting a Leviathan as downstream of an item whether or not anyone was building one.
Final Products is the record of what the work produced: every job, finished or running, whose output is something the operation sells. Value is taken as of the day the job completed, and can be read as market value or as a fixed percentage over build cost — a shop selling at a set margin never sees the market price. Profit reads as potential profit throughout, since nothing on the tab has been sold.
What the planner builds
Months of reading real rows, and the rules that came out of it:
- The shelf is filled last. Stock goes to the orders and jobs that consume an item first; only what survives is on the shelf.
- An order and the shelf cannot spend the same hull. Stock was subtracted twice, once against the order and once against the shelf level, so partly-stocked orders were under-built — fifty Apocalypses against nineteen on hand asked for twelve rather than thirty-one.
- A job waiting on a slot now reserves its materials. They were reserved only when a job could start, so with every slot full the planner handed the same Tritanium out four times and proposed four identical jobs.
- Inherited urgency expires. An order's priority no longer carries into shelf-filling once the order's own units are fed, and an order already covered by stock or a running job confers nothing.
- A missing blueprint is a blocked reason, not a different kind of row, so work still splits into real jobs sized by what a print can carry.
- A Build rule on something nothing can make falls back to buying, merged purchases no longer credit shared stock once per contributor, and Inventory Levels no longer counts a corp buy order twice.
Outbid buy orders were reachable by a raise-bid task only when a rule named both the order's exact type and its exact station — six of thirty-five qualified. Orders now count wherever they sit, substitutes count so an order for a compressed form serves the need it reduces to, and raise-bid and buy-more are independent: thirty-three of thirty-five.
Order Tracker and Sales Tracker
Order Tracker gains order numbers, a store column, a contract-recipient column, labels with colours derived from the label text, 60-second auto-refresh, and three things it could not previously say about a multi-unit order: what is on the shelf (19/50), what is being built in units rather than a job id, and how many jobs are actually needed to cover the shortfall. An order used to take the soonest job and stop, so a run of five against an order for fifty read as covered — and pinned the delivery date on that one run. The grid also stops blinking on refresh; rows are now replaced only when what the grid draws has genuinely changed.
Sales Tracker splits into Summary and Detail with the filter row above both, because the rollups were being built from the for-profit rows whatever the checkbox said — ticking "show not for profit" changed the grid underneath three summaries still describing a different set of sales. Summary gains gross costs, sales and net profit on one chart and margin on its own, both built only from sales whose cost is known, with the count of uncosted sales shown rather than left to be inferred. The default range is a year.
Overview
A new Orders section lists every outstanding order across all stores and the hand-entered ones, newest first. Like any new section it arrives disabled — enable it in ⚙ Customize Layout.
Market Sales was reading 42.16B in the Activity Summary against 321.84B in the income pie under the same name. The Activity Summary was subtracting sales marked "not for profit" — 279.72B of them. That is a profit question and this is not a profit figure; the two now agree to the ISK.
Reprocess and decompress tasks drew an empty row, and the character summary moved onto a timer.
Two things that made the app feel slow
Application hangs, roughly every six minutes. Across 685 recorded stalls, every one paired with a worklist rebuild in the same minute. Two defects compounded: the build was awaited directly from the UI thread, and EF Core on SQLite completes its async work synchronously, so every generator, query and sort ran inline on the thread drawing the window — and the collections were filled item by item, each addition re-running a handler that refilled four more panels the same way. The build now runs off the UI thread, and collections are replaced in one operation.
Writes being abandoned, not merely delayed — 138 of them, each with a wal_checkpoint(TRUNCATE) in the preceding minute. TRUNCATE takes the writer lock and then waits for every reader, so a checkpoint meeting a reader sat on the lock for thirty seconds and every other writer queued behind it and timed out. The intel backfill's checkpoints are now PASSIVE, which is all they needed: keeping the log small during a backfill, not reclaiming the file.
Corrections worth knowing about
- Reaction times were wrong twice over. Advanced Industry was being applied to reactions, which it does not affect; the Reactions skill does and was not being applied. The two errors nearly cancelled, so the number looked plausible until an untrained alt was enabled. Measured across 600+ completed jobs.
- A structure rig takes its bonus from the structure rig, not the equipment one. Category 66 holds both, and all three copies of the mapping treated them alike — which is why a Sotiyo could read as having no rigs at all, affecting both the facility check and build costing. The three copies are now one.
- Sovereignty ADM had been reading nothing for weeks. CCP retired the endpoint it used, and two nested
catchblocks turned the 404 into a message about the user's own configuration. - Every standing delivery project reported "project not active" while all 47 were live. The corp asset refresh deleted before inserting outside a transaction, so between the two statements the corp owned nothing — and the lookup then fell back to a value that matches nothing rather than reporting the gap.
- Net worth no longer plots a day while it ...
EVE Console v0.9.11
A fix release. v0.9.10 would not start on a fresh install — if you installed EVE Console for the first time and it failed to launch, this is the release you want.
The startup failure
A new database is built by Entity Framework, and one of the settings rows written immediately afterwards left out a column that has no default. On a database that had been upgraded over time the column was already there and forgiving, so it never showed up in testing — only a genuinely new install hit it. The alert settings row failed the same way, quietly, leaving new users with no alert settings at all.
Upgrading from an earlier version was unaffected, which is why this took a second machine to find.
What that was hiding
Getting past the startup crash exposed a run of faults that only a new database reaches, each of which had been sitting behind the one before it:
- A blueprint that referenced itself through its own materials ended the process outright on the first build-cost calculation.
- Authorising a corporation registered its token against the character's id instead of the corporation's.
- The killmail backfill asked ESI for too much at once and took 607 rejections in seven minutes.
- Point-in-time build costs fell back to market price without saying so.
- An empty order book threw rather than reporting nothing.
- Your own contract items queued behind eleven thousand public listings before being fetched.
- Two internal caches could be corrupted by writes from more than one thread.
- Two characters seeing the same moon at the same moment could collide while recording its name.
- A part-configured industry park crashed the Production Calculator instead of asking to be finished.
Not repeating it
New installs are now checked automatically before anything can be merged: every startup statement is replayed against a database created from nothing, and the check reports all failures rather than stopping at the first. One crash hiding another is exactly how a release that cannot start gets published.
The README's screenshots are refreshed for 0.9.10 as well.
🤖 Generated with Claude Code
Installing
- Installer (recommended): download
EveConsole-win-Setup.exeand run it. It installs EVE Console and keeps it updated automatically. - Portable: download
EveConsole-win-Portable.zip, extract it anywhere, and runEveConsole.exe.
No .NET install is required — the runtime is bundled.
First launch (Windows SmartScreen)
EVE Console is not code-signed yet, so Windows may show a "Windows protected your PC" warning the first time you run it. This is expected for a new indie app.
- If the warning appears, click More info, then Run anyway.
- To avoid it entirely: right-click the downloaded file -> Properties -> tick Unblock -> OK before running.
EVE Console v0.9.10
The biggest release so far — a month of work since v0.9.9.
New tools
Universe Map. One continuous map, from the whole cluster down to a single system, with no drill-down between. Overlays colour systems by security, kills, jumps, industry indices, sovereignty, stations, planetary output and intel sightings. Region boxes, docking-class badges, and a double-click that zooms straight to a region.
System view. Any system opens to its own page: celestials laid out as a tree, kills, industry indices with ADM graphs, agents, planetary output, and the intel sightings recorded there. Reached from the map, from a killmail, or from anywhere a system name appears.
Jump Planner. Capital route planning with draggable waypoints and movable midpoints, showing fuel and distance for every leg. Understands jump-through structures, restricts midpoints to systems you can actually use, and offers alternatives when one will not do.
Worklist. A single list of what to do next, rebuilt on every refresh, from nine independently switchable sources — industry jobs, logistics, invention and copying, material purchases, standing buy orders, inventory levels, corp projects, skill queues and asset safety. Five of its sections also appear on the Overview.
Structure Browser. Player structures pulled from ESI's public list rather than only the ones you have happened to visit — 885 listed against 141 previously known here. Links to Indy Parks so a park entry can name a real facility, with a fitting you can record by hand for structures ESI will not describe.
Standing Buy Orders. Declare the buy orders you intend to keep standing at a station or structure, and see whether they are actually there — missing, outbid, run down, or close to expiry, each reported as the different job it is.
Sale Posting. Build shareable sale postings from your stock, with build, market and contract pricing, a configurable sale price, and computed in-stock, in-build and reserved columns. Renders to Plain, Slack, Discord, Markdown, HTML or BBCode.
LP Market Values. What your loyalty points are actually worth, offer by offer, priced against the market and net of what each offer also consumes.
Alarms. Conditions you define, checked on a timer, that tell you when something has happened — and say it once rather than every time they check.
Player and NPC Entities. Every pilot, corp and alliance, with kills, losses and member counts; and agents, NPC corporations and factions from the SDE, searchable by any name.
Game Log and Chat Log viewers. Search your local EVE logs, with past history importable in bulk.
Intel from your chat logs
Intel channel logs are parsed into sightings: who was seen, where, and in what hull. Sightings appear on four map overlays and on each system's page, with pilot, corp and alliance portraits, and the original line kept alongside. Duplicate messages are recognised across characters and machines, so importing a second computer's logs does not double anything up.
Industry and market
- Build costs now price blueprint copies off actual contracts, per run and by ME, and take the cheaper of building or buying each component.
- Production Calculator reports what you are missing and turns it into a shopping list.
- Industry jobs are checked against the rigs your Indy Park says the facility has, so a job that is not getting the bonus you planned for says so.
- Indy Parks can link a park structure to a real facility, and adding a whole system's structures at once.
- Order Tracker links pending orders to the stock, industry jobs and contracts that will fill them. An accepted contract completes the order, stamps the date it was accepted, and syncs the purchase price.
- Corp Activity gains a Monthly Summary — income and expense by type, kills and losses with efficiency, mining, projects and active players, each against the previous month.
Under the hood
- Map statistics are collected hourly and thinned to daily as they age, with backfill from EVE Ref's archives for the history ESI does not serve.
- zKillboard can supplement your killmails. ESI only hands you a kill if you were the victim or got the final blow, so fleet participation is otherwise invisible. Your corps and characters only by default.
- Tranquility status sits in the header, and polling pauses on its own while the server is down.
- Character sessions — who is online, where they are, and what they are flying.
- Database tab reports the size of every table and can shrink, move or rename the database, with a backup taken first.
- Data retention rules for the error log, killmails, price history, game logs and chat, swept in the background at least daily. Intel already parsed from chat survives a chat purge.
- Slack added integration support for allowing the app direct posting abilities to a slack channel vs copy paste.
Fixes
- Market refreshes no longer block everything else. The refresh committed and immediately retook the database's write lock across its whole run, leaving no window for any other write to get in — so background polling failed with "database is locked" for as long as it lasted. Measured after the fix: no failed writes at all, against dozens per refresh before.
- Inventory Levels counted assets you cannot use. A director's token pulls a whole corporation, so a member corp's hangars were being reported as your stock — on the fuel blocks that surfaced it, 849,225 units belonging to a corp against 397,025 actually owned. Now restricted to your characters and the corporations you mark personal. Worklist shortfalls will grow accordingly; those were real shortfalls being masked.
- A shared Indy Park now brings its facilities with it. Importing a park from someone else left it linked to structures your database had never heard of, so the facility was missing from the Structure Browser and the park's rigs never reached it. The import now records the structure, asks ESI about it, and carries service modules across — which were never exported at all.
- Long jobs that aged out of ESI's window stayed stuck showing as active for ever.
- A runaway price feedback loop in build-cost gap fill.
- Killmail attacker lookups that had degraded to minutes.
- Periodic refreshes freezing the UI, including a 2–3 second stall every few seconds caused by probing an unreachable network share.
- Entity names are clickable across the tools, and the Timers tab's Force Now now actually runs the six sweeps that own their own schedules rather than silently doing nothing.
Known gaps
- The Worklist's five science settings work on correct defaults but have no UI controls yet.
- Corp contracts issued by another corporation return no item list; the cause is not established.
🤖 Generated with Claude Code
Installing
- Installer (recommended): download
EveConsole-win-Setup.exeand run it. It installs EVE Console and keeps it updated automatically. - Portable: download
EveConsole-win-Portable.zip, extract it anywhere, and runEveConsole.exe.
No .NET install is required — the runtime is bundled.
First launch (Windows SmartScreen)
EVE Console is not code-signed yet, so Windows may show a "Windows protected your PC" warning the first time you run it. This is expected for a new indie app.
- If the warning appears, click More info, then Run anyway.
- To avoid it entirely: right-click the downloaded file -> Properties -> tick Unblock -> OK before running.
EVE Console v0.9.9
The repo consolidated to a single main branch (develop merged up and deleted). Update the docs deploy config accordingly:
docs.ymlbuild-check trigger:develop→main.wrangler.jsoncnote: Cloudflare Workers Builds production branch =main.
So the Cloudflare Pages/Workers project should build from main, and merges to main publish to docs.eveconsole.com.
🤖 Generated with Claude Code
Installing
- Installer (recommended): download
EveConsole-win-Setup.exeand run it. It installs EVE Console and keeps it updated automatically. - Portable: download
EveConsole-win-Portable.zip, extract it anywhere, and runEveConsole.exe.
No .NET install is required — the runtime is bundled.
First launch (Windows SmartScreen)
EVE Console is not code-signed yet, so Windows may show a "Windows protected your PC" warning the first time you run it. This is expected for a new indie app.
- If the warning appears, click More info, then Run anyway.
- To avoid it entirely: right-click the downloaded file -> Properties -> tick Unblock -> OK before running.
EVE Console v0.9.8
Adds wrangler.jsonc so the docs site can deploy via Cloudflare Workers Builds (the dashboard only offers the Workers flow, not classic Pages, for new projects).
Assets-only Worker (no script): the build runs mkdocs build → ./site, and npx wrangler deploy serves that folder as static assets. Deploy from develop to docs.eveconsole.com.
site/ stays gitignored (generated at build time).
🤖 Generated with Claude Code
Installing
- Installer (recommended): download
EveConsole-win-Setup.exeand run it. It installs EVE Console and keeps it updated automatically. - Portable: download
EveConsole-win-Portable.zip, extract it anywhere, and runEveConsole.exe.
No .NET install is required — the runtime is bundled.
First launch (Windows SmartScreen)
EVE Console is not code-signed yet, so Windows may show a "Windows protected your PC" warning the first time you run it. This is expected for a new indie app.
- If the warning appears, click More info, then Run anyway.
- To avoid it entirely: right-click the downloaded file -> Properties -> tick Unblock -> OK before running.
EVE Console v0.9.7
First EVE Console release — brings the full rename to main and triggers the release build.
What's in it
- The complete Eve Cortex → EVE Console rename (identity, namespaces, branding, data-folder migration, auto-update source)
- The contract-sweep fatal-crash fix and everything on develop since v0.9.6
- Docs now point at
docs.eveconsole.com
Packaging
- First release under the new
packIdEveConsole →EveConsole-win-Setup.exe/EveConsole-win-Portable.zip, installs to%LocalAppData%\EveConsole - Version computes to 0.9.7 (a spurious accidental
v0.9.7from the initial repo push has been deleted)
Existing Eve Cortex users are carried across by the app's one-time data migration, and (separately) by the old repo's forthcoming farewell release.
🤖 Generated with Claude Code
Installing
- Installer (recommended): download
EveConsole-win-Setup.exeand run it. It installs EVE Console and keeps it updated automatically. - Portable: download
EveConsole-win-Portable.zip, extract it anywhere, and runEveConsole.exe.
No .NET install is required — the runtime is bundled.
First launch (Windows SmartScreen)
EVE Console is not code-signed yet, so Windows may show a "Windows protected your PC" warning the first time you run it. This is expected for a new indie app.
- If the warning appears, click More info, then Run anyway.
- To avoid it entirely: right-click the downloaded file -> Properties -> tick Unblock -> OK before running.