Help
PQ Companion reference.
Every feature, every prerequisite, and the gotchas worth knowing. New here? Start with the Quick Start and come back when you want detail.
Getting started
PQ Companion is a single Windows app that runs alongside Project Quarm. It does two things: reads your combat log file in real time, and reads JSON exports from Zeal. Everything else — the database, the overlays, the trigger engine — is built on top of those two inputs.
The minimum viable setup is three steps: install the app,
point it at your Project Quarm folder in Settings, and turn
on the in-game combat log with
/log on. That's enough for the database, DPS meter, spell timers,
NPC info overlay, and trigger engine to work. For the
spellbook, AAs, and inventory features, install Zeal too.
For step-by-step install, see the Quick Start.
Settings & data sources
Open Settings from the sidebar. You'll set up two paths and a name:
- Project Quarm folder — the directory containing
eqgame.exe. The app finds your combat log and.inifiles from here. - Character name
— used to pick the right log file
(
eqlog_<Character>_quarm.txt) and to tag Zeal exports per character. - Zeal folder (optional) — only needed if Zeal writes its exports somewhere other than the default. The app will detect this automatically in most cases.
The character switcher in the top-right lets you flip between any character with a Zeal export. The whole app — progression, inventory, spell checklist, to-dos — follows the active character.
Settings save automatically as you change them — there are no Save or Discard buttons to remember.
Master Volume
Settings has a master volume slider that scales every trigger sound, TTS utterance, event alert, and timer alert on top of each action's per-trigger volume — dampen everything together without losing the relative balance between individual triggers.
Accessibility
Settings is organized around a grouped side navigation, and an Accessibility section gathers high-contrast text mode, app-wide zoom, and the per-overlay font/zoom sliders (see the Overlay Dashboard section) in one place.
EQ client version
A status panel under Settings shows the
eqgame.exe version detected at your configured Project Quarm path.
Useful for confirming you patched after a server-side
update; the panel uses the file's FileVersion as the
primary signal so patch-day MD5 churn doesn't flip the
status to "unknown".
Zeal version & ExportOnCamp
When Zeal is installed, the app detects its version via
the crash-handler anchor and shows a soft warning if
you're below the minimum supported version — features
that depend on newer pipe events may not work until you
update. A separate warning fires if Zeal's
ExportOnCamp setting is disabled, since Spell Checklist, Inventory,
and AAs won't refresh after camping until that's turned
back on.
Navigation
A Settings → Navigation tab lets you hide and reorder the sidebar tabs, so you can trim the app down to just the features you use and put them in the order that suits how you play. You can also pin frequently-used nav items so they stay pinned to the top of the sidebar, above the rest of your tabs.
Log Backfill
Log Backfill lives in the Logs tab and walks your existing combat logs to populate history — combat, chat, loot, and the rest — for events that happened before you installed the app. It runs in the background with a progress bar along the bottom so you can keep using the app while it catches up, and a 30-day log trim keeps the log directory from growing without bound. The Logs tab also surfaces log and Zeal status toggles, wizard diagnostics, and notices when an expected log file is missing.
Danger zone: app reset
Settings → EQ Config Backups has a "Danger zone" for starting
over. Reset app data
clears your tracked data — characters, chat, loot, triggers,
tasks, notes, flags, combat history — but keeps your settings
and EQ folder path. Factory reset also clears settings and reopens first-time setup. Both
require typing RESET to confirm, and your old data is set aside for recovery
rather than deleted outright. Your EverQuest game files and
logs are never touched.
Moving to a new PC
Exporting your setup for another machine now imports in one "Import & restart" step instead of a multi-stage prompt. See the Backup & Restore section for the export side.
About
A Settings → About tab shows the app version and links out to the community Discord, the GitHub repository, the website, and the project's Ko-fi page if you'd like to support development.
Changelog & "What's New"
After an auto-update, a one-time popup lists every release since the version you last had open, with a "don't show this again" checkbox if you'd rather not see it. The full version history is always available in Settings → Changelog — the ten most recent releases are shown by default, with a "Show all" to page back through the rest.
Overlay Dashboard
The Overlays page is your one-stop view of the run. DPS meter, spell timers, NPC info, and trigger alerts all live in a single snap-grid dashboard so you can scan everything at once instead of hopping between tabs.
Drag any panel to move it, drag a corner to resize. The layout persists across sessions. Hit the lock toggle when you're happy with the arrangement so you don't bump it mid-fight.
Pop-out windows
Any panel can pop out as its own transparent, click-through, always-on-top window above the game — same data as the dashboard, just floating over the game. Each pop-out remembers its own size and position. Use the dashboard view at the desk and pop the panels you actually need on top of the game when you alt-tab in.
The dashboard toolbar's Manage overlays menu is the control panel for every window: show or hide each dashboard panel, pop a window out, and recenter it, all from one list — plus a Pop Out All button that opens every standalone overlay in one click (it flips to Close All Popouts once any are open).
For faster access without opening the dashboard at all, a quick pop-out-all-overlays toggle sits right in the sidebar next to the character switcher — one click pops out every dashboard-visible overlay, the same action as the dashboard's Pop Out All button.
Multiple monitors
PQ Companion is multi-monitor aware. The trigger alert overlay can span every monitor so an alert shows wherever you're looking, and pop-out windows drag freely from one screen to another — handy if you keep the game on one monitor and your overlays on a second. Each pop-out remembers which monitor it was on along with its size and position.
Lock behaviour per overlay
Each overlay's locked behaviour is configurable in Settings → Overlays. Interactive on hover (the default) keeps a locked overlay click-through, but hovering it temporarily disables passthrough so you can scroll the timer list, dismiss a row, or drag the header — moving the cursor away restores click-through. Click-through leaves only the title-bar buttons clickable, and Display only hides the title bar entirely for a pure HUD that never captures the mouse.
Position overlays & reset
A global Position overlays toggle (on the dashboard and in Settings → Overlays) makes every open overlay draggable at once regardless of its locked mode — the only way to move a Display-only overlay — then locks them back when you're done. Each overlay also has a one-click Reset position that recenters it on your primary monitor and unlocks it, the recovery path for a window that's drifted off-screen. In the Settings lock card, a per-overlay Pop out button opens that window so you can position it without leaving the page.
Fade when inactive
Optionally, an overlay's background, border, and title bar fade out a few seconds after the mouse leaves — timer bars and stats stay visible — and reappear when you hover. The fade delay is configurable.
Clickable links
Items, spells, and other entities shown across overlays — the NPC overlay, spawn-group members, lockout rows, spell-modifier source and focus spells — open directly in the database explorer when clicked, gated by a "Clickable Links in Overlays" toggle in Settings.
Per-overlay accessibility
Beyond the app-wide zoom, each pop-out overlay has its own font/zoom slider under the Accessibility section of Settings, so you can size an overlay independently of the main window — handy for a spell-timer pop-out you want larger than the DPS meter.
Tips
- Lock the dashboard before raids so a stray drag doesn't rearrange your layout.
- Use Pop Out All before a raid pull, then Close All Popouts when you're back at the desk.
Database Explorer
A searchable database of every item, spell, NPC, and zone in Project Quarm. Item and spell icons render inline; cross- references between scrolls and the spells they teach, NPC drops and source mobs, and zones and their NPC rosters are all click-through.
Global search
Press Ctrl + K from anywhere in the app for global search. Results group by type (items, spells, NPCs, zones) so you can jump straight to what you want.
Filters
- Items: race, class, level, slot, type, and stat thresholds (HP, mana, AC, resists, etc.).
- Spells: by class and level range. NPC-only spells are hidden by default.
- Zones: tabs for connected zones, drops, ground spawns, and forage. The Drops tab pages past its 500-item cap with a Show more button instead of truncating.
Item Compare
From an item's detail view, open Item Compare to line it up side-by-side against other items — or against whatever's currently equipped in that slot on your active character — so you can see exactly which stats change before you decide it's an upgrade.
Quests
Self-contained quest walkthroughs built into the app, so you don't have to tab out to a wiki to remember a turn-in order or which mob drops a piece.
Quests in the database explorer
A dedicated Quests section lists quest walkthroughs you can read step by step, with the items involved linked back to their database entries.
Quests tab on items
Open any item and its Quests tab shows every quest the item is part of — both the quests that reward it and the ones it gets turned in to — each linked back to the full walkthrough and the other items in the chain.
Quest-chain to-do lists
Multi-step keys and long reward chains are laid out as a to-do list so you can see the whole path at a glance and track what's left.
DPS Meter & Combat Log
Prerequisite: /log on in-game. The meter parses your combat log live.
Tracks per-fight and session-wide damage for you and your group. Each NPC is its own fight: a multi-mob pull archives one entry per mob with its own combatant list and DPS numbers, instead of pooling everything into one row. Pet and charm damage rolls up under the owner so a chanter's charmed pet doesn't show as a separate combatant; if a former charmed pet starts attacking you, the binding is dropped automatically.
All three damage sources Project Quarm exposes in the log are captured: melee, direct spell damage, and damage-over- time ticks. DoT ticks were added in v0.6 — necros, druids, and shamans now show their actual damage instead of just their nukes. Critical hits are tracked per combatant (visible on row hover and in clipboard exports) using Quarm's standalone "Scores a critical hit!" log line.
Three DPS modes
The DPS panel header has a rate-mode toggle that cycles through the three metrics that actually matter when you're ranking damage. The current mode shows in the toggle button and the column header so you always know which you're reading; the choice persists across sessions and syncs to the pop-out window.
- Personal (default) — total damage divided by your first-to-last span. Fair to the individual: a wizard who joined the fight late or a necro who ran OOM early isn't punished for time they weren't engaged. Matches EQLogParser's headline column. Best for judging a single player's class performance.
- Raid — total damage divided by the raid's first-to-last span (the same denominator for every combatant in the fight). Best for ranking players against each other in one fight: it charges late joiners and OOM casters for the time they weren't contributing, so "who actually killed this boss" is the answer.
- Encounter — total damage divided by the fight's wall-clock duration. Useful for comparing whole fights to each other ("did we kill this boss faster than last week?"). The metric the meter has always emitted.
Worked example
A 3-minute boss fight with three damage dealers. The Tank swings the whole time, the Wizard arrives 30 seconds late, the Necro runs OOM at the 2-minute mark.
| Player | Damage | Personal | Raid | Encounter |
|---|---|---|---|---|
| Tank | 100,000 | 555 | 555 | 555 |
| Wizard | 200,000 | 1,333 | 1,111 | 1,111 |
| Necro | 150,000 | 1,250 | 833 | 833 |
The Tank engaged for the full 180 s so all three numbers agree. The Wizard's Personal DPS divides by their 150 s window (200,000 ÷ 150) instead of the 180 s wall-clock — the late entry isn't held against them. Raid mode uses the 180 s raid span for everyone, so the Wizard's number matches the Encounter number here. The Necro stops casting at 120 s, so their Personal DPS is the highest of the three (150,000 ÷ 120) but their Raid contribution is third (150,000 ÷ 180).
Session breaks
The Combat Log and Combat History pages insert a "Session break" divider between fights separated by 120 seconds or more of inactivity. Long medding pauses, between-pull breaks, and "back from dinner" gaps become legible at a glance instead of running together. The divider is visual only — DPS calculations, fight ordering, and the data behind everything are unaffected.
Per-class bar colors
Combatant bars on the DPS panel (and rows on the Combat
History page) are colored by class — Cleric blue, Warrior
red, Necro purple, and so on. Class is resolved server-side
from your /who history, with the active character's stored class used for
You, so pets
automatically inherit their owner's color and unfamiliar
combatants fall back to an Unknown swatch. The palette
lives under Settings → DPS Class Colors — hex inputs plus native color pickers per class, with
per-row and global reset to defaults if you want to start
over.
Sharing fights
One-click copy of any fight or session summary to the
clipboard, formatted for /gu and /tell. The current DPS mode is included in the header so
recipients know which metric they're reading. Click any
combatant row to expand their breakdown (hit count, max
hit, crits) before copying.
Combat Log vs Combat History
The Combat Log page is the live, in-memory view of the current session — the last 20 fights, updated in real time. The Combat History page is the persistent archive of every fight you've recorded, with date-range and per-character filters. See the next section for full detail.
The parse survives zoning and death
Zoning or dying no longer wipes your active parse. A fight only ends when the mob dies, after a configurable inactivity timeout (Settings › Combat, raid encounters get a higher floor), or when you end it yourself with the discard button — which clears the live meter but still archives the fight to Combat History. Return to a mob you left mid-fight and the same fight picks back up instead of starting a new one.
Combat History
Prerequisite: /log on. Fights are saved automatically as you encounter them —
no manual export step.
Every archived fight is written to a local SQLite database
(~/.pq-companion/user.db) so the in-memory last-20 ring buffer is no longer the
only record. Re-open a fight from last week to grab a
parse for a guild post, browse a raid night by zone, or
dig up the parse from that one Naggy attempt that mattered
— the data sticks around.
Filtering
The header has dropdowns and inputs for the four most common filters:
- NPC name (substring, case-insensitive) — find every fight against "Naggy", every Frenzied Ghoul, etc.
- Character dropdown — populated from the characters that actually appear in your saved fights, so there's no guessing at spelling.
- Zone dropdown — same: only zones with saved fights show up.
- Date range with one-click presets: Last 24h, Last 7d (default), Last 30d, All, or Custom with date pickers. Preset clicks apply immediately; the other filters apply on Enter or the Apply button.
Click any row to expand the full combatant and healer breakdown for that fight. Per-row delete and a clear-all button live in the header — both pop a themed confirmation before destroying anything.
Retention
Saved fights are pruned after 30 days by default — enough
to cover a typical week of raiding without the database
growing without bound. The retention window is configurable
in config.yaml under
combat.retention_days: set a higher number to keep fights longer, or
-1 to disable pruning entirely. Pruning runs once at startup
and once per hour while the app is open.
Storage size
A fight is typically 1–10 KB. A heavy week of raiding produces a few thousand fights at most — single-digit megabytes total. SQLite's WAL journal keeps writes non-blocking even when the rest of the app is touching the same database for triggers, character data, and backups.
Threat Meter
Prerequisite: /log on.
A personal, per-mob hate estimator built entirely from your own combat log — no client hooks, no party-wide data. It watches the things you do that generate aggro and keeps a running hate total for each mob you're fighting, so you can see when you're climbing toward the top of a mob's list before you actually rip it off the tank.
What it counts
Hate is accumulated from the damage you deal, the instant aggro of hate-generating spells, the standard hate every cast carries, healing done, and the smaller adjustments around misses — then scaled by any hate-modifying buffs you have running. Feign death and your own death reset your hate to zero the way the server does, so the estimate tracks the real fight rather than drifting.
Because it's modelled from your log lines, the meter only knows your own hate — it can't see what the tank or the rest of the group is generating. Treat it as a personal "how hot am I right now" gauge, not an absolute raid-wide aggro table.
Live rate
Each mob card shows a live hate-per-second rate measured over a rolling window on a receive clock, so a burst of nukes reads as a spike you can feel in the moment and then settles as the window moves on. It's the early-warning signal that you're pulling ahead of the tank's threat generation.
Solo vs. Raid mode
A Solo/Raid toggle switches how the estimate models taunt: Raid mode drops the default solo tank boost, registers hate-modifying buffs cast on you by other players, and detects successful taunt emotes, so the numbers stay meaningful outside small-group play. Raid mode ships on by default; its settings live under Settings › Overlays.
Where it lives
The Threat Meter is a first-class panel on the Overlays dashboard with its own toggle, and pops out as its own click-through transparent window to float over the game next to the DPS meter.
Spell Timers
Prerequisite: /log on.
Tick-accurate countdown bars for every buff, debuff, mez, stun, and DoT. Driven directly from the combat log and keyed per spell-and-target, so casting Visions of Grandeur on three different group members produces three separate timers. Durations are extended automatically by the focus items and AAs your character actually has equipped — pulled from your latest Zeal export.
Buffs vs detrimentals
Buffs and detrimentals get their own overlay windows so you can put the bar you actually need to react to in your line of sight. Each row shows the target name (when it isn't you) and has a small dismiss × to clear that single timer when you know it's gone; the header eraser still bulk-clears the lot. Timers auto-cancel on resist, fade, zone, or death.
The buff overlay header has a sort-mode toggle: remaining (default) puts the soonest-to-expire on top, while recent pins newly-cast buffs to the top and freezes their order so the list stops jumping around as time ticks down. The choice syncs between the dashboard panel and the standalone pop-out window.
Tracking mode
Auto (default) creates a timer for every recognised spell landing — the full firehose. Triggers only shows just the spells you've curated through trigger packs or custom triggers, for a focused overlay instead of full auto-coverage.
Tracking scope
- Self only — buffs landing on you, nothing else.
- Cast by me (default) — also includes anything you cast on others, without the noise of other players buffing each other.
- Anyone — every recognised land, useful for seeing another chanter's debuff on the raid mob.
The optional Filter buffs to my class toggle drops buffs your class can't cast (paladin Spiritual Purity, shaman Talisman, bard songs) so an enchanter's overlay isn't cluttered with raid buffs from other classes.
Display thresholds
Hide overlay rows whose remaining time exceeds a configured
threshold (per-category for buffs and detrimentals, with
per-trigger overrides). Set to 0 to always show — useful for keeping long-duration raid
buffs out of view until they're close to expiring.
Audio alerts
Configurable audio and TTS alerts fire when a timer's remaining time crosses thresholds you set (e.g. 30 s left, 10 s left). Triggers can also carry their own per-trigger "fading soon" alerts — handy for one-off cooldowns or specific mez/charm timers.
NPC Info Overlay
Prerequisite: /log on.
The moment you consider a mob, the overlay shows its level, class, HP (and max mana when it has any), resists, body type, faction, and special abilities — Summon, Unmezzable, Uncharmable, See Invis, Enrage, Flurry, and so on. Pulled straight from the database via your combat log, so it works for any mob the database knows about.
The overlay also auto-detects your target from melee and
spell events, so it stays useful even if you don't
explicitly /con. If you target a corpse, the overlay resolves back to the
underlying NPC so the panel stays useful for loot calls
after the kill.
Resists and special abilities
Resists are shown in EQ convention order — MR / CR / FR / DR / PR — and colour-coded so high resists stand out at a glance. Special abilities render as labelled badges (Summon, Mez Immune, Enrage with HP threshold, Flurry, etc.) rather than raw numeric codes. Multi-field entries like Rampage range arguments parse correctly.
Loot table
The overlay's on-demand loot table shows every item the NPC can drop with the database drop rate. Zone-wide drops — the shared Vex Thal pool, for example — surface on every NPC in the zone, labelled with the pool name so you know it isn't mob-specific.
Caster summary
For casting NPCs, the caster signature includes recast time, AE flag, and resist type for each known spell, alongside the spell itself — a fuller at-a-glance read of what to expect from an NPC caster than the name alone gives you.
Copy target stats
A copy button on the overlay puts the current target's stats on your clipboard, formatted to paste straight into EQ chat and capped so it fits the in-game input limit — handy for posting a mob's resists or HP to your group without typing it out by hand.
With Zeal
Zeal adds a live HP bar driven by pipe events (so you see the bar move as the mob takes damage), and a pet-owner badge that names the player a charmed or summoned pet belongs to.
Same-name disambiguation
When several mobs in a zone share a name, the overlay uses
the zone and your in-game position (via Zeal) to work out
which one you're actually looking at. If the target is
still ambiguous, the panel surfaces the full variant set so
you can see every same-name NPC and its stats instead of
guessing. The popped-out window handles the
#-prefixed same-name rows and their special abilities too.
NPC Respawn Timers
Prerequisite: /log on.
A transparent overlay that watches NPC deaths in your combat log and counts down to respawn, so you know exactly when a named or a contested camp is due back up. The countdown starts from the kill line the moment a mob dies — no manual timers to start or stop.
Quarm respawn rates
Project Quarm uses accelerated respawn rates compared with classic EverQuest, and the overlay applies that reduction automatically. The countdown reflects the timer on the server you're actually playing on, so you're not mentally subtracting from a classic respawn window.
Ready alerts
An optional audio or text-to-speech alert fires the moment a tracked mob's respawn timer is up, scoped to the zone you're currently in so you only hear about camps that matter where you are. DoT and swarm-kited kills count too — a mob that dies with no melee killing blow (a bard kiting a swarm, say) still starts its respawn timer.
Where it lives
The respawn overlay sits alongside the rest of the Overlay Dashboard and pops out as its own click-through transparent window, so you can float it over the game next to the DPS meter and spell timers.
CH Chain & Metronome
Prerequisite: /log on, plus your cleric chain calling its heals out loud in a
channel the log captures (raid, group, or the heal callout
channel your raid uses).
A pair of overlays for running and following a Complete Heal chain. The app watches for CH callouts in your log and tracks the rotation in real time — who's healing, who's up next, and whether the chain is keeping pace — so a cleric in the chain (or the person calling it) can see the whole rotation at a glance instead of counting in their head.
How it tracks the chain
CH-chain tracking is callout-driven: it reads the heal announcements your clerics post, not the spell mechanics themselves, so it works off the same log line everyone in the raid already sees. Each cast draws a cast-to-land bar so you can watch the heal travel from cast to landing, and the overlay measures the live cadence between casts and flags a stall when the next healer is late — the early warning that a chain is about to break. The default callout pattern is broad enough to catch the common raid conventions; tune it with a custom trigger if your raid uses an unusual format.
Possible-miss detection
Each chain callout's captured target is watched for the spell's own heal-landed confirmation text — Complete Healing's exact bystander line for Clerics. If that confirmation never arrives before the callout's cast window elapses, the timer is flagged and the bar renders red instead of silently expiring, surfacing fizzles, interrupts, and skipped casts that would otherwise slip by unnoticed. It's on by default for Clerics. Druids filling a chain slot can opt in to the same detection for Superior Healing (Settings › Overlays) — it's opt-in there because Superior Healing's confirmation line is shared with over a dozen unrelated heal spells, so watching it unconditionally risks a filler heal on the same tank masking an actual missed cast.
Personal CH metronome
The metronome overlay is the cleric's-eye view: a standalone window that paces your slot in the rotation, so you know exactly when to start casting to keep the cadence steady. Pop it out over the game like any other overlay. If the watched cleric misses a cast, the metronome keeps advancing by projecting off whichever other slot's callout is freshest, instead of stalling indefinitely.
Audio & TTS alerts
The metronome can fire an optional sound or spoken cue at two moments — countdown start and "cast now" — reusing the same sound/TTS picker as triggers (including Piper and Kokoro voices, see Custom Triggers & Alerts). Both cues are independently toggleable under Settings › Spell Timers › Metronome alerts, and fire whether or not either metronome overlay window is open.
Where it lives
Both the CH Chain panel and the CH Metronome are first-class dashboard panels with their own toggles in the Overlays view — switch them on only on the characters and fights where you need them, and pop either out as its own click-through window.
Character Progression
Prerequisite: Zeal installed and at least one export run on this character.
A full per-character workspace driven by Zeal exports. Switch characters with the global character switcher — every progression sub-tab follows the active character.
- Stats — base HP/Mana, stat caps, worn effects, and softcap AC. Base attributes show their base value and green AA bonus separately, with a tooltip explaining the source. When a piece of gear pushes a stat past your level cap, the panel shows exactly how far over cap you are instead of silently clamping the displayed number. A Tanking view splits avoidance from mitigation and folds in the mitigation softcap, melee hit chance, and tanking AAs.
- Gear — paper-doll view with bag and bank cards. Click any item for the full database entry.
- AAs — split into trained and available, with descriptions and cost-aware planning.
- Spell Modifiers — every focus and worn effect that's modifying your spells, in one tab.
- Live Buffs — the Stats page's buffs panel is now driven by the spell timer engine. Swap between raid-buff presets per character, confirm-on-edit, and remove individual buffs to keep the panel honest if you suspect a buff fell off off-screen.
- To-dos — per-character checklist with subtasks for goals (epic pieces, key quests, AA targets).
Spell Checklist
Prerequisite: Zeal spellbook export.
Cross-references every spell your class can learn against your Zeal-exported spellbook so you always know exactly which spells you still need to scribe. Filter by class and level range, narrow the list with the spell-name search box, and click any spell to jump to its full database entry. NPC-only and unobtainable spells are hidden by default, and a "Where to get it" button on each spell surfaces where it can be obtained.
Shopping-route planner
Tick the spells you want to pick up and hit Plan shopping route: the app works out an efficient vendor run that covers every selected spell with the fewest stops. It's a greedy set-cover over the merchants that sell each spell, made distance-aware so nearby vendors are preferred, with Druid and Wizard ports modelled as a Nexus hub. Route controls let you exclude specific spells, filter towns (handy for alignment-restricted characters), toggle a Plane of Knowledge stop, and set the start zone so the route begins where you actually are.
Spell Emote Customizer
Prerequisite: Developer mode — gated behind Settings › Developer › Flags, off by default.
Edit the client-visible chat emotes in your
spells_en.txt file from Settings › Developer › Spell Emotes, or inline on
the Spells page. Some spells share an identical emote — every
slow in the game says " yawns." on landing — which makes it
impossible to tell from a bystander message alone which spell
actually landed. The customizer lets you rewrite one spell's
emote to disambiguate it, or add an emote to a spell that ships
with none (Divine Aura has no cast-on-other text by default).
Survives server patches
Your edits are stored structurally in the app's own database,
not as a raw diff of the file. When Project Quarm patches and
republishes spells_en.txt, a watcher detects the external change and offers to
re-apply your customizations on top of the new file, with a
per-spell field-level diff so you can see exactly what
changed.
Import existing hand-edits
If you'd already been hand-editing spells_en.txt before trying this feature, the app detects those changes
the first time it runs and offers to import them — review each
one with a red/green diff, import all at once, or dismiss the
prompt for now. Nothing is silently adopted or overwritten.
Linked trigger warnings
Editing an emote can break a trigger whose regex pattern was written against the old text — the built-in Caustic Mist / Putrefy Flesh alert is a real example, since both spells share the same landed-on-other line. The customizer scans your triggers for any pattern that references the emote you're changing and proposes a diff to apply, one match at a time — it never rewrites a pattern automatically, since a trigger deliberately matching several spells that share an emote should stay untouched.
Spellsets
Prerequisite:
Zeal-exported _spellsets.ini.
Reads Zeal's _spellsets.ini and surfaces every saved spellset as a card with the
eight gems laid out vertically for quick scanning. Rename
sets inline, add and remove sets from inside the app, or
import another character's spellsets from their
.ini.
Imports are filtered: spells that are off-class for the active character or above the character's level are flagged and blocked at import, so you never end up with a set you can't actually load in-game.
Bandolier & Macro Editors
Prerequisite:
Zeal-exported inventory for the bandolier editor; your live
in-game .ini for the macro editor.
Two editors for the files Zeal already reads, right inside the app instead of hand-editing an .ini in a text editor.
Bandolier editor
Edit your weapon-swap bandolier sets with a guard that keeps you to gear you actually own and can equip — checked against class, race, and level — with item hover cards and a preferred storage bag per character.
Macro editor
The in-game macro grid mirrors EverQuest's real 2-column
social layout, with drag-to-rearrange slots and a one-click
reset back to the page 1 defaults. Edits write directly to
your character's live [Socials] section without touching the rest of the file. A built-in
/cancelbuff builder turns a buff-name search into ready-made
cancel-by-name macro lines, and macros can be copied from
one character to another. Moving or copying a macro between
pages uses an explicit picker instead of cross-page
drag-and-drop — pick the destination page and slot, then
choose Swap or
Replace if that
slot is already occupied.
Inventory Tracker
Prerequisite: Zeal inventory export.
All inventory across every character in one searchable view, with item icons everywhere — equipped, bags, bank, shared bank. Paper-doll layout with collapsible bag and bank cards. Click any item to open its full database entry in a modal without leaving the page — including a Characters tab on that entry listing every character who holds the item.
Cross-character search
Searching returns a flat result list spanning every character, so "who's holding that resist gear?" is a one-box question instead of a tab-by-tab hunt. By default the tracker is scoped to your imported characters; a toggle shows the rest.
Hide empty bags
Empty bag and bank cards are hidden by default — handy on cluttered characters where you only care about the slots that hold something. The toggle persists, so flip it off once and it stays off.
Rechargeable items
A dedicated Rechargeable Items section gathers the limited-charge clickies across your inventory into one place, and every limited-charge item shows its remaining charge count — so you can see at a glance which clickies are running low and need a recharge before the next raid.
Trader Tracker
Prerequisite: Zeal inventory exports while you're set up as a Bazaar trader.
Bazaar selling is a black box: you set up a trader, walk away, and come back to a pile of platinum with no idea what actually moved. Trader Tracker infers your sales by comparing your Trader's Satchel between inventory snapshots — anything that left the satchel between two exports is treated as a sale and reconciled against your trader price list, so you can see what sold and for how much.
How it captures
A background poller picks up new inventory exports automatically,
and you can also drop a manual /output inventory export in at any time. Each snapshot is diffed against the last,
so the sales list builds up over a selling session without any
manual bookkeeping.
Why the diff, not the price file
Your Bazaar price file is used only as a price reference — it records what you're asking, not what changed hands. The actual sale signal is the satchel going down by a stack between two snapshots, which is why an inventory export (not the price file) is what drives the tracker.
Keys & Keyring
Prerequisite:
Zeal — the Keyring tab needs /keys or inventory exports; the Key Tracker tab needs an
inventory export.
Two complementary tabs sit side-by-side on the Keys page, with Keyring as the default since it's the one you'll check before pulling a key-gated zone.
Keyring (live /keys snapshot)
The Keyring tab mirrors the in-game keyring for each
character. The data refreshes the moment a new /keys export lands. For keys that aren't in the keyring yet
(Plane of Time fragments, Vex Thal Shroud, and similar
one-off items), inventory is used as a fallback. Upgraded
key stages — e.g. a finished Vex Thal Shroud — are
automatically inferred as owning all the prerequisite
pieces, so you don't see ghost "missing" entries after a
combine.
Key Tracker (component quests)
The Key Tracker walks the component quest for every major raid key and ticks off the pieces you already own. Each key is modelled from the canonical quest path: Howling Stones uses the full Key to Charasis quest (with Hand of Glory as a separate internal-doors key), Arx Seru uses the 4-shard Praesertum quest, Veeshan's Peak uses the full Key of Veeshan quest, and Sleeper's Tomb accepts any one of the four Velious talismans. Sebilis is tracked from the Trakanon Idol quest. Vex Thal sub-shards use the correct Lucid Shard zone mappings so you know which zone to camp for the missing piece.
Intermediate combines are detected as you progress, so the list updates without manual ticking. Each held component shows the bag or bank slot it's sitting in, so you don't have to dig through inventory to find it.
Lockouts
Prerequisite: /log on, then run /sll in-game.
The Lockouts page turns your /sll output into live countdowns, so you always know when an
instance or flagged encounter is available to you again
instead of walking up to a locked zone. Both loot lockouts
and legacy lockouts are parsed and shown with the time
remaining.
Per character
Lockouts are stored per character, so each alt keeps its
own set of timers. Switch characters with the global
switcher and the list follows. Run /sll whenever you want to refresh — the countdowns update the
moment the new output lands in the log.
Absolute unlock time
Each active lockout shows the exact date and time it frees
up in your local timezone right next to the live countdown
(e.g. 07/04 3:25 PM), so you can see exactly when something's available without
doing the math yourself. Hover the countdown for the full
date and time.
Faction Tracker
Prerequisite: /log on, and enable the Faction Tracker toggle on the hidden
Developer tab (Ctrl + Shift + D — see
Developer mode) — off by default.
EverQuest never logs a faction's absolute value or the exact
point amount a change moved it by, so this tracker builds the
closest thing to one from what actually is logged: every
"Your faction standing with X got better/worse" line, plus
every /con result. It uses the same "record everything encountered"
approach as the Lockout and Player trackers — no need to pin a
faction before it starts tracking; every faction you've ever
killed toward or considered gets a persisted tally
automatically.
Estimates, not exact values
The running better/worse tally gets a best-effort point
estimate whenever a change correlates to a resolved kill
(matched against the database's faction hit tables), and an
exact numeric delta when it correlates to a quest turn-in
(parsed from the quest script's own dialogue). Everything
else stays direction-only. A faction with no recorded
/con shows "Needs /con" — that's the prompt to set a baseline.
/con disposition bar
Each tracked faction shows a 9-segment bar spanning the full
disposition spectrum (scowls → ally) built from your most
recent /con reading. A reading taken while you had an illusion active is
flagged suspect, since illusions can shift how an NPC
considers you.
Pinning & search
Pinning a faction (search + star) is purely a display favorite — unpinning never deletes its tracked history. Searching surfaces any faction's known data whether pinned or not, even for a character other than the active one.
Log Backfill
Faction Tracker is included in Settings → Logs → Log Backfill, so existing /con history already in a character's log can seed a starting
baseline. Backfill only scans /con lines and keeps the most recent reading per faction — it
doesn't replay kill or quest history into the better/worse
counters, since a static log replay can't reconstruct the
buff-timer state (like an active illusion) needed to flag a
backfilled reading suspect. Re-running backfill is always
safe.
PoP Flagging Tracker
Prerequisite: /log on.
Planes of Power flagging is a maze of God flags, trial prerequisites, and multi-step key quests. This tracker turns it into a step-by-step checklist with an interactive dependency graph, so you always know what you have, what you need next, and what's blocking it.
Dependency graph
Each flag is classified and colour-coded by how you earn it — kill, turn-in, zone, or key — and locked steps stay visibly locked until their prerequisites are actually met. Any-of groups handle trials and keys with more than one valid path (like the six Plane of Justice trials) so you're never forced to complete every branch.
Seeding your progress
New to the tracker with flags already earned? Seed your starting state from a paste-in, or let the tracker pick up new progress automatically as kills happen in your combat log going forward.
Loot Tracker
Prerequisite: /log on.
A dedicated page that logs drops as they happen, building a running record of what came off which mob over a session. Instead of scrolling back through the combat log to remember what dropped, you get a clean, browsable list on its own page.
Click through to the source
Every logged drop is clickable in two directions: click the item to open its full database entry in a detail popup, or click the zone to jump straight to that zone in the Database Explorer. Handy for checking an unfamiliar drop's stats or seeing what else the zone holds, without leaving the page.
Wishlist
A per-character upgrade list. Star any item from the Database Explorer (or its detail modal) to add it; click the filled star again — and confirm — to remove it. Any wishlisted item is highlighted in the NPC overlay's loot table, so you spot an upgrade drop the moment you con the mob that carries it.
Sections view
The default view groups entries into one card per slot. Each card collapses with its + / − toggle or by clicking the header, and the drag-grip on the left of the header reorders the section list. The toolbar has Expand all / Collapse all buttons for quickly checking what's still on the list after a kill. Card order and collapse state persist per character.
All Items view
Toggle the toolbar to All Items for a flat list of every wishlisted item across slots, with free-form cross-slot drag for prioritising upgrades against each other. The same global ordering backs both views, so a reorder in either view is reflected in the other. Suggestions in the Gear Upgrade Finder can be starred straight onto this list.
Log alerts
A synthetic trigger can fire an alert the moment a wishlisted item shows up in your combat log — a drop, a loot message, anything mentioning the item name. The alert's configuration stays hidden until you turn on its master toggle, so it stays out of the way if you don't want it.
Gear Upgrade Finder
Prerequisite: a Zeal character export, so the app knows what you currently have equipped.
A per-character, per-slot upgrade scanner. It reads your worn gear and ranks the database for real upgrades in each slot, scoring candidates against the stats that actually help your class.
Cap-aware scoring
Scoring knows the difference between a stat that's already at its cap for your class and one that's still scaling, so it won't recommend a sidegrade that piles points into a stat you can't use any more of. HP, mana, and AC are scored uncapped; weapon DPS (ratio), worn ATK, and cap-aware haste are all factored in so melee offhands and haste pieces rank correctly.
Editable weights
The per-class stat weights are yours to tune, and they're saved per character — so a tank and a caster don't have to share one opinion of what "better" means.
Priority focus effects
Mark the focus effects you care about and matching items get a score boost and a badge, so the right clicky or focus piece wins the slot instead of a marginally-higher stat stick.
All-slots overview & wishlist
An all-slots overview surfaces the single best pick for every slot at once, and any suggestion stars straight onto that character's Wishlist. Planes of Power gear is hidden unless you've turned the PoP preview on in Settings.
Tradeskill Leveling & Recipes
Prerequisite: Zeal-exported tradeskill values for the Tradeskills tab; no Zeal export needed for the recipe browser or planner themselves.
The Recipes browser lets you look up any tradeskill combine, pin favourites, and see every recipe an item is used in from that item's own Tradeskills tab. The leveling planner builds on top of it: pick a tradeskill and a target skill, and it produces a staged, step-by-step plan using only recipes you can actually make.
Fastest vs. cheapest
Choose "fastest" for the fewest total combines, or "cheapest" for the least plat spent — the planner factors in the cost of any sub-combines you'd need to craft along the way, and warns you when a step crosses into a different tradeskill. Paths are derived entirely from the game database, so they stay accurate as recipes and trivials change.
Success chances & skill-ups
Every recipe view shows your live success and failure percentage from your actual skill and crafting-stat gear, including the trivial breakpoint where you can no longer fail and a skill-up chance estimate. Jewelcraft, Alchemy, and Poison Mastery AAs and Maelin Starpyre's skill-up buff are applied automatically. Race-locked cultural recipes are flagged in both the browser and the planner so you're never steered into a combine your character's race can't perform.
Inventory status
Both the Recipes browser and the leveling planner flag each component of a combine as either already in your inventory or still missing, so you can see at a glance what you need to go gather before starting a crafting run.
Resist Calculator
Estimate a spell's chance to land on an NPC before you spend the cast and the mana. The calculator ports Project Quarm's actual resist check and enumerates the full roll distribution, so the number you get is a real land percentage from the server's own math — not a rule of thumb.
What it accounts for
The estimate factors in the target's resist for the spell's type, your level relative to the target, the spell's own resist modifier, and the era's resist rules. Binary spells (mez, charm, fear) are classified from the spell's first effect rather than a single database flag, so lines that resolve all-or-nothing are treated correctly instead of being shown a partial-resist curve. Immunities and the level caps on charm, mez, and fear are respected — if a target simply can't be affected, the calculator says so and why.
Picking a target
A searchable NPC picker pulls targets straight from the database, so you can check a specific named or trash mob by name. A resist-debuff section lists the tashes, malos, and other resist reducers with level-scaled magnitudes, so you can see how much a debuff shifts the odds before you commit a slot to it.
Charm Pet Finder
For the charm classes, the difference between a good pet and a great one is real DPS. Charm Pet Finder lists every charmable NPC in a zone for your class and charm spell, ranked by damage output, so you can walk into a camp already knowing which mob is worth charming.
DPS ranking & land chance
Candidates are ranked by estimated damage (derived from the mob's attack values and delay), and each carries the land chance for your charm against it — computed with the same resist engine as the Resist Calculator. A target above your charm spell's level cap is flagged with a warning, since no amount of resist luck will hold it.
Planning ahead
You can select a charm spell you can't cast yet to see what a future pet pool looks like, so the page doubles as a leveling plan for where to camp once the next charm comes online. Charm spells are gated by their real Quarm class levels rather than a curated guess.
Players Database
Prerequisite: /log on — every /who and /guildstat you run gets captured automatically.
A searchable, sortable database of every player you've
seen via /who and /guildstat — name, class, race, guild, last-seen zone, last-seen
level, plus a per-character level history. Captures
/who, /who all, /who guild, and /guildstat output. Filter by class, guild, or zone; click any row
for the full level progression.
Anonymous-aware
Anonymous and roleplay sightings don't overwrite class and level data you already had from a non-anonymous sighting — the row just gets a new last-seen timestamp, so going /anon doesn't erase a known player from your database.
Class title aliases
EQ titles like "Lord", "Necromancer Lord", or "Crusader" collapse into the right base class automatically, so a 50+ player isn't filed under a different class from their under-50 self.
Notes & PVP flag
Add your own free-text note to any player, and flag the ones
you'd rather steer clear of. When a flagged player turns up in a
/who, you get a sound and an on-screen warning so you notice before
they notice you. A global toggle disables the PVP warning if you
don't want it. Notes and flags are kept separate from sighting
data, so they survive a Clear-all.
Automatic interaction tracking
Tells and group joins are logged as interactions automatically,
so the people you actually play with surface alongside the
players you've only seen in /who.
Chat History
Prerequisite: /log on.
A searchable archive of your conversations, parsed straight from the log. It started as a Tell Tracker for direct player-to-player tells and grew into a full multi-channel chat log, so the back-and-forth you'd otherwise lose to the log scroll-back stays readable and organised.
Threads and channels
Tells render as conversation threads in a chat-style feed — each person you've talked to is their own thread, laid out like a messaging app rather than a flat log dump, so you can scroll back through who said what. Multiple channels are tracked, not just tells.
Per-character tabs
Conversations are kept per character with tabs across the top, so each alt's tells stay separate. A live backfill progress meter fills in history from your existing logs when you first open the page.
Custom Triggers & Alerts
Prerequisite: /log on.
A regex trigger engine for any log line. Each trigger fires one or more actions:
- On-screen text with draggable position and configurable font size.
- Local sound files via the native file picker, with per-action volume.
- Text-to-speech for hands-busy alerts.
- Copy to clipboard — drop matched text straight onto your clipboard, handy for capturing a name or a number to paste elsewhere.
Multiple patterns & GINA tokens
A single trigger can hold several regex patterns, each with its
own on/off toggle, so different log lines that mean the same
thing all drive one alert. Patterns understand GINA-style
{c} (your character name) and {target} tokens, so shared community triggers work without rewriting
them, and any regex capture group can be substituted into the
alert text.
Capturing the target name
A capture group — say, the name of the mob you just mezzed — can flow straight into both the alert text and the timer the trigger starts, so the bar on your buff or detrimental overlay is labelled with the actual target instead of a generic spell name. Per-pattern timer overrides let each pattern start its own capture-keyed timer.
Custom categories
Organise triggers into your own categories and drag to reorder both the categories and the triggers inside them. Triggers that came from a pack keep a pack-origin tag even after you move them, so you always know where one came from. An Export button next to rename/delete on each category turns just that category into its own shareable trigger pack — no need to export everything to hand a guild your "Raid Triggers" category.
Alert text style
Customise the on-screen alert text — colour, glow, font, size, and left/center/right text alignment — with a positioning card that doubles as a live preview, so you can see exactly how an alert will look before it fires. A one-click Reset Style returns any trigger to the app defaults.
Voice rate
A global speed control under Settings › Overlays speeds up or slows down every spoken alert, with a Test button that previews the rate live before you save it.
Local TTS voices — Piper & Kokoro
Text-to-speech alerts can use one of two locally-run neural voices instead of the browser's built-in speech synthesis, for a more natural read. Both live under Settings → Audio, and once enabled and ready, their voice shows up in every alert and trigger voice dropdown alongside the browser voices. PQ Companion bundles neither — you install or host them yourself.
Piper — a locally-installed executable
Piper runs as a program on your machine that PQ Companion spawns to synthesize speech. To set it up:
- Install Piper — grab the standalone executable (no Python needed) or follow the full install guide.
-
Download a voice from the
voice catalog — you need both the
.onnxmodel file and its matching.onnx.jsonconfig, kept side by side. - In Settings → Audio → Local TTS (Piper), turn it on and point the executable and voice-model fields at the files from steps 1–2 (use Browse, or paste the paths). Green dots confirm each path resolves; a readiness banner confirms the voice is usable, and Test Voice plays a sample line.
Choose a synthesis mode: Spawn per phrase is simple but a brand-new phrase may lag briefly, while Keep Piper running (warm) keeps the model loaded in the background for near-instant synthesis at the cost of a bit of memory. Generated audio is cached so repeat lines are instant either way, and PQ Companion falls back to the browser voice automatically if anything goes wrong. The Piper engine (GPL) and voice models (usually CC-BY) are licensed separately from PQ Companion.
Kokoro — a self-hosted server
Kokoro is a second local voice option with its own catalog.
Unlike Piper, PQ Companion doesn't spawn it — instead it
talks to a
Kokoro-FastAPI server you run yourself (for example via
docker run) over plain HTTP, so there's nothing to download into the
app itself. To set it up:
- Start a Kokoro-FastAPI server (see the project's own instructions for Docker or a bare-metal install).
-
In Settings → Audio →
Local TTS (Kokoro), turn it on and enter the
server's URL (e.g.
http://localhost:8880). - Once connected, the voice dropdown populates live from the server's own voice catalog — pick one and hit Test Voice to confirm.
Generated audio is cached (the same cache Piper uses — Clear TTS Cache on either card clears both), and it falls back to the browser voice automatically if the server becomes unreachable.
Exclude patterns
Each trigger can carry a list of exclude patterns (one
regex per line). When any exclude matches the same log
line as the primary pattern, firing is suppressed —
perfect for "fire on player tells, but not on pet
Master. responses or merchant/banker/trainer canned phrases."
The Group Awareness pack's Incoming Tell trigger ships
with sensible defaults; add bazaar trader names you
recognise to silence those too.
Triggers that drive spell timers
A trigger can do more than fire an alert — it can also start a countdown on the buff or detrimental overlay. Set a timer duration, optionally a worn-off pattern that clears the row before its natural expiry, and per-trigger "fading soon" audio cues at any thresholds you want. Each trigger can carry a per-trigger display threshold that overrides the global category default.
Pipe-source triggers (with Zeal)
When Zeal is connected, triggers can fire off the live
pipe stream instead of log text. Pipe sources include
target name change, target HP crossing a threshold
percentage, a named buff landing or fading on you, and
your own in-game /pipe <text> commands. Pipe triggers don't depend on the log file,
so they're immune to log latency and to emote-only
events the log doesn't capture.
Pack-grouped UI
Built-in and imported packs render as collapsible groups
on the Triggers page, with a pack filter and sort in the
header. Always-on event alerts (deaths, zoning, resists,
interrupts) live under the General Triggers group rather
than as a separate page. Triggers that are shared across
packs — the same Mez Break alert appearing in Enchanter
and Bard packs, for example — carry a shared badge and use a dedup_key so a single log line fires the alert once, not once
per pack.
Per-character scoping
Triggers can be scoped to specific characters — handy for class-specific packs that should only fire when you're on that character. Leave the character list empty to fire for any active character.
Built-in packs
Class packs ship for all 14 classes (Bard, Beastlord, Cleric, Druid, Enchanter, Magician, Monk, Necromancer, Paladin, Ranger, Rogue, Shadowknight, Shaman, Warrior, Wizard) plus a Group Awareness pack (incoming tells, death events, zoning). Each pack bundles the relevant CC-break and cast-failure alerts plus spell timers for the class's core buffs, debuffs, roots, mezzes, charms, and pacify lines, and seven additional community packs ship built-in with shared crowd-control break alerts. Always-on event alerts for deaths, zoning, resists, and interrupts are independent of the trigger system.
Non-destructive pack updates
When a built-in pack ships changes, a review panel on the Packs tab shows a per-field diff between your installed version and the new default. Apply it install-by-install, and choose per field whether to preserve your own customization or take the new default — an update never silently overwrites edits you made on purpose.
Action templates & bulk editing
Save an action as a template and apply it to many triggers at once instead of editing each one by hand. Bulk editing also covers converting text-to-speech alerts to sound (including timer alerts) across a whole selection, with control over exactly which triggers a bulk edit touches.
Test with log replay
Replay mode plays a recorded segment of your log back through the live pipeline, so you can confirm a trigger fires (and an overlay behaves) against real lines without being in game. The Log Feed page also has a read-only Browse mode for reading old logs out of game.
Multi-format import
A unified Import Triggers wizard reads the four common share formats and converts them into PQ Companion triggers, so you don't have to rewrite community packs by hand:
- GINA shares as
.xmlor.gtp - EQNag trigger
databases, with
${Var}placeholders mapped to named captures - EQLogParser
.tgftrigger trees - PQ Companion packs exported as JSON from another install
The wizard detects the format, previews the triggers it found, and lets you commit them into a category you choose — so you see exactly what you're importing before it lands.
Refire cooldowns
A noisy log line can fire the same trigger many times in a second. Each trigger has a refire cooldown (a lockout that suppresses re-fires for a set window) and a separate repeat-audio cooldown that lets the on-screen alert keep up while stopping the sound from stacking on itself — so a burst of matching lines doesn't turn into a wall of overlapping alerts.
Tips
- Use the live test button beside each trigger to fire it without waiting for the log line — handy for tuning position, font size, and volume.
- Drag the on-screen alert to where you want it; the position persists across sessions.
Custom Timers
Manual countdown timers for the things your combat log won't announce — a spawn window, a click-item cooldown, a raid phase. They sit alongside the rest of the dashboard and pop out as their own overlay windows.
Start them by hand or from a trigger
Kick off a timer manually whenever you need one, or let a trigger start it for you. A trigger can even pull the duration from a regex capture group, so a single log line spins up a perfectly-timed countdown — useful when the line itself tells you how long something lasts.
Multiple named windows & Timer Groups
Custom Timers has reached full parity with the rest of the overlay dashboard: instead of one shared overlay, you can run several named Custom Timer windows side by side — split raid phase timers from personal cooldowns, or give each alt its own window. A Timer Groups screen lets you organize which triggers feed which window, so a trigger's countdown always lands on the overlay you intended. Each window pops out independently and has its own working close (X) button on its title bar, so closing one window doesn't take the others down with it.
Pinning a timer on top
Any individual trigger-driven timer can be pinned to keep it at the top of its window, above the rest of that overlay's bars — handy for the one countdown you never want to lose track of in a crowded window, like a tank cooldown or a raid-wide mechanic.
Appearance & overdue reminders
Give a timer its own bar colour from the quick-add form, or set a global timer appearance that every bar inherits. A timer can also keep showing after it expires as an overdue reminder, instead of vanishing the moment it hits zero — useful for a spawn window you don't want to forget about once it opens.
Roll Tracker
Prerequisite: /log on.
Watches the combat log for
/random results and buckets them into per-range sessions. EQ logs
each roll as two consecutive lines —
**A Magic Die is rolled by <Name>. followed by
**It could have been any number from 0 to N, but this
time it turned up a M. — and the tracker pairs them, then groups by the upper
bound. So when a raid calls Cowl 333, Shard 444, and Heart
666 in overlapping bidding windows, you end up with three
independent leaderboards instead of one tangled list.
Sessions and rolls
Each session is keyed by its dice range (the "333" in
0 to 333). Rolls list the leader at the top under the current
winner rule, with a trophy on the winning name. Re-rolls
(a player rolling more than once in the same session) are
kept in the list but struck through and tagged
reroll — they're
ignored for winner calculation, since most guilds treat
the first roll as binding.
Winner rule: Highest vs. Lowest
A header toggle picks the global rule. Flipping it instantly re-ranks every session — useful for guilds that use lowest-roll-wins for split loot. Ties on the winning value are all shown as co-winners; resolve them however you normally do.
Manual mode vs. Timer mode
Manual mode is the default: sessions stay Live until you hit Stop, the user manually removes them, or no new rolls arrive for five minutes (after which a fresh drop with the same dice range opens a new session instead of merging).
Timer mode auto- stops every new session a configurable number of seconds after the first roll — useful when an officer calls a fixed bidding window like "you have 30 seconds to roll." The window is set in the header (5 – 600 s, default 45 s) and each Live session shows a countdown badge that turns amber under 5 s. Manually stopping a session before its timer expires cancels the pending auto-stop.
Per-session and global controls
- Stop freezes a session immediately — late rolls won't merge in.
- Remove deletes a single session card without touching the others.
- Clear (header) wipes every session at once.
Tiered contests
Group related sessions into a tiered contest using a configurable preset (or a custom editor for your own structure), and results render as shareable contest cards instead of raw session lists. Loot items are auto-suggested from nearby chat, and you can add a manual item label and copy a paste-ready result summary for guild chat.
Overlay
The Roll Tracker is available both as a dashboard panel (toggle it on from the Overlays toolbar) and as a frameless always-on-top pop-out window with the full set of header controls — mode toggle, duration input, winner rule, clear, and lock — so an officer can drive a roll call without leaving the overlay or alt-tabbing back to the dashboard.
Backup & Restore
Settings → Backups groups two independent backup systems —
one for PQ Companion itself, one for your Project Quarm
.ini files.
App Backup & Restore
Exports your entire PQ Companion state — settings, triggers,
character data, EQ config snapshots — into a single
.pqcb bundle. Drop the bundle on another machine, import, and
you're exactly where you left off. The panel is always
visible under Settings → Backups so it's there when you need
to move to a new PC.
The bundle carries a manifest with a version and schema check; a forward-incompatible bundle is refused at import instead of silently corrupting the destination. On import, the existing data is renamed in place rather than deleted — if anything goes wrong you have a clean rollback path.
EQ Config Backups
One-click backup and restore for every Project Quarm
.ini file — UI, hotkeys, socials, the lot. Snapshot before a
risky UI overhaul, roll back instantly if something breaks.
Auto-backups
Configure auto-backups on a custom schedule (e.g. once a day) or on file change (every time the game writes the file). Browse, label, and restore previous backups from a single list. The Backup Manager header has an Open folder button that jumps straight to the on-disk backup directory — useful if you want to copy a snapshot somewhere else or archive it manually.
Backup files live under your home directory (e.g.
~/.pq-companion/eq-config-backups/) so they're independent of the install location. Older
installs that wrote backups beside the app are migrated
to this directory automatically on first launch.
Developer mode
A hidden Settings tab unlocked with Ctrl + Shift + D. Aimed at contributors and curious power users — not required for any normal feature.
Once unlocked, the Developer tab exposes a read-only SQL sandbox over the Project Quarm database (the same database the explorer reads from) with ten curated starter queries, an interactive schema graph showing how the tables relate, and a Mermaid ER diagrams panel for the most-asked-about subsystems (items, NPCs, loot, spells). Queries run through a guarded backend endpoint that enforces read-only access — no write or schema statements are accepted.
The same tab also hosts toggles for features still being proven out before they ship on by default — currently the Faction Tracker and the Spell Emote Customizer. Once a feature has had enough real-world use, its toggle graduates out of Developer mode and it becomes a normal always-on feature.
You can save queries you reuse, give them names, and export a set as a query pack to share or re-import on another machine. Each tab keeps its own query history, and wide result sets scroll horizontally so big SELECTs stay readable.
Troubleshooting
The DPS meter / spell timers / NPC info aren't doing anything
All three read from your combat log. Check that you ran
/log on in-game (it's per-character and per-session), and that
Settings points to the right Project Quarm folder. The log
file lives in your Project Quarm folder as
eqlog_<Character>_quarm.txt.
The Spell Checklist / Inventory / AAs are empty
Those features need Zeal exports. Run Zeal at least once on the character to populate the JSON, then switch to that character in PQ Companion.
I changed a config and the game broke
Open Backups and restore the most recent snapshot. If you had auto-backups enabled (recommended), there's almost always a clean copy from before the change.
Still stuck?
Open an issue on GitHub with what you tried and any console errors.
Privacy & safety
PQ Companion runs entirely locally. It reads two things off
disk: your combat log file and your Zeal JSON exports.
Triggers, character notes, and combat history are persisted
to a local SQLite database at
~/.pq-companion/user.db (combat history defaults to a 30-day retention window;
everything else is yours until you delete it). Nothing is
uploaded anywhere; there's no account, no telemetry beyond
auto-update checks against the GitHub releases API.
The app never modifies the game client or game data. It is a read-only tool — no memory injection, no packet modification, no automation that interacts with the game client. If you're worried about server rules, the rule of thumb is: anything PQ Companion does, you could do by hand with a text editor and the in-game UI; it's just a lot faster.