Releases: beulea/eve-contracts-releases
Release list
Beulea's EVE Contracts v0.4.2
Added
- The abyssal stat filters now show you where a threshold would land. Every
rolled stat's two boxes sit over a scale: the track is everything that stat can
ever roll for the class you picked, the darker band is what the current
snapshot actually lists, and a tick marks every base module value on it. Hover
a tick and it names the modules that start there, with their tier, so "better
than the Tech II in my fit" or "at least faction" is a place you can point at
instead of a number you guess and then re-read off the results. Several modules
often share one value, and where two values sit closer than a tick can be drawn
they merge into one wider tick that names the range and lists everything under
it - so nothing is quietly hidden behind a neighbour. Hovering does not need
precision: every tick answers for the stretch of scale nearest to it. Type a
floor or a ceiling and the part of the scale it throws away fades, ticks
included, and a line on the scale shows exactly where the number you typed
landed - or a chevron at the end, when it landed past the scale entirely. A
bound that excludes nothing (a floor under everything on the market, which
reads as a working filter and is not) marks its own box and says so. The
tooltip on the stat's name names both ranges, what can be rolled and what is
listed, where it used to name only the listings.
Fixed
-
Items that were showing a blank square now show their icon. Typing "Large
Shield Booster" into the item picker on All or Items brought back the
blueprints among the modules, and every blueprint row came back blank: the app
asked EVE's image server for an icon blueprints do not have, and only the
Blueprints tab knew to ask differently. It now asks per item, so a
blueprint found on any tab gets its blueprint art. The same was true of the
results list and the contract's item list, for a blueprint whose listing does
not say it is one - 51 rows and 2,254 item lines in the 2026-08-09 snapshot -
and of reaction formulas and ancient relics anywhere in the app. -
Items with no artwork no longer look like something failed. SKINs have no
picture on EVE's image server at all - 144 result rows, and item lines in 190
contracts, in that same snapshot - and every icon in the app now falls back to
a quiet placeholder that keeps the row lined up, rather than an empty gap. -
"title overcounts" no longer reads a quantity out of a word. EVE is full
of names ending in X, and the check that compares a title's stated count
against what a contract holds was treating that X as a multiplier: "WTB PLEX
6000" read as a claim of 6000, and so did "Nyx 9/16", "Phoenix 9/14" and the
tail of a pasted appraisal link. A count welded to letters is now no more a
quantity than the X in a ship's name is a multiplier - "PLEX x 10", where the
x stands on its own, still reads as ten. On the 2026-08-11 snapshot this drops
61 wrong readings and one right one, and changes no warning: the same seven
contracts are flagged, for the same reasons. -
ISK/run now charges you for the blueprint you asked about, not for
everything bundled beside it. The column divided a contract's whole price by
the runs of every print in it, so a mixed pack read as the cheapest source of
each one and took first place from the honest listings. In the 2026-08-12
snapshot a pack led the results for 2,027 of 2,692 blueprints, and once every
listing is charged for the print you asked about, 1,351 of those packs are not
first at all. Searching "'Interruptive' Warp Disruptor Blueprint"
put a 58M pack at 1.93M/run on top; those 3 Interruptive runs actually cost
58M, i.e. 19.33M each - the dearest of all seventeen listings. The figure is now
the whole price over the runs of the print you picked, so a pack that throws in
more can only ever look dearer than a plain copy, never cheaper. With no
blueprint picked, a contract holding several of them shows a dash rather than
an average nobody is selling. Where the figure is a pack's - the whole price
buying that print and a heap of other things - it carries a star saying so, the
same one the Jita value uses: a pack can still be the cheapest source of a
print, and that is worth seeing, but what you pay per run of it is the most it
could be and not what the blueprint costs.
Download
| OS | File |
|---|---|
| macOS (Apple Silicon) | Beulea.s.EVE.Contracts_0.4.2_aarch64.dmg |
| Windows | Beulea.s.EVE.Contracts_0.4.2_x64-setup.exe |
| Linux | Beulea.s.EVE.Contracts_0.4.2_amd64.AppImage |
Neither the macOS nor the Windows build is code-signed - that needs a paid
certificate - so the first launch takes one extra step. macOS: open it,
Done, then System Settings → Privacy & Security → Open Anyway. Windows:
More info → Run anyway. Linux: chmod +x the AppImage (some distros
also need FUSE).
After that the app updates itself from this page: every build is minisign-signed
and the updater checks that signature before replacing anything. The .sig
files and latest.json are what makes that work - you don't need to download
them.
Beulea's EVE Contracts v0.4.1
Changed
- Searching for a module now finds that module, not the abyssal rolls made
out of it. Picking (or typing) "Caldari Navy Large Shield Extender" used to
return every mutated extender rolled from one as well, and there were far more
of those than of the real thing: 191 of 239 results in the 2026-08-08 snapshot,
and the majority of results for 258 of the 490 modules anything had been rolled
from. A roll is a different item with different stats and a different price,
the Items tab has no columns to judge one by, and there was no way to switch
them off. In the Abyssal tab, where every result is a roll already, naming a
module still means its rolls, and matches every one made from it before you
have picked which class it rolled into.
Added
-
A search for a module now offers the abyssal versions of it, instead of
pretending they are not there. Name a module in Items or All - pick it, or
just type it - and, if anyone has rolled one, a line under the results says
how many contracts hold rolls made from it and takes you to them in one click,
scoped to that module across every class it rolled into, which the Base module
control cannot do until you have picked a class first. It matters most where
the results are empty: plenty of modules are never sold plainly in contracts at
all, only as rolls, and that search used to end in "no contracts match" with no
hint that a hundred rolls were a tab away. -
The filter chips say when a typed name is also matching abyssal rolls. In
the Abyssal tab a name matches the module you typed and everything rolled from
it, which is what you want there and is not what the same chip means in Items.
It now reads"thukker" + rolls, so the strip goes on telling you everything
that is narrowing the results.
Removed
- The "Abyssal only" switch is gone from All. It was a second content filter
standing next to the Category one and quietly disagreeing with it: in the
2026-08-08 snapshot "Blueprint" on its own found 26,785 contracts, "Blueprint"
with the switch on found 6. That was never going to work, because mutation
only produces modules and drones, so asking for anything else alongside it
could only turn up bundles that happened to hold both. No contract is lost: the
Abyssal tab lists exactly the same ones, all 10,562 of them, even before
you pick a mutated item - and unlike All it then shows you the rolled stats,
the base module and where each roll sits in its range. The one thing it cannot
do yet is show a whole category of rolls at once, the way the switch could
when paired with Category. - A saved search that used that switch still loads, and means something
different now. It no longer hides contracts without abyssals, so one that
also picked a category can come back with far more than it used to. Make it
again from the Abyssal tab if that is not what you wanted.
Download
| OS | File |
|---|---|
| macOS (Apple Silicon) | Beulea.s.EVE.Contracts_0.4.1_aarch64.dmg |
| Windows | Beulea.s.EVE.Contracts_0.4.1_x64-setup.exe |
| Linux | Beulea.s.EVE.Contracts_0.4.1_amd64.AppImage |
Neither the macOS nor the Windows build is code-signed - that needs a paid
certificate - so the first launch takes one extra step. macOS: open it,
Done, then System Settings → Privacy & Security → Open Anyway. Windows:
More info → Run anyway. Linux: chmod +x the AppImage (some distros
also need FUSE).
After that the app updates itself from this page: every build is minisign-signed
and the updater checks that signature before replacing anything. The .sig
files and latest.json are what makes that work - you don't need to download
them.
Beulea's EVE Contracts v0.4.0
Added
- A title claiming more than the contract holds is now flagged. "10x Large
Skill Injectors" holding one, priced just under what ten would actually cost
at Jita, so the ask reads as a small discount once you do the math the title
invites. The title never lies about the contents - it says nothing about them
at all - so nothing else in the app catches this. Flags now shows "title
overcounts" whenever a whole-number count parsed from the title is more than
the contract actually holds of that one item; an honest listing (a "10x
Something" that really holds ten, whether in one line or several) is never
flagged, since it's judged by the total quantity, never by how many lines it's
split across. In the 2026-08-07 snapshot that's 6 contracts and about 29.75b
of asking price between them - the four already spotted plus two more of the
same pattern since. It takes the place of "overpriced"/"verify" on that row
rather than sitting beside them, since it already says why the price looks
like a deal. Shows the same warning, worded the same way, in the contract
detail dialog next to the price - not just the results row.
Changed
-
Refreshing the contract data is about a third faster — roughly 3.5 s down
to 2.5 s on the 48k-contract snapshot, plus whatever your connection takes off
the download, which now runs alongside the unpacking instead of before it.
Nothing about the results changes; there is just less waiting on the Refresh
button. -
The Refresh button says what it is actually doing. The download no longer
finishes before the unpacking starts - they run together - so the progress
text no longer claims a download that is still going.
Fixed
-
Contract titles with
<,>,&, quotes or apostrophes now read correctly
instead of showing the raw HTML escape a seller's punctuation turns into
upstream - "sig<" now reads "sig<", "(WTS) 980 Plex <> (WTB) 10 Skill
Extractor" now reads "(WTS) 980 Plex <> (WTB) 10 Skill Extractor", and so on.
About 65 of the roughly 48,000 titles in a given snapshot were affected,
everywhere a title appears: the results row, the contract detail dialog, the
compare dialog, and saved-search summaries. -
A broken refresh could quietly leave you with the wrong contracts. Usually
none at all - a rare failure inside the decompressor, contract data missing
from the download, or a download far larger than expected all looked like a
refresh that had worked, with no error and no contracts, and the app would not
try again until the data upstream changed. A malformed download could also go
the other way and count some contracts twice. Every one of them is now a plain
error that leaves the contracts you already had. Found by review rather than
in the wild. -
An empty column no longer sits at the left of the results in searches
where nothing can be compared. The + that adds a contract to the comparison
only applies to abyssal rolls, so wherever a page held none - most searches for
ships or blueprints - its column stood there with nothing in it. It now appears
only when something on the page actually carries a roll, which includes Ships
and Blueprints, since a pack can hold one alongside everything else. -
Blueprints: an ME/TE/runs floor now applies to the blueprint you picked.
With an item picked, the floors had to be met by some blueprint in the
contract, so a "10x cruiser BPOs" bundle passed a search for a Vexor
Blueprint with ME ≥ 10 on a sibling's ME while the Vexor itself sat at 7.
The floors now describe the blueprint you asked for. -
The ME / TE / Runs columns show the blueprint the search matched. On a
bundle they used to show whichever blueprint came first, so a row found by
"ME ≥ 10" could read ME 7. With no item picked, they show the line that
cleared your floors. -
A contract demanding PLEX is no longer read as free money. PLEX trades on
one market shared by all of New Eden rather than in any region, so Jita's
regional order book holds none of it and every PLEX line was valued at 0 ISK.
Most contracts that demand items ask for PLEX, so most of them were appraised
as if that cost nothing: one asking 1,340 PLEX for a 6.34b pack showed a
Net at Jita of over six billion in green, directly under its own red
"You must hand over" warning. PLEX is now priced where it actually trades
(~4.75m sell, 2026-08-05), and that contract reads as the rough break-even it
always was. -
Net is left blank rather than guessed when something you must hand over has
no price. Zbikoki's Hacker Card, a SKIN crate, a blueprint copy: anything
with no market price counted as worth nothing, which turned "and you also give
me this" into profit. Net at Jita on the contract card and Net in the
results table now read "—", the footnote says how many hand-over lines can't
be valued, and the verify badge stays off a contract whose cost is
unknown. PLEX was the loudest case rather than the only one, which is why the
guard is not about PLEX. -
The mirror case: Net now says what a demand costs you even when the goods on
offer can't be priced. The entry above withholds a figure when the side you
hand over is unknown; this one supplies the figure that was being withheld for
no reason. Net used to appear only when the app had a Jita value for what
you receive, so a contract holding one unquoted hull and demanding 340,000
PLEX showed nothing beside a price of 0 — while the cost of that demand was
known to the ISK. Both the results table and the contract card now state it.
Where nothing at all could be priced, Net still stays out of the way. -
The unpriced-lines footnote no longer points the wrong way. It said the
true value is higher than shown even when the unpriced line sat on the side
you hand over, where the truth is the opposite. Each side now gets its own
sentence. -
A researched blueprint original is no longer appraised as an unresearched
one. The market only ever quotes the untouched blueprint — ME and TE belong
to the individual copy, and no market order can carry them — so a
ME 10 / TE 20 original asking a fair 220m was measured against the 88.4m shelf
price and shown as a 131.6m loss. Researched originals now sit with blueprint
copies among the lines nothing can price: Jita value and Net stay
empty rather than wrong, and the asterisk beside the value counts them. In the
2026-08-05 snapshot that is 91% of the blueprint originals on offer. -
A contract costing far above what it holds is now flagged. The
"overpriced" verdict had been computed and tested since the appraisal shipped,
but no column ever showed it: the app warned about suspiciously cheap packs
and said nothing about a pack costing more than 1.5× its Jita value. It now
appears in Flags beside "asks items" and "verify". -
The verdicts and the percentage now count what you hand over, not just the
ISK price. A contract listing 6m ISK beside a demand for 1,340 PLEX was
called a bargain, given a verify badge, and shown as +615% — all
because only the 6m was ever weighed against the 6.35b of goods, while the
PLEX it also wanted sat in neither figure. Counting it, that contract is
within half a percent of breaking even, and which side of even it lands on
changes with the price of PLEX through the day. Items you must hand over now
count towards what a contract costs you, so a barter with no ISK price at all
gets a verdict too, where before it got none. -
The divider on the right of Location can be dragged now. Every other
column boundary could be grabbed and this one could not, so the only way to
narrow Location was to widen the column to its left - the opposite gesture to
the one the line invites. Pulling it left narrows Location and gives the room
to Price, exactly as it looks like it should. -
Dragging a column divider now moves the divider you grabbed. Only the
ones left of Location did. The divider on Location's own right edge could not
be grabbed at all, so the only way to narrow Location was to widen the column
to its left, the opposite gesture to the one the line invites. And every
divider to the right of Location moved a different line than the one under
the pointer: widening Price took the space out of Location, which slid Price
along with it and left the grabbed edge exactly where it started. Each
divider now takes its space from the column on the other side of that line,
so the boundary follows the pointer and nothing else on the row shifts. The
columns also stop jittering mid-drag, which they did whenever the row briefly
added up to more or less than the window. Resizing the app window while
holding a divider no longer disturbs the gesture either: the columns hold
still until you let go and then settle on the new window, instead of Location
jumping to a new width and sitting there, or the drag ending somewhere the
pointer never asked for. And a divider now answers to the finger that grabbed
it - a second one landing on the same divider mid-drag used to take the first
one's place, which sent the column shooting off to its narrowest, and a second
one on a DIFFERENT divider used to bring the mid-drag jitter back the moment
it was let go, and a second finger landing on a divider that is already busy no
longer stops responding until you lift it. Anything that happens while you are
dragging - the results reloading under you, a column being reordered, whether
by the arrow keys or by a drag started before you grabbed the divider - now
leaves the drag alone instead of bending it, giving a column the width meant
for its neighbour, or leaving o...
Beulea's EVE Contracts v0.3.0
Added
-
Hide contracts you've already turned down. The eye icon beside a row's
star takes that contract out of every search, for good. The in-game client
can only ignore a whole issuer, never a single contract, so a listing you
rejected keeps coming back at you on every scan of the same search.- Hidden contracts are gone from the results, not greyed out - they don't
take up a place on the page either. - More filters grows a Show hidden (N) switch once you have hidden
something. Turn it on to see them again and unhide the ones you want back,
or use Show all again to clear the lot - which asks once, since there
is no undo. - The filter strip says N hidden while any are being excluded; clicking it
shows them rather than forgetting them, and Clear all leaves them alone
— clearing your filters is not the same as changing your mind about a
contract. A search that comes back empty says what actually emptied it — if
everything on the page is hidden it says so, and offers to show them, rather
than blaming filters you never set. - Favorites never hides anything: starring a contract and then hiding it are
opposite verdicts, and the star wins. - Hiding is remembered with your favorites and column layout, so it survives
app updates. Entries clean themselves up as contracts leave the game.
- Hidden contracts are gone from the results, not greyed out - they don't
-
Saved searches. Name a set of filters and bring it back later, from the
Presets button at the right-hand end of the filter bar. The in-game contract search forgets every
filter the moment you close it - region included - and has done since players
first asked in 2010, so this is the gap it never filled.- A preset remembers one tab's whole setup: the search box, the item picked,
region, kind, price and time window, the blueprint floors, the abyssal class
with its base modules and stat ranges, and the sort. Applying one switches to
the tab it was saved from, and says so rather than jumping silently. - Each preset lists what it actually holds under its name, so you can tell them
apart without applying them one by one. - Presets are never overwritten behind your back. Change a filter after
applying one and a dot appears beside its name, with buttons to save the
change or throw it away right there - no hunting through a menu, and no
silent overwrite. - Rename or delete from the row's own buttons; deleting asks once, since there
is no undo. Presets are stored with your favorites and column layout, so they
survive app updates. - If a restored abyssal preset carries a stat filter the class no longer rolls
- its mutaplasmid's stats can change between game updates - the filter is
dropped and you're told, instead of the search quietly returning less than
the preset asked for.
- its mutaplasmid's stats can change between game updates - the filter is
- A preset remembers one tab's whole setup: the search box, the item picked,
Changed
-
The Abyssal search bar is laid out by what each control does. The class you
are searching now leads its own line, with the base modules beside it, so the
row below is purely about narrowing the results. The two base-module controls
also say what they do: Base modules picks what a contract must hold, and
Excluding hides contracts holding anything from those bases. They ask
different questions, so they work together. -
A stat filter the narrowed scope can't roll is now cleared, and says so.
Version 0.1.3 promised that stat ranges survive any base-module change, and
that was too strong: narrowing the bases can leave a bound with no input row
and no chip, so it filters nothing you can see - until you widen the scope
again and it quietly starts cutting results you didn't ask it to. Such a bound
is now cleared with a message. Bounds the narrowed scope still rolls are
untouched, and switching class still resets everything as before. -
The packs filter works on every tab. Hiding bundles was only possible in
All and Items, so a blueprint search drowned in "62 item pack" rows with no
way to say you wanted single items. It now lives with the other shared filters
behind More filters, alongside region and contract kind, and still shows as
a removable chip when set.
Fixed
- Excluding a base module now hides packs that contain it. It used to check
only the roll it had already matched, so a four-module bundle that was three
quarters Ice Harvester II still came back from a search excluding Ice Harvester
II. Single-module contracts are unaffected. - A failed roll-range lookup says what went wrong. When the stat filters for
an abyssal class can't be read it now names the reason instead of offering a
generic "try refreshing", and it no longer blames whichever class you happened
to switch to while the error was on screen. - Picking an item category no longer clears your group choice at startup.
- "Cheapest per run" is no longer forgotten when you leave the Blueprints
tab. Sorting by ISK/run and then visiting another tab silently reset the
sort, so coming back re-sorted your results by newest without saying so.
Download
| OS | File |
|---|---|
| macOS (Apple Silicon) | Beulea.s.EVE.Contracts_0.3.0_aarch64.dmg |
| Windows | Beulea.s.EVE.Contracts_0.3.0_x64-setup.exe |
| Linux | Beulea.s.EVE.Contracts_0.3.0_amd64.AppImage |
Neither the macOS nor the Windows build is code-signed - that needs a paid
certificate - so the first launch takes one extra step. macOS: open it,
Done, then System Settings → Privacy & Security → Open Anyway. Windows:
More info → Run anyway. Linux: chmod +x the AppImage (some distros
also need FUSE).
After that the app updates itself from this page: every build is minisign-signed
and the updater checks that signature before replacing anything. The .sig
files and latest.json are what makes that work - you don't need to download
them.
Beulea's EVE Contracts v0.2.5
Changed
- The MutaMarket estimate is now next to the price, in the contract's money
row, instead of tucked into the top-right corner of the roll card further
down. Feedback was that people simply never saw it - and once you look, it's
clear why: it sat below the fold of the item list, and it was written compact
(2.9m) while the asking price right above was written out in full
(2,500,000 ISK), so even spotting both didn't let you compare them. Both
now read the same way, side by side, and the slot is held from the moment the
card opens rather than appearing a beat later once the lookup returns.
Multi-module contracts show the total up top and keep the per-roll figures on
the cards below. - Net at Jita is written out in full, like every other figure in the money
row. It was abbreviated (500.0k) directly beside a grouped asking price
(2,500,000 ISK) - two numbers meant to be read against each other, written
two different ways. - The "not priced" footnote no longer contradicts the estimate above it. A
contract whose only unpriceable line was an abyssal module MutaMarket had
already valued still announced that its true value was higher than shown;
rolls that got an estimate are no longer counted as unpriced, and the note
now names what's actually missing. The estimate stays a reference figure next
to the price, not a verdict on the deal: MutaMarket's own published accuracy
for these models is far too loose to turn into a "you're saving X%" number.
Download
| OS | File |
|---|---|
| macOS (Apple Silicon) | Beulea.s.EVE.Contracts_0.2.5_aarch64.dmg |
| Windows | Beulea.s.EVE.Contracts_0.2.5_x64-setup.exe |
| Linux | Beulea.s.EVE.Contracts_0.2.5_amd64.AppImage |
Neither the macOS nor the Windows build is code-signed - that needs a paid
certificate - so the first launch takes one extra step. macOS: open it,
Done, then System Settings → Privacy & Security → Open Anyway. Windows:
More info → Run anyway. Linux: chmod +x the AppImage (some distros
also need FUSE).
After that the app updates itself from this page: every build is minisign-signed
and the updater checks that signature before replacing anything. The .sig
files and latest.json are what makes that work - you don't need to download
them.
Beulea's EVE Contracts v0.2.4
Added
- About in the header: which version you're running, every data source the
app reads from with a link to each, and a Check for updates button. The
startup check is deliberately silent unless there's something to install, so
until now there was no way to ask "am I on the latest?" and get an answer -
now it says so either way, including when the update server can't be reached.
Changed
- The update prompt shows what's actually new instead of "a newer version is
ready": the first few changelog entries, rendered as bullets, with a link to
the full notes. The release page also gained a download table naming the file
for each OS and the one-time step each unsigned build needs on first launch -
eight files with names like..._amd64.AppImageare not a download page.
Fixed
-
A contract whose time has run out says so. The Expires column called it
"ready" — a word that belongs to industry jobs, where a finished one really
is ready to collect, and that here read as available for a contract nobody
can accept any more. It now says expired, in the same amber the app uses
elsewhere for "read this one with a caveat", so it catches the eye instead of
sitting in the same grey as a running clock. A snapshot arrives with barely a
dozen of them, and they gather at the top the moment you sort by "expires
soonest" — exactly when you're hunting for something about to go — but they
keep piling up for as long as you leave it unrefreshed, which is the other
reason to notice them. The compare window says so too, at the top of the
column, and a dead contract no longer wins a row there. -
The not listed flag stopped taking credit for things it doesn't know. It
said a starred contract was "expired, sold, or just aged out"; now expiry has
its own flag, and "not listed" means the narrower, honest thing: it left the
snapshot with time still on its clock, so it was accepted, cancelled or
pulled. Those rows also stop showing a countdown to an expiry that will never
arrive. -
The contract card shows when a contract was issued and when it expires. It
had neither — you could read every item, every price and the scam verdict
without ever learning the thing was already over. Copying its in-game link now
warns you too, instead of cheerfully telling you to paste a link that opens
nothing.
Download
| OS | File |
|---|---|
| macOS (Apple Silicon) | Beulea.s.EVE.Contracts_0.2.4_aarch64.dmg |
| Windows | Beulea.s.EVE.Contracts_0.2.4_x64-setup.exe |
| Linux | Beulea.s.EVE.Contracts_0.2.4_amd64.AppImage |
Neither the macOS nor the Windows build is code-signed - that needs a paid
certificate - so the first launch takes one extra step. macOS: open it,
Done, then System Settings → Privacy & Security → Open Anyway. Windows:
More info → Run anyway. Linux: chmod +x the AppImage (some distros
also need FUSE).
After that the app updates itself from this page: every build is minisign-signed
and the updater checks that signature before replacing anything. The .sig
files and latest.json are what makes that work - you don't need to download
them.
Beulea's EVE Contracts v0.2.3
Fixed
-
Blueprint originals stopped disappearing from a Runs ≥ search. A BPO has
unlimited runs, so it should satisfy any floor — instead "BPO" plus any runs
value returned nothing at all, ever, and on a mixed BPO+BPC search every
original silently dropped out: 4,957 of the 26,903 blueprint contracts in a
current snapshot. The filter was testing for a "−1 = unlimited" marker that
the data has never contained. -
Searching for a literal % or _ works. Both are wildcards to the
search underneath, so typing a percent sign matched every contract in the
snapshot rather than the ones with a percent in the title — and titles like
"fully researched BPO (ME:10%, TE:20%)" are exactly what people type it
looking for. Item-name searches are fixed the same way. -
Picking a region is instant now, and the busiest one gained the most. Filtering
to a region meant sorting every contract in it before showing the first page —
and since The Forge holds about seven of every ten contracts in the game, the
region people pick most was the slowest by far: roughly 140 ms of sorting for a
screen of results, now under 2 ms. Other regions were already quick and are
unchanged, as is searching with no region set.This adds an index, which changes the local database's shape, so the contract
snapshot is re-downloaded once after this update. -
Filtering by a specific item is instant now. Picking one from the item box
used to make the search read every contract in the snapshot to check each one
in turn, which for anything but the few most-traded items meant a wait of
around a fifth of a second — and the rarer the item, the longer, because the
results ran out before the reading did. It now goes at the item, not at the
contracts: 60–200 ms down to under a millisecond, same results. -
A mistyped price no longer empties the results. The Min/Max ISK boxes accept
a second dot, and "1.2.3" was passed on as a number that isn't one, which
quietly made every contract fail the comparison — an empty list with nothing
to explain it. A price that can't be read is now no filter at all. -
The compare window compares the modules to each other now. In an abyssal
comparison the bold green number was the luckiest roll — the one that landed
highest inside its own possible range — not the better module: a plate using
623 MW of powergrid lost the row to one using 667 MW, because the second had
rolled further above a weaker base. Bold now marks the best actual value in
the row, the same way the Price row marks the cheapest — and that row got
tidier too: when every contract asks the same price, which is common, none of
them is "best" any more, so the row stops going all green to say they match.
The bars still
show each roll against its own possible range, which is a different question —
and when the compared rolls don't share that range, because they came from
different base modules or different mutaplasmids, the window now says so. That
is most comparisons: a class can be mutated from a dozen different modules,
and it's exactly when a fuller bar can sit beside a worse number.Worth knowing if you'd been reading the old highlight: it only ever agreed with
the values when both rolls shared a base module and a mutaplasmid. Otherwise
it disagreed on about a quarter of stats. -
The compare window stopped making claims about the wrong things. "Jita value"
in an abyssal comparison was never the module's worth — nothing can price a
rolled module, so it was the value of whatever else the contract included,
and it won the "best" highlight on that: one real listing is a freighter-load
of minerals with a single roll in it, which would have been marked the best of
the bunch on its cargo. It's now called "Other items" there and marks no
winner. A contract carrying several rolled modules also says so — the table
compares the first of them, and the column now reads "1 of 3 in this contract"
instead of implying it's the whole thing. -
The compare window no longer hangs around empty. Removing the last contract
from inside it — or clearing the tray behind it — left it open, still showing
the comparison it had loaded, with × buttons that did nothing. And when
loading a comparison failed it said "Nothing selected to compare", which was
neither true nor useful; it now says what happened. A contract that has left
the snapshot since you ticked it — sold, expired, or dropped by a refresh —
is left out and named, instead of appearing as a column with no stats and the
price it had when you picked it. -
Small things around the compare tray: with eight contracts selected the +
button says the tray is full instead of doing nothing, and when the
comparison spans more classes than fit across the dialog, their tabs scroll
rather than being cut off where you can't reach them.
Beulea's EVE Contracts v0.2.2
Changed
- Auctions now read as auctions and show what they actually cost. An auction's
price in the results was its starting bid, so one opened at 1M ISK but bid up
to 50M still showed "1M" — indistinguishable from a fixed-price sale. The Price
cell now leads with the current top bid (bid count and buyout in the tooltip),
or the buyout, or the opening bid — each labelled — and multi-item auctions get
a gavel icon. A bid-up auction no longer masquerades as a bargain anywhere: the
Jita-value comparison and the "verify" flag, the price filter, sorting by Price
or by ISK-per-run, and the detail and compare views all treat it as what it'd
really cost — so it can't slip through a "≤ 5M" filter just because it opened
at 1M, and its profit no longer looks 50× better than it is.
Fixed
- Courier contracts filter and sort by their reward now, not a phantom zero. A
courier's ISK is its delivery reward, not a "price" (that field is always 0 for
couriers), so a price filter used to let every courier through as if free — a
480M-reward haul showed up under "≤ 5M" — and sorting by price piled them all
at the bottom. Both now use the reward.
Beulea's EVE Contracts v0.2.1
Changed
- The filter bar leads with what you're hunting now. Region, contract kind, the
time window and "hide item asks" — the filters every tab shares — fold into a
More filters button (which carries a count when any are set), so each tab's
first row is its own: the search and type, price, and that mode's controls (a
class and its base modules on Abyssal, category on Items, ME/TE/runs on
Blueprints). They're all one click away and still show as removable chips when
set. Region and the time window also became type-to-filter dropdowns, matching
the app's other pickers.
Beulea's EVE Contracts v0.2.0
Added
-
Abyssal results can be sorted by overall roll quality — the ★ score now has
its own Roll column, and clicking it puts the best rolls in the class on
top (again for the worst, again to switch it off). It answers a different
question than sorting by one stat: on stasis webs the two orders share nothing
in their top ten, and on mining modules they're barely related at all. The
score also stopped shoving the module name around now that it has a column of
its own instead of sitting inline after the title.The column only appears when the score means something. It's a standing among
the class's listed rolls, so a class with a handful of them can't produce one:
resampled against real classes, five listings put a middling roll anywhere
between 0% and 100% depending purely on who else was listed that day. The line
is now fifteen, and below it there's no ★ column rather than a column of
dashes — "not enough listed to say" instead of a confident-looking guess. On a
live snapshot that's 13 classes of 88, holding about 1% of all listed rolls.
Changed
-
Clear all now clears exactly the filter chips you can see, and nothing
else. It used to reach past them and reset filters on other tabs, where no
chip was showing to warn you, and it cleared the abyssal roll sort — sorting
isn't filtering, and the ordinary sort was never cleared either. It also
missed one, leaving "Hide item asks" behind. So it's now per-tab: your class,
your sort, and anything set on another tab all survive it. Nothing can hide
from it either — a filter always has a chip on the tab where it actually
narrows anything. -
Leaving the Abyssal tab and coming back no longer throws away your work. The
stat ranges you'd typed, the base modules you'd narrowed to, the column sort
and which stats you'd left showing in Stats were all cleared by the round
trip, even though the class never changed — the reset meant for switching
classes was firing on switching tabs. The Stats one also quietly changed the
★ score, since a stat that reappears starts counting toward it again. -
The Favorites tab no longer shows filter chips it doesn't obey. Filters set on
another tab stay set — that's deliberate — but Favorites builds its list from
what you starred and reads none of them, so showing them there (with a Clear
all, no less) claimed they were doing something. -
Picking an abyssal module is responsive again. Every keystroke was re-counting
every listed roll in the snapshot to build a list it then filtered in memory.
That list is the same until the next snapshot, so it's now loaded once — and
the count behind it got about five times faster on top of that, because the
join it runs was opening a row in the 400,000-row item table for every rolled
module it counted. A new index carries what it needed, so it opens none.Adding that index changes the local database's shape, so the contract
snapshot is re-downloaded once after this update. -
Clear all no longer closes an abyssal search. The class you're comparing
rolls within isn't a filter — it's what the whole table is — and clearing it
emptied the screen instead of widening the search. It also stopped being
listed among the filter chips, where it was a second copy of the picker
sitting right above it; removing it from there is what lets Clear all mean
every chip, with nothing held back. Its own × is unchanged. -
A column added in an app update now appears where it was designed to sit,
even if you'd previously dragged your columns around. It used to be tacked
onto the end of the row instead — and saved there. -
Sorting now lives entirely in the column headers. The sort dropdown is gone —
every option it had is a click on the column itself, in either direction, and
results no longer depend on which of the two controls you touched last. In
the Abyssal table the two used to disagree outright: the Price column won
while the dropdown carried on showing a different sort. In Favorites the
headers did nothing at all — clicking Price moved an arrow, left the list
untouched (it's always newest-starred first) and quietly changed the sort on
your other tabs; they're plain labels now. Contracts also gained an Issued
column next to Expires — the list has always defaulted to newest-first, but
never showed the date it was ordering by.
Fixed
-
Unticking stats in Stats sticks. Clearing the last few — or all of them —
used to hold until you narrowed to a base module or came back to the tab, at
which point every column you'd hidden reappeared, taking its share of the ★
score with it. The chooser now only starts over when you pick a different
class, whose stats are different stats anyway. -
Roll filters for stats that only go negative no longer need the minus typed.
A stasis webifier's Max Velocity rolls between −66% and −54%, so typing "60"
used to ask for values above +60 and quietly return nothing. It now reads as
the −60% you meant. Typing the minus still works, values are still shown
signed, and stats that can roll positive are untouched. -
Abyssal webs were rated backwards. On a stasis webifier, Maximum Velocity
Bonus is a penalty — a -69% roll slows harder than a -50% one — but the app
read it like a propulsion module's speed bonus, so the best webs showed a red,
near-empty roll bar and sorted last, while the worst ones came out green with
a top quality score. Roll bars, colours, the quality badge, the weak-roll
chip, sorting and the compare table now all agree that lower is better here. -
Assault Damage Controls had the same problem on Activation time: a longer
resistance window is the good roll, and it was being marked as the bad one. -
Result rows line up again: contracts without a single obvious item (packs,
couriers) used to render no icon at all, so their names sat further left
than everyone else's. Every row now has the same icon slot — the item's own
icon when there is one, a box for multi-item packs, a truck for couriers. -
Reordering columns is far easier to grab: drag anywhere on a column header to
move it, instead of hunting for a tiny handle that sat a pixel or two from the
resize edge and kept catching the wrong one. Clicking a header still sorts and
the right edge still resizes; both now show a hover tooltip saying what they
do, and columns can be reordered from the keyboard — focus a header and use
← / →.