A strictly read-only navigation overlay for Path of Exile 2 โ it shows you where to go, and never touches your game.
The green line is your route to the next objective. The legend names what matters โ bosses, transitions, even a Support Gem memorial. You still drive.
You attach it, it reads the game's map out of memory, and it draws a radar + a route line to wherever you're headed. No more squinting at the minimap or alt-tabbing to a wiki โ the path is on your screen. And because it's a focused, community-safe fork of Sikaka/POE2Radar, it deliberately strips everything that could get you flagged.
It's the single biggest way to help the project get found and keep getting built โ one click, costs nothing, and genuinely means a lot. ๐
POE2GPS does three things never โ and an automated compliance gate fails the build if any of them sneak back in:
| ๐ซ Never | โ Instead |
|---|---|
Sends input to the game (no SendInput, no auto-flask, no automation) |
Just draws โ you press every key yourself |
Writes to / injects into the game (no WriteProcessMemory, no byte-patching) |
Opens the game read-only (PROCESS_VM_READ) |
| Phones home (no poe.ninja pricing, no telemetry) | Makes one update check + opt-out-able silent auto-update, from github.com/luther-rotmg/POE2GPS only (HTTPS, SHA-256 verified); no telemetry, no pricing โ see โ๏ธ Settings โ Auto-Update (Silent / Notify only / Off). Overlay.old.exe is kept for one generation as a manual rollback. |
Honest note on risk. Reading another process's memory is a gray area โ GGG has long been agnostic toward passive read-only overlays, but it's tolerated, not blessed. POE2GPS removes the categories GGG explicitly prohibits (input automation, process modification) to sit in the lowest-risk bucket. It's a personal/educational tool; you're responsible for how you use it. SmartScreen/AV may warn on an unsigned memory-reading exe โ expected. For the strongest setup, run PoE2 as a limited Windows user that's denied access to the POE2GPS folder โ step-by-step below.
The single best thing you can do for safety: run PoE2 under a separate, limited (Standard) Windows user that is denied all access to the POE2GPS folder. The game โ and anything running inside it โ then literally cannot read your overlay's files or memory, while POE2GPS (running as your normal admin account) can still read the game. Pure Windows account isolation; it touches nothing in the game.
Why it works: a process can only read what its user account is allowed to. The game runs as a low-privilege account that's (a) blocked from the tool folder by an explicit Deny, and (b) too low-privilege to read your admin-level overlay's memory. Your overlay runs as you (admin), which can still read the game. A one-way mirror.
One-time setup โ open Command Prompt as Administrator, then:
1. Create a limited user for the game (it's a Standard, non-admin user by default โ choose any password, you'll use it to launch):
net user PoEPlayer * /addThe * makes it prompt for a password (typed hidden, twice). GUI alternative: Settings โ Accounts โ Other users โ Add account โ "I don't have this person's sign-in info" โ "Add a user without a Microsoft account".
2. Deny that user every permission on the POE2GPS folder (use your real unzip path):
icacls "C:\Games\POE2GPS" /deny "PoEPlayer:(OI)(CI)F"(OI)(CI) applies it to all files + subfolders, F is Full control, and /deny is an explicit block that overrides any inherited "allow." Verify it stuck: run icacls "C:\Games\POE2GPS" and look for a (DENY) line for PoEPlayer.
3. Launch PoE2 as that limited user:
- Standalone client โ make a shortcut whose Target is (the full
runas.exepath is the reliable form inside a shortcut):C:\Windows\System32\runas.exe /user:PoEPlayer /savecred "C:\Path\To\PathOfExile.exe"/savecredcaches the password after the first launch so it won't ask again. Prefer to type it every time? Just drop/savecred. - Steam โ Steam runs only one instance per PC, so you must fully exit your own Steam first (right-click the tray icon โ Exit), then start it as the limited user with a shortcut. Set the shortcut Target to the line matching your Steam drive:
C:\Windows\System32\runas.exe /user:PoEPlayer /savecred "C:\Program Files (x86)\Steam\steam.exe"The first run does two one-time things: Windows asks forC:\Windows\System32\runas.exe /user:PoEPlayer /savecred "D:\Steam\steam.exe"PoEPlayer's password (/savecredremembers it afterward), and Steam makes you log in again โ it's a brand-new Steam profile under the limited user (your Steam password + Steam Guard; tick "remember me" so it sticks). After that it's one click: the shortcut opens Steam asPoEPlayer, and you launch PoE2 from there. (Heads-up: only the POE2GPS folder gets the Deny โPoEPlayerstill needs to read the Steam/game files, which it can by default. If Steam sits inProgram Filesand won't update as a standard user, install it to a plain folder likeD:\Steam, or grantPoEPlayerModify on the Steam folder. The standalone client avoids all of this.)
4. Run POE2GPS as your normal account โ Overlay.exe as Administrator, exactly as Download says. Admin reads the game fine; the game can't read back.
Pair this with POE2GPS's built-in stealth (random process name, hidden from screen capture) and you're in the lowest-risk bucket a read-only overlay can sit in. (Summarized + syntax-verified from the community Run PoE as Limited User guide.)
Run the entire radar from your controller. POE2GPS maps navigation onto the two stick-clicks that do nothing in PoE2 combat โ so you steer the GPS without ever lifting your thumbs off the sticks:
| Button | What it does |
|---|---|
| R3 (click right stick) | next target โ step down the radar menu |
| L3 (click left stick) | previous target โ step up the menu |
| hold R3 / L3 | fast-cycle โ rip through the whole list |
| L3 + R3 (together) | open / close the nav-menu list |
Pick your next objective, fast-cycle to the boss across the zone, pop the menu open โ all from the pad. Built for couch & handheld play (Steam Deck, big-screen, lounge setups). And like everything here it's 100% read-only: the controller is read, never driven โ POE2GPS sends nothing to the game, ever.
- ๐ฐ๏ธ Entity radar โ enemies, NPCs, chests, transitions, players, and POIs; optional world-space HP bars; dangerous rare/magic mods flagged.
- ๐ฉธ Affix nameplates (opt-in, off by default) โ floats an elite monster's dangerous modifiers above its head, on screen, no hover โ color-coded by danger (Deadly ยท Notable ยท Minor) from a curated masterlist (anything new is auto-named). Filter by tier threshold, add per-affix Always-show / Hide, or Display all; choose which rarities. Read-only โ reads the mods PoE2 already exposes and draws text.
- ๐งฑ Terrain + map overlay โ the walkable-terrain mask and entity dots, projected onto the in-game map.
- ๐ Tile landmarks โ boss arenas, transitions, reward rooms, surfaced the moment you enter a zone, with community-curated names.
- ๐งญ Navigation โ pick any landmark/POI/entity and get a smoothed A* route drawn to it (on the map, or as world waypoints). Multi-select, each its own color. Cycle the active target hands-free โ keyboard (
Ctrl+Alt+]/[) or fully from your controller (R3/L3 to step, hold to fast-cycle). A saved auto-nav pattern list re-selects matching targets on zone entry. Draw-only โ never sends input to the game. - ๐ Atlas overlay + route planning โ content icons stamped on fogged nodes (see a tile's Breach/Boss/Essence/Expedition/โฆ before you reveal it), built-in Map Targets highlighted out of the box (Citadels ยท Halls ยท key uniques), colour groups, hide-completed / accessible filters, a Type filter axis, off-screen arrows to tracked maps, and shortest-hop auto-routes with directional chevrons.
- ๐ Dynasty-support maps (opt-in) โ highlight the endgame maps whose Anomaly bosses drop Lineage/Dynasty support gems (Sealed Vault, Sacred Reservoir, Derelict Mansion, The Jade Isles), each labeled with the gems it drops โ full Citadel-style ring + arrow + track. Toggle in Settings; a dashboard reference card lists every map ยท boss ยท gems.
- ๐ท๏ธ Loot & reward labels (opt-in) โ name labels over on-ground drops by category (Uniques, Currency, Runes, Soul Cores, Uncut Gems, Essences, and more), plus Ritual / Runeforge reward overlays. Names only โ no economy values.
- ๐๏ธ Monolith reward panel (off by default) โ a dedicated overlay panel listing nearby monolith rewards, color-graded by the best reward offered (configurable Exalted threshold), with a hide-collected toggle.
- ๐งช Objective Director (experimental, off by default) โ auto-routes you through a zone's objectives in priority order: seasonal event โ side bosses โ side zones โ exit. Still maturing โ roadmap below.
- ๐ฉ Campaign GPS (experimental, off by default) โ cross-zone campaign navigation: routes you to the next critical-path zone's exit from a built-in zone-order table, shown on the overlay and the Director's Zone Plan. A quest-memory precision layer is in the works.
- ๐บ๏ธ Entity Atlas โ name every entity the radar doesn't recognize (your names show on the radar instantly), classify the notable ones from a rich label set, and export/import shareable packs โ or Contribute your finds to the whole community in one click. Submitted names get folded into the built-in table each release โ a community effort to map the whole game.
- โญ God-Roll Detector (experimental, off by default) โ scores your inventory items 0โ100 and stars the god rolls, with meta-derived starter weights distilled from the current ladder so it works the moment you switch it on. One-click stat-id chips to tune what you value, rarity-colored items, per-affix tier (T#/N) + % of max roll (so you see how good a roll is, not just that the stat matters), and a greenโred score heatmap grid. Dashboard Gear tab; reads inventory only while enabled.
- ๐จ Customizable icons & display rules โ per-rule shape/color/size, editable live; drop your own
*.svgintoicons/. - ๐ Audio alerts (off by default) โ short, distinct tones for the moments that matter: a rare/unique monster or a league mechanic (Strongbox ยท Shrine ยท Breach ยท Expedition ยท Ritual ยท Essence) comes into range, a unique item hits the ground, or you reach your active objective. Each event toggles independently from a card at the top of Settings, with a volume slider and a per-event tone picker. Output only โ never sends input to the game.
- ๐ Community presets โ share your whole radar look (display rules + icon/HP-bar/terrain styles) as a copy-paste share-code or a
.poe2presetfile; import one to instantly adopt someone else's setup. Ships with built-in starter presets (High-contrast ยท Minimal ยท Boss & unique hunter), and you can save, name, and manage your own from the dashboard. A backup of your current look is saved automatically before any import. - โก๏ธ Off-screen entity arrows (on by default โ seeded for Uniques + Bosses) โ when a notable monster is off the edge of your screen, an arrow at the window border points toward it, colour-matched to its display rule (flip the "off-screen arrow" checkbox on any rule to include it). Nearest-first, capped for readability. Read-only โ draws only, never sends input.
- โฑ๏ธ Session HUD (opt-in, off by default) โ a live run tracker: session + zone timers, zones visited, zones-per-hour pace, area name + level, a death counter (with a per-zone count), and v2 metrics โ kills by rarity (observed), maps/hr, and XP-efficiency (your level โ area level). New in this release: an XP/hour row with a time-to-next-level estimate, off by default โ enable in โ๏ธ Settings โ Session HUD โ Show XP rate. Rolling window is user-tunable from 1 to 60 minutes (default 5); while the window fills (roughly the first 5 minutes), the row shows a session-average fallback rate so you're not staring at a blank until the ring catches up. Respects Exclude Towns From Pace so hideout time doesn't drag the rate, and prints a
(Nm to L##)estimate off the built-in level curve when it has enough samples. Zero-cost when off: with the row disabled, no XP accessor call fires per tick. Each metric toggles independently and anchors to any screen corner; Ctrl+Alt+R resets the counters. - ๐งญ Zone summary (opt-in, off by default) โ a compact overlay panel with live counts for the current zone: rares, uniques, chests, exits, and any nearby league mechanics (Strongboxes ยท Shrines ยท Breach ยท Expedition ยท Ritual ยท Essence). Anchor it to any corner; its toggle sits prominently at the top of Settings.
- ๐ฎ Preload Alert (opt-in, off by default ยท experimental) โ on zone entry, reads the asset list the game just loaded and surfaces the notable content in the zone โ pinnacle bosses, league encounters (Breach ยท Ritual ยท Expedition ยท Abyss ยท Incursion ยท Delirium), Rogue/Conqueror exiles, valuable chests โ as a tier-coloured corner panel, with an optional audio cue. A self-tuning noise filter learns and suppresses the always-loaded base assets so only this zone's content shows, and a Diagnostic view lets you tune it. New in v0.23: click the caret on the panel title to collapse; boss and unique rows disappear from the panel automatically the moment the entity spawns into the world. Read-only โ only reads what the game already loaded, never sends input.
- ๐ก Campaign Probe (opt-out, on by default) โ anonymized zone-traversal + boss / level-up / passive events buffered locally at
%APPDATA%\poe2gps\campaign_traces\and auto-uploaded on every Contribute click, so the community campaign atlas gets better without users having to think about it. Off with โ๏ธ Settings โ Enable Campaign Probe (both collection and upload gate on it). Install-ID resets on demand from the dashboard. - ๐ฉบ Patch-resilience & self-healing โ starts even if the game isn't running yet and self-connects once it launches, re-attaches after a game restart, and self-detects when a PoE2 patch shifts the offsets. A health pill in the dashboard masthead + a Settings Status panel show the live read-state, and a Force re-scan button re-detects the game after a patch without a restart. An optional startup update check (the only request the overlay makes beyond your own machine โ off-switchable in Settings) flags new releases.
- ๐ต๏ธ Stealth / low footprint โ relaunches under a random-named hardlink, randomized window class/title, neutral assembly name + binary metadata, character name never exposed, release binary string-scrubbed, and hidden from screen capture (screenshots / OBS / share-screen) by default โ toggle off in Settings if you want to capture the overlay itself.
- ๐ฅ๏ธ Web dashboard (
http://localhost:7777, or F12) โ click any entity/landmark to navigate to it; tune radar/icons/atlas. A first-run quick-start card (with one-click recommended setup) gets you going, a settings search keeps the options navigable, and a Keybinds editor lets you remap the hotkeys. Local-only, loopback-gated. - ๐ฅ OBS overlay โ a transparent, stream-styled page at
localhost:7777/obsyou add as a Browser Source in OBS; composites your session stats (timers ยท area ยท kills ยท maps/hr ยท XP-eff ยท objective) over gameplay. Pick widgets + theme in Settings. No new reads. - ๐ฎ Discord Rich Presence (opt-in, off by default) โ show your PoE2 run in your Discord status with your own templates (
{area} {level} {zones} {mapshr} {kills} {xpeff}) + an elapsed timer, under a neutral app identity. Publishes only to your local Discord; runs on its own thread. Paste a Discord Client ID in Settings to activate. Read-only โ never touches game input.
Grab the latest POE2GPS-vX.Y.Z-win-x64.zip from the Releases page, unzip, and run Overlay.exe as Administrator (memory reads require it) with PoE2 already running. Self-contained โ no .NET install needed. (It relaunches itself once under a random name โ that's the process-randomization feature, not malware.) On launch POE2GPS may update itself from our GitHub Releases; set Auto-Update to 'Notify only' or 'Off' in the dashboard to disable.
| Key | Action |
|---|---|
| F12 | open the web dashboard |
| ๐ฎ L3 + R3 / Ctrl + Alt + M | toggle the top-left nav-menu list |
| ๐ฎ R3 / L3 (or Ctrl + Alt + ] / [) | cycle active nav target next / prev |
| ๐ฎ hold R3 / L3 | fast-cycle through targets (auto-repeat) |
| Ctrl + Alt + 1โ9 / 0 | jump to nav target slot / clear |
| Ctrl + Alt + R | reset the Session HUD counters |
| F6 / F7 | route to nearest landmark/POI / clear routes |
| F10 | (Atlas open) inspect hovered tile, set route start/end |
| F9 | quit (or right-click tray โ Exit) |
(All hotkeys are read-only and fire only while PoE2 is focused โ keys are read, never sent to the game. Remap any of them from the dashboard โ Settings โ Keybinds. No F8 โ auto-flask was removed on purpose.)
Requires the .NET 10 SDK, Windows x64.
dotnet build POE2Radar.slnx
# then, with PoE2 running and you in a zone (as Administrator):
src\POE2Radar.Overlay\bin\Debug\net10.0-windows\Overlay.exeThe three invariants above aren't just a promise โ scripts/compliance-gate.ps1 scans the shipped source and fails the build if any input-emission or process-write API (SendInput, WriteProcessMemory, VirtualProtectEx, CreateRemoteThread, โฆ) appears, or if OpenProcess ever asks for write access. It runs in CI on every push/PR, and locally:
powershell -ExecutionPolicy Bypass -File scripts/compliance-gate.ps1It also catches accidentally re-introducing removed code when merging upstream from Sikaka โ see docs/upstream-merge.md.
POE2GPS gets smarter the more players name the things the radar doesn't recognize yet โ and you can pitch in with one click, no setup and no account.
When you label an entity or POI in the Entity Atlas tab (dashboard โ F12), hit Contribute and your finds go straight to the shared community list:
- What's sent: only your discovered names + labels โ a map of game entity paths (e.g.
Metadata/Monsters/โฆ) to the friendly names and categories you picked. Never your character, account, position, or anything identifying. It's opt-in โ nothing leaves your machine until you click, and the first click asks you to confirm. - What happens next: the project's collector auto-filters junk (spam, gibberish, oversized, or anything that looks identifying) and files the clean submissions as reviewable GitHub issues. A maintainer approves the good ones, and each release they're folded into the built-in name table + label vocabulary โ so everyone's coverage ships to everyone. Over many releases, that's how we map the whole game.
- How to help: open the dashboard (F12) โ Entity Atlas โ give a few unnamed entities friendly names โ Contribute. That's the whole loop. ๐
- ๐ Full walkthrough: the Labeling & Contributing guide covers scan โ label โ contribute โ what it unlocks, step by step.
๐ฌ Questions, bug reports, or ideas for what to map next? Join the community on Discord.
The collector is a small open-source Cloudflare Worker (cloudflare-worker/); the GitHub token lives only as a server-side Worker secret โ never in the app. Forking POE2GPS? Point it at your own collector via the Contribute URL setting.
POE2GPS ships an opt-out campaign trace probe (default on). While you play the campaign, it writes an anonymized JSONL of your zone traversals โ zone enters, area transitions, boss encounters, checkpoints, waypoints, NPC dialogue starts, dialogue picks, quest reward picks, passive allocations, level-ups, deaths, and waypoint travel โ to a local file. Nothing uploads until you click Contribute.
What it captures (12 event types):
zone_entered, area_transition_used, boss_encountered, checkpoint_touched, waypoint_unlocked, player_death, waypoint_travel, npc_dialogue_started, npc_dialogue_option_selected, quest_reward_selected, passive_allocated, level_up. Every record carries a common envelope (ts_epoch_ms, install_uuid, boot_id, event_type, probe_capability, schema_version, act_hint, area_name). NPC / dialogue / reward text is sha256-hashed to 16 hex characters before it is written โ the raw strings never leave your machine.
Where the JSONL lives:
%APPDATA%\poe2gps\campaign_traces\<install_uuid>_<boot_epoch_ms>.jsonl โ one file per POE2GPS boot. Open it in any text editor and read every line yourself before sharing.
How to Contribute: Open the POE2GPS Dashboard โ Campaign panel โ Contribute trace. That posts the current boot's JSONL through the same sibling-route worker POE2GPS uses for atlas / buffs / preload contributions. The shared pool is public and consumed by POE2GPS's Campaign Director (and any tool that reads the public pool) to learn campaign routes from real play.
Turn it off:
Dashboard โ โ๏ธ Settings โ Campaign trace probe โ one click, effective immediately, zero writes when off. You can also Reset trace session id from Settings if you want a fresh install_uuid before contributing.
Onboarding toast โ the first time the probe is on and you open the Dashboard, POE2GPS shows a one-shot toast so you can find the toggle:
Campaign trace probe is on. Your zone traversals get logged to a local file (nothing uploads). One-click Contribute trace in the Campaign panel shares a session so POE2GPS's Campaign Director gets smarter with more players. The shared pool is public. Turn off in Settings โ Campaign trace probe. [Got it]
src/POE2Radar.Coreโ read-only memory plumbing (OpenProcessread-only +NtReadVirtualMemory), the PoE2 offset table, the live read layer, theStealth/RandomNamegenerator, and theCampaign/objective catalog + director.src/POE2Radar.Overlayโ the overlay.exe(Overlay.exe): attaches, AOB-resolves the game roots, runs the tick loop, renders the Direct2D overlay, plays the output-only audio cues, and serves the dashboard. Reads only.src/POE2Radar.Researchโ dev-time offset discovery tools. Never shipped; excluded from the gate.cloudflare-worker/โ the optional open-source community-name collector (auto-filter โ GitHub issue โ merge pipeline). Server-side only; never part of the shipped overlay.
PoE2 offsets drift with patches โ validated values live in Game/Poe2Offsets.cs; re-discover via the Research probes or pull updates from Sikaka.
The Objective Director is the headline work-in-progress. Zone-order Campaign GPS already ships (experimental). Next up: deep detection/cataloging of every relevant POI (seasonal events, passive-point upgrades, free skill/support gems), richer priority tiers, and a quest-memory precision layer โ reading your actual quest-completion state to sharpen Campaign GPS beyond its built-in zone-order table.
POE2GPS is free and open-source, and always will be โ the app, the community pool, and every feature stays on the free tier forever. No paywall. No "pro" version. No functionality behind a donation. What runs on coffee is the maintainer's time: chasing offset drifts every PoE2 patch, shipping new features, and answering issues. Every drop is one person's work against a game that changes its memory layout every patch โ and that time is what a Ko-fi tip buys directly.
If POE2GPS saved you a wipe, or a squint at the minimap, or an alt-tab to a wiki, and you want to send the next coffee โ
- Your name lands on the Supporters roll โ the card at the top of the dashboard's Settings tab (also in SUPPORTERS.md in this repo) โ with an optional short note about your role in the community.
- Ko-fi supporters get a code for optional cosmetic dashboard themes and an overlay supporter badge โ cosmetic only, base tool stays identical for everyone.
- Community roles + Discord recognition โ Ko-fi donations auto-assign a
โ Supporterrole in the POE2GPS Discord.
Totally optional โ a โญ on the repo and sharing it with your party help just as much.
Forked from Sikaka/POE2Radar (MIT); process-randomization adapted from NattKh/POE2Radar (MIT). Memory-layout research draws on GameHelper2 (not redistributed; only re-validated offsets recorded). See NOTICE.
Huge thanks to torx and Kaonashi for their reverse-engineering legwork, in-game testing, and tireless memory-capture work on the Expedition rumours research โ going dump after dump to help crack the game's layout. This project runs on exactly that kind of community effort. ๐
And thanks to Diamondsr for sharp bug reports, in-game testing, and running the diagnostics that pinpointed the Atlas and vitals issues. ๐๐
Thanks also to Sidefx and Verahsa for community feedback and continued testing help. ๐
MIT โ see LICENSE.