Skip to content

Repository files navigation

OSPulse logo

OSPulse

An all‑in‑one information dashboard for Old School RuneScape, in a single RuneLite side panel.
A live gear DPS / max‑hit calculator alongside banking‑aware session profit, a complete loot feed, total net worth, XP gained and Grand Exchange flip P&L — everything valued with RuneLite's own Grand Exchange prices, with no third‑party service required.

Live gear DPS and max-hit calculator panel showing worn gear, ranked attack styles and the max hit / accuracy / DPS / time-to-kill readout

🧪 OSPulse is in beta. Hit a bug, or a number that looks wrong?
Please report it here — your reports genuinely help make it better.


✨ At a glance

⚔️ Gear DPS & max hit Live max hit, accuracy, DPS and time‑to‑kill, auto‑filled from your worn gear, boosted stats and prayers.
🧠 Gear optimiser Find Best searches your owned and affordable items for the highest DPS‑per‑GP, respects each monster's required items, and highlights the picks in your bank.
💥 Spec weapon & reminders Names the special attack worth bringing for the target, plus a "don't forget" note for the consumables that don't fit in a gear slot.
💰 Session profit Banking‑aware, so bank trips are never counted as losses.
🎒 Loot feed Built from wealth changes, so it catches everything you gain — not just NPC drops.
📈 Net worth & XP Bank + inventory + equipment + GE, plus XP and levels gained this session.
🔁 GE flip P&L Realised, average‑cost, reconciled so flips are never double‑counted as loot.
🔒 Private by default No account data leaves the client; one optional, off‑by‑default price‑trend lookup.

⚔️ Gear DPS & max hit

Full Gear DPS panel: worn-gear grid, Find Best / Reset, a searchable target, attack styles ranked by DPS, and the max hit / accuracy / DPS / time-to-kill readout with the optimiser's suggested swaps below

Where a standalone DPS calculator makes you type in your gear, levels and boosts, OSPulse reads them straight from the client and recomputes as you swap gear, sip a potion or flick a prayer — always reflecting your real current setup, with no manual entry.

  • Live max hit, accuracy, average hit, DPS and time‑to‑kill, across the weapon's real in‑game attack styles, ranked by DPS with the best auto‑selected.
  • A searchable target monster (per‑style defence applied), plus on‑task, potion and prayer toggles.
  • Variant/effect handling: Salve (e)(i), Slayer helm/black mask (i), Void, demonbane and dragon hunter weapons, powered staves and standard/ancient spells, the elemental tomes (fire/water/earth) and the blowpipe (dart set by right‑clicking the weapon in the gear panel).
  • What‑if swaps: click any slot, search an item, and see the DPS delta versus your worn gear before committing.

Damage is calculated player‑vs‑monster (PvM); PvP is not modelled.


🎯 Knows each monster's requirements

Monstrous basilisk target with the mechanic-required mirror / V's shield pinned into the recommended setup

Some kills need a specific item, not just the highest DPS. OSPulse pins the piece a monster's mechanic requires — a mirror / V's shield for basilisks, Insulated boots for Rune dragons — and shows the reason, so the "best setup" is one that actually works.

Kurask target with an incompatible weapon crossed out by a red X

It also crosses out styles and weapons that can't damage the target — an unusable attack style, a weapon a monster is immune to (a leaf‑bladed requirement on Kurasks) — so you never set out with gear that can't land a hit.


💥 Names the special attack worth bringing

Gear panel with Vorkath selected: the recommended setup grid with a best-spec-weapon cell sitting between the weapon and gloves slots

A dedicated cell sits between your weapon and gloves, naming the spec weapon worth taking. It is role‑aware, not a damage ranking — a high‑defence boss gets a Dragon warhammer or Bandos godsword rather than claws every time — and it only ever suggests a weapon you own and can legally use on that target. It states the effect ("−30% Defence") instead of a DPS number, because a heal, a drain and a big hit aren't comparable on one scale.


🧪 Reminds you what doesn't go in a gear slot

Vorkath reminder text under the potion and prayer icons, explaining dragonfire protection and to bring antivenom+

Under the potion/prayer row, a curated "don't forget" note per target — antivenom for venomous bosses, recoils and rings of suffering for Zulrah, antifire and a dragonfire shield for dragons. The items it names are highlighted in your bank alongside the recommended gear, so the reminder is still there when you go to collect it.


🧠 Gear optimiser — best DPS per GP

Gear optimiser with a custom GP budget, listing suggested swaps and their cost with most slots already owned

"Find Best" searches your owned and affordable items for the highest DPS, ranked by DPS‑per‑GP, and applies the result straight to the readout.

  • Set a GP budget and it finds the cheapest route to more DPS — most swaps come from gear you already own, and each paid upgrade shows its price and the exact DPS it buys.
  • It ranks the five damage‑type selectors (Stab/Slash/Crush/Ranged/Magic) by the best achievable DPS for each, so the strongest style is offered first.
  • Ammo is weapon‑compatible: arrows only with bows, bolts with crossbows (never javelins on a bow), and each candidate weapon is trialled with its own best compatible ammo.

Excluded-from-suggestions list, each item with a per-item remove button

Steer the search: right‑click any suggestion to exclude it and instantly re‑optimise. The excluded list is editable, so you can drop items you'll never buy and keep the recommendations realistic.

Wilderness & PvP risk cap: say how many expensive items you're willing to take in and what counts as expensive (starts at 100k), and the optimiser builds the best setup that stays inside that limit — giving up whichever item costs you the least DPS rather than whichever happens to sit first in the slot order. Untradeables are counted at what it actually costs to keep them on death, so a fire cape or an Avernic defender can't slip through as free risk, while gear you can simply get again (an Ardougne cloak) doesn't burn one of your slots. Set Hide unprotectable items if you'd rather it never suggested parchment‑only gear at all.


🏦 Highlights the upgrades in your bank

Bank view with the optimiser's recommended gear pieces highlighted

Once you've settled on a setup, OSPulse highlights the recommended pieces in your bank, so you can grab the exact upgrade without cross‑referencing item names — the swap you just planned, marked where you'll actually pick it up.



📊 Session, wealth & XP tracking

The same side panel gathers, as collapsible and individually hideable sections:

Section What it shows
Session Live session profit, computed banking‑aware, plus loot value earned vs supplies consumed and net‑of‑supplies profit.
Loot A per‑item loot feed built from wealth changes, so it catches everything you gain — not just NPC drops. Sorted by value, hover any row for name × quantity and per‑item GE / high‑alch value, with per‑item and per‑source right‑click "hide" menus.
XP XP and levels gained this session, tracking virtual levels to 126. Right‑click reset/pause and an optional movable on‑canvas overlay per skill.
Grand Exchange Realised flip P&L (average‑cost), reconciled against the loot feed so flips are never double‑counted as loot. Progress bars for in‑flight offers.
Wealth Net worth = bank + inventory + equipment + Grand Exchange, with an "Unrealized P/L" line for price movement on items you're carrying.
Top Holdings Your most valuable items with per‑holding value drift, paged.

Session profit and loot feed XP gained per skill this session Top holdings with per-item value drift

Grand Exchange offers with progress bars Net worth breakdown across bank, inventory, equipment and GE

How is session profit calculated?

Profit uses a banking‑aware wealth‑delta model rather than only crediting NPC drops:

  • Away from the bank, any change in your carried wealth (inventory + equipment + GE‑in‑flight + pouches) is real profit or loss — so pickups, consumables and untradeables are all accounted for.
  • With the bank open, inventory↔bank moves are transfers (zero‑sum) and excluded; when the bank closes the baseline shifts by the net deposit/withdrawal, so banking never registers as profit.
  • The Grand Exchange reconciler removes GE‑driven item movements from the loot feed and surfaces realised flip spread separately, so a flip isn't counted twice.

🔒 Privacy & network access

OSPulse makes almost no network calls, and is trivial for a reviewer to verify.

  • Grand Exchange prices are not a plugin connection. All valuation uses RuneLite's own ItemManager — OSPulse opens no socket for pricing, exactly like Bank, Ground Items or Loot Tracker.
  • One optional, off‑by‑default feature. When you enable "Price trends", it fetches a price series from the public OSRS Wiki API, sending only an item id — no account name, no player data. It reuses RuneLite's injected OkHttpClient; no new dependency is added.
  • No telemetry, analytics, or author‑hosted sync of any kind.

Full technical detail (the single class involved, threading, provenance and build) is in DEVELOPMENT.md.


⚙️ Settings

  • Min loot value — hide loot‑feed items below this GE value.
  • Include rune pouch / looting bag — count pouch/bag contents in tracked wealth.
  • Hide unprotectable items — off by default; keeps rare untradeables that can't be protected on death (fire cape, fighter torso, imbued capes) out of Find Best recommendations. They count against the expensive‑item risk cap either way — this only decides whether the optimiser may recommend equipping one.
  • Ironman: owned gear only — restricts Find Best to gear you already own and hides the upgrade‑oriented budget/spend UI. Set per account, so an ironman and a main sharing one client keep separate choices; it turns itself on the first time an ironman logs in, and turning it off is remembered rather than silently re‑enabled.
  • Enable price trends — off by default; the only setting that can cause a network call (see above).
  • Trend window / Holdings page size — trend look‑back and rows per Top Holdings page.
  • Panel sections — independently show/hide each of the seven sections (Session, Loot, XP, Gear, Grand Exchange, Wealth, Top Holdings), applied live without restarting.

The blowpipe's loaded dart is set by right‑clicking the blowpipe in the gear panel ("Set darts ▸").


🔗 Links


📝 Changelog

0.2.2 — Wilderness‑aware risk, your own prayers

✨ New

  • 🗺️ The expensive‑item cap now only applies where you can actually be PKed. Setting "max 2 expensive items" used to constrain every search, so picking a boss nowhere near the Wilderness quietly gave you a worse setup than your gear allows. It now applies to Wilderness targets only. Monsters that live both inside and outside the Wilderness are already listed twice — pick Black dragon (Wilderness) and the cap applies, pick the plain Black dragon and it doesn't. For PvP worlds, or if you just want to limit your risk everywhere, tick the new Any target box.
  • 🙏 Right‑click the prayer icon to pick the prayer you actually have. The DPS simulation assumed Piety, Rigour or Augury, which is no help without them. Right‑click now offers every prayer for that style — Chivalry, Eagle Eye, Mystic Might and the rest — the same way the potion icon already swaps between Saturated heart and Imbued heart. Your pick is remembered per style, and it only applies while the "best prayer" toggle is on; with it off, whatever you have active in game still wins.
  • 💾 Your risk‑cap settings stay put. The expensive‑item count and value reset every time you restarted the client. They're now saved like the rest of the panel.

🔧 Fixed

  • Ironmen couldn't reach the risk cap at all. Owned‑only mode hid the whole budget row, and the expensive‑item count and value went with it — while still quietly applying their default values to every search. The budget is about what you can buy, so it stays hidden; the cap is about what you can afford to lose, which matters just as much on an ironman.
0.2.1 — Truthful wealth, readable numbers

✨ New

  • 💰 Session net worth you can actually trust. Your net‑worth change is now a sum you can check yourself — Profit + GE flip + GE positions + Bank — with GE positions and Bank each toggleable. Banking your loot no longer reads as a huge loss: moving gp between your pack and your bank doesn't change what you're worth. Open offers are valued at what you paid, so shifting your own coins into the GE doesn't inflate the figure either, and price drift on gear you're holding or wearing no longer leaks into the total.
  • ⚖️ The risk cap now sacrifices the right item. When you limit how many expensive items to allow, the optimiser used to give up whichever item happened to sit earliest in the slot order — demoting a DPS‑carrying amulet while a DPS‑dead ring kept its expensive spot. It now gives up whatever costs you the least DPS, so your allowed expensive slots go to the gear that earns them.
  • 💍 Charge variants grouped into one entry. Amulet of glory (1)/(2)/(3)/(4)/eternal were listed as separate items, so you'd see eight near‑identical amulets and be told to "buy" a charge of one already in your bank. Now it's a single entry using your highest owned charge — and under an active risk cap it steps down to the best charge you're allowed to take. Same for glory (t).
  • 🛡️ Protected items are flagged. Rare untradeables you can only keep on death with a Trouver parchment are now tinted, with a "must be protected (Trouver parchment)" tooltip, so you can see what you're really risking.
  • 🙈 Hide gear you can't protect. New setting — Hide unprotectable items — leaves those parchment‑only untradeables out of recommendations entirely, so a wilderness setup only suggests gear you're actually willing to lose.
  • 🔥 The risk cap now counts your untradeables. A fire cape, fighter torso or imbued god cape has no GE price, so it used to count as free risk and slip past the cap. They're now valued at what it costs to keep one on death — a Trouver parchment, or the item's own reclaim cost where that's cheaper — and assembled items like an Avernic defender are valued through their hilt. Your "max N expensive items" finally reflects what you're really carrying.
  • 🪶 Free‑to‑replace items don't burn an expensive slot. An Ardougne cloak costs nothing to get again, so it no longer counts against your expensive‑item limit.
  • 🧯 Every slot keeps a cheap fallback. With a risk cap on, the optimiser now always keeps at least one affordable candidate per slot, so it can't end up with nothing to recommend there.
  • 🔢 Clearer numbers everywhere. DPS, Accuracy, Avg hit, TTK, Overkill and your gp figures all read the same way: the number and its unit (k/m/b/%) stay bright while the decimals dim back, so 1.98 can't be mistaken for 198 — all at normal text size.
  • 🏹 The ammo slot names your ammo. Reads "Rada's blessing 4 — Ammo slot (live)" instead of generic slot text, so similar‑looking ammo is no longer indistinguishable.
  • 🎭 Recommendations name the variant you own. Shows "Masori mask (f)" rather than the plain "Masori mask", with the icon, preview and bank highlight all agreeing.
  • 💥 Best spec weapon, right in the gear picker. A new cell between your weapon and gloves names the special attack worth bringing — and it is role‑aware rather than damage‑obsessed, so a high‑defence boss suggests a Dragon warhammer or Bandos godsword instead of endlessly recommending claws. It only ever names a weapon you own and can legally use on that target, and it states the effect ("−30% Defence") rather than a DPS number, because heals, drains and damage aren't comparable on one scale.
  • 🧪 A "don't forget" reminder under prayers and potions. Curated per target — antivenom for venomous bosses, recoils and rings of suffering for Zulrah, antifire and a dragonfire shield for dragons, and so on — so the consumables that don't show up in a gear slot stop being the thing you notice on the boat over.
  • 🧍 Ironman owned‑only mode. One switch hides everything about buying upgrades — "Extra GP to spend", "best DPS found", "vs owned only", "total spend", "DPS per GP spent" and the whole suggested‑swaps section — so the panel only ever talks about gear you actually have. It turns itself on the first time an ironman logs in, and it remembers the choice per account, so an ironman and a main sharing one client each keep their own setting.
  • 🗂️ "Excluded from suggestions" now collapses. A click on the heading folds the list away, the same way the loot section already works, so a long exclusion list stops crowding out the panel.
  • 🚫 More targets that refuse the wrong style. OSPulse already knew a monster could be immune to a style; it now knows for Zulrah, Kraken, Cave kraken, The Leviathan, Dawn, Tekton and both Wardens. No more being told to bring a tentacle whip to Zulrah.

🔧 Fixed

  • Cheap untradeables are no longer treated as 575k of risk. Every rare untradeable was priced at the cost of a Trouver parchment, so Barrows gloves (~130k to reclaim) were risked at 575k. They're now valued at whichever is cheaper — parchment or real reclaim cost — and cheap‑reclaim items are no longer wrongly flagged "must be protected".
  • Items priced through a crafting ingredient always read as unaffordable — a Scorching bow (valued via a Tormented synapse) could never be recommended no matter your budget.
  • Items sharing a name could read as not owned. Imbued rings have a separate id per reward source, and the name lookup silently dropped all but one of them.
  • The expensive‑item cap was silently doing nothing. The "expensive" threshold started at 0, so no item ever counted as expensive and setting "max 1 expensive item" had no effect at all until you noticed and set a threshold yourself. It now starts at 100k.
  • Worn gear could read as free risk. Some pieces you already owned — and some variants — weren't priced at their real value for the risk cap, so a loadout could be reported as under your limit when it wasn't.
  • GE flip profit went missing after a relog. Selling something you'd bought in an earlier session credited zero (or wrong) profit, because the cost basis of your open buys wasn't restored when you logged back in. It's now saved per account and restored on login.
  • "Reset session" had the same effect on open GE buys — it wiped their cost basis without reloading it, so a later sale credited nothing. Reset now restores it exactly the way a relog does.
  • Unrealised P/L leaked between accounts. The baseline was stored once for the whole client, so switching accounts carried a stale baseline over from the other one. It's now kept per account.
  • Attack‑style DPS was cut in half by the panel edge. The styles list could render past its own right‑hand edge, so a style's DPS showed as "5." with the rest hidden under the scroll bar — worst on the ranged, slash and crush lists. The list now always fits the panel width, so every DPS reads in full.
  • Attack‑style names are no longer cut short. "Longrange", "Pummel" and "Pound" could render as "Longran…". Styles still pair into two compact columns wherever they fit, but a lone odd style now takes the full bottom row — so a bow reads Accurate and Rapid side by side with Longrange spanning beneath — and any weapon whose names genuinely can't fit two columns (chinchompas) gets a full‑width list instead. The best style no longer carries a ★, since its name and DPS are already orange and it starts selected.
  • Session toggles tidied up. The tick boxes for "GE positions", "Bank" and "Show breakdown" now follow their names instead of leading them, so every name lines up with "Profit" and "GE flip" above and all three boxes share one column. The boxes are smaller and the rows now sit exactly as tight as the rest of the breakdown.
  • Crafting at a loss now reads as a loss. Making potions whose ingredients cost more than the result left Profit unchanged — the ingredient cost silently disappeared from Profit and was absorbed into the Bank line, so a losing herblore run could still look like a gain. Skilling is now tracked as an episode: your inputs are charged, the item you made is no longer counted as "loot" you found, and Profit shows the real margin — negative when you lose money. Covers Herblore, Crafting, Fletching, Smithing and Cooking.
  • Loot picked up without a kill now reaches the loot feed. The feed only ever showed what RuneLite's Loot Tracker broadcast, so anything it missed — notably bird nests searched without a menu click — never appeared, even though your wealth clearly moved. OSPulse now watches your inventory directly, so that loot lands under Inventory (unattributed). Loot from kills is unchanged and can't be counted twice.
  • The GE panel no longer calls every sale a loss. A sell offer was always drawn red with a down arrow — the colour meant "this is a sell", not "you lost money" — so selling at your listed price looked exactly like a disaster. Direction is now neutral, and red/green means what it means everywhere else in the plugin: your real profit or loss on the flip, net of tax, updating as the offer fills. Items you never bought on the GE show no profit figure, since their value already counted as loot when you picked them up.
  • Gear with a cosmetic override now counts as owned. An imbued god cape wearing the deadman cosmetic didn't register as the cape you own, so the optimiser kept recommending the plain Mage Arena 1 cape sitting next to it. Cosmetic and charged suffixes now credit the real item.
  • Twinflame staff and Harmonised nightmare staff cast at their true speed. Both were scored at the standard cast speed, and the Twinflame's second hit wasn't modelled at all — so the staff ranked spells against each other wrongly, showing Fire Surge above Fire Wave when the opposite is true with a Twinflame equipped.
  • Six weapon passives that silently skewed every ranking. Each was simply absent from the maths, so the weapon looked mediocre exactly where it is best:
    • Scythe of Vitur hits up to three times by target size, each hit half the last — it was scored as a single hit, so it ranked far below its real DPS at the large bosses it is BiS at.
    • Colossal blade gains flat max hit with target size, worth 20–30% on multi‑tile bosses.
    • Keris partisan family deals +33% to Kalphites and Scarabites (with a 1/51 triple hit) — enough to flip Kalphite Queen rankings. The of amascut variant correctly gets +15% rather than +33%.
    • Tonalztics of Ralos fires two independent rolls when charged; modelling one roughly halved its DPS. Uncharged, it correctly hits once for 0–75%.
    • Craw's bow, Viggora's chainmace and Thammaron's sceptre — plus their Webweaver / Ursine / Accursed upgrades — gain +50% accuracy and damage against anything in the Wilderness while charged with ether. Without it they looked ordinary at exactly the wilderness bosses they are made for.
    • Crystal armour with a crystal bow or Bow of Faerdhinen is a set effect (+15% damage, +30% accuracy) that isn't in the per‑piece stats, so BOFA read materially weaker than it is.
  • Monsters that cap or reduce your damage are modelled. Corporeal Beast halves what non‑corpbane weapons deal, The Hueycoatl's tail caps each hit, and Verzik's first phase re‑rolls anything over its ceiling — all three previously scored as though they hit normally.
  • The Wilderness now knows which monsters are in it. The set behind those +50% revenant bonuses grew from 10 variants to 34, adding Fire giants in the Deep Wilderness Dungeon, the Wilderness God Wars Dungeon spiritual mages/rangers/warriors and Aviansies, and more. Two monsters that only sound like Wilderness spawns — the Earth Warrior Champion and the bandit champion from The Feud — no longer wrongly grant the bonus.
  • Powered sceptres attack with their own spell. Thammaron's and Accursed sceptre were scored as if casting from your spellbook rather than using their built‑in attack.
  • Equipment stats refreshed from the live game. Bundled gear data is regenerated from the current OSRS cache, so bonuses match what the game actually uses — including a corrected ranged‑strength value on Pegasian boots that the previous extraction had been reading a point low.
0.2.0 — Smarter gear, per‑monster

✨ New

  • 🎯 Knows each monster's requirements. Recommends and pins the weapons, ammunition, styles and special items a target actually needs — a mirror / V's shield for basilisks, Insulated boots for Rune dragons — with clear warnings for gear a monster is immune to, so the "best setup" is one that can really land hits.
  • 🧠 Smarter optimiser. Now factors in combat style, weapon‑compatible ammunition, your player level, shield compatibility and an expensive‑item risk cap — so it never suggests gear you can't use, can't afford, or shouldn't take into danger.
  • 💸 Budget & faster picks. Set a GP budget for the cheapest DPS boost; picking a target auto‑runs Find Best and auto‑selects your strongest style, with owned‑vs‑buy items colour‑coded at a glance.
  • 🏦 Highlights upgrades in your bank. After Find Best, the recommended pieces are highlighted in your bank, so you can grab the exact swap without hunting for item names.
  • 🎨 Redesigned gear controls. New layout for the buttons, budget display, style selection and optimiser previews — green Find Best / red Reset, a tidy 2‑column style grid and a clearer budget / risk block.
  • 📊 Slayer & Agility aware. Gear snapshots now capture your Slayer and Agility levels alongside your combat stats.

🔧 Fixed

  • Better matching for monsters with variant names (e.g. Kurask (Normal)), so requirements always resolve.
  • No more duplicate economic updates within the same game tick — session numbers stay accurate.
  • Smarter handling of two‑handed weapons and of slots that don't change your DPS.
  • Only the weapon a monster can't be hurt by is crossed out now — not your whole setup.
  • Bank highlights no longer flicker or reappear when the OSPulse panel is closed.
  • Plays nicely with Bank Tag Layouts, and the suggested‑swap labels no longer clip on the right.
Older versions
  • 0.1.1 — Fish barrel: caught fish count as loot the moment they're stored, and emptying at a bank or deposit box stays accurate (no double-count, no drop); full-barrel overflow catches now count as loot. Fishing bait and feathers count as supplies. Depositing any item at a bank deposit box is treated as banking, so it's never booked as a loss.
  • 0.1.0 — Initial release: gear DPS / max-hit calculator and optimiser, banking-aware session profit, loot feed, net worth, XP tracking and Grand Exchange flip P&L.

Credits & license

Built on the RuneLite client API, with a UI pattern adapted from its XP Tracker plugin. Combat/monster data lineage traces to weirdgloop/osrs-dps-calc and the OSRS Wiki; equipment stats are derived clean‑room from the game cache. Full attribution in NOTICE.

BSD‑2‑Clause — see LICENSE.

About

Gear DPS and max-hit calculator plus a banking-aware profit, loot and XP tracker.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages