HearthSim/HSTracker
51.9
Adequate · 1 October 2026
114.1k
lines of production code
Swift
primary language
2
measurements over time
What this system is
HSTracker is a macOS overlay application that monitors real-time game state in Hearthstone to provide in-game statistics, card tracking, and strategic assistance. It integrates with external services like HSReplay to offer detailed analytics, ladder climb predictions, and automated replay uploads. The system supports multiple game modes including Constructed, Arena, Battlegrounds, and Mercenaries, featuring specialized tools such as the Bob's Buddy simulation engine for Battlegrounds and the Outfinder for card synergy analysis.
How it got here
2015–2016 — Swift migration and feature expansion
47 changes.
The project underwent a major architectural shift from RubyMotion to Swift, replacing legacy Core Data and JSON storage with Realm and introducing a unified overlay architecture. This period saw the addition of comprehensive support for new game modes like Battlegrounds and Mercenaries, alongside significant UI overhauls including a redesigned Deck Manager and granular preference panes. Infrastructure improvements included migrating to Swift Package Manager, implementing structured logging, and enhancing network stability with a custom HTTP layer.
2017–2024 — SwiftUI migration and Battlegrounds expansion
37 changes.
The project undertook a major architectural shift by porting core components like HearthWatcher to Swift and rewriting UI overlays in SwiftUI, while significantly expanding support for the Battlegrounds game mode. This period also focused on deepening in-game analysis capabilities through the introduction of the Related Cards system, Counter System, and enhanced HSReplay API integrations for strategic guidance.
2025–2026 — SwiftUI overlay consolidation and Battlegrounds guides
30 changes.
This period focused on migrating the application's overlay system from AppKit to a unified SwiftUI canvas, enabling scalable, draggable, and non-blocking UI components across Constructed, Arena, and Mercenaries modes. Significant effort was dedicated to expanding Battlegrounds support through a comprehensive guides browser, detailed counter tracking, and new interactive features like minion pinning and anomaly tooltips. The work also included modernizing localization infrastructure and porting specific mode interfaces, such as the Arena draft screen, to the new architecture.
Features
Add Battlegrounds Tavern Pinning overlay
Introduces the Tavern Pinning feature for Battlegrounds, allowing users to mark specific minions in Bob's shop for easy identification. The overlay displays three types of markers on shop cards: manual pins (set by the user), tribe pins (highlighting all minions of a selected race), and key piece pins (indicating minions recommended by comp guides). A dedicated panel in the bottom-right corner lists pinned cards and provides controls to toggle tribe filters and view comp guide recommendations. The shop markers are non-interactive to prevent blocking Hearthstone's UI, while the panel reports its height to ensure the minion browser does not overlap it.
HSTracker/UIs/Battlegrounds/MinionPinning · high confidence
Add Tier7 Inspiration panel for Battlegrounds
Introduces a new overlay panel that displays first-place lineups containing a selected minion, accessible from the minion browser, comp guides, and quest guides. The panel shows the hero portrait, starting hero power, and the final board state (including current stats and keywords like Divine Shield or Taunt) for up to 20 games, paginated four per page. It respects Tier7 subscription status and trial limits, and includes a persistent top-bar button to re-open the panel after it has been used in a match.
HSTracker/UIs/Battlegrounds/Inspiration · high confidence
Add interactive related-cards browser and refined tooltip layout
Users can now right-click a card with a large pool of related cards to open an interactive browser panel (RelatedCardsBrowserPanel) that supports scrolling, cost/keyword filtering, and two display modes (full card renders or card tiles). The compact tooltip (RelatedCardsTooltipPanel) has been redesigned to lay out the pool summary beside the grid, matching the HDT layout, and the grid now scales with the game window size. Additionally, the system now supports Top and Bottom tooltip placements for card markers and ensures the Outfinder displays on the correct monitor.
HSTracker/UIs/Tooltips · high confidence
Added Tier 7 composition popularity overlay
The Battlegrounds Composition view now displays a new overlay for Tier 7 quests, showing the top three most popular warband compositions for the current quest reward. This feature presents each composition's name, a visual popularity bar indicating its share of first-place finishes, and the key minion's tile art, allowing users to quickly identify the most successful strategies for the active quest.
HSTracker/UIs/Battlegrounds/Composition · high confidence
Added card ID definitions for Deathknight and Demon Hunter classes
The tracker now includes explicit card ID mappings for the Deathknight and Demon Hunter classes, enabling proper recognition and tracking of their specific cards, hero skins, and associated tokens/enchantments. This addition ensures that gameplay events involving these classes are correctly identified in the logs.
HSTracker/Logging/CardIds · high confidence
Added card tier data and DSA public key resource
The application now includes a new \cardtier.json\ resource file containing tiering data for Hearthstone cards (e.g., Flame Lance, Effigy), which likely powers card strength or ranking features. Additionally, a DSA public key (\dsa\_pub.pem\) has been added to the resources, potentially for verifying signatures or securing data interactions.
HSTracker/Resources · high confidence
Added quest reward guides to the Battlegrounds Heroes tab
Users can now view specific guidance for selected quest rewards within the Battlegrounds Heroes tab. This change introduces a new UI section that displays a 'How to Play' guide and lists favorable minion tribes for each quest reward picked during the match, mirroring the behavior of the companion Hearthstone Desktop Tracker (HDT).
HSTracker/UIs/Battlegrounds/Guides/Quests · high confidence
Added tracking for Hunter animal companion cards
This change introduces new classes within the Related Cards System to track Hunter cards that summon animal companions, including Animal Companion, Broll Bearmantle, Call of the Wild, Open the Cages, Patchwork Pals, Spirit Speaker, and To My Side. The implementation adds a generator that retrieves the current animal companions for the local player by reading from the game's counter manager, ensuring that these related cards are correctly displayed in the tracker.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Hunter/AnimalCompanionGenerator · high confidence
Added tracking for Incindius Eruption suffix updates
Deck tiles now display the current counter value for the Incindius Eruption card via a dynamic suffix (e.g., "(+N)"). This is implemented through a new \ICardExtraInfo\ protocol and an \IncidiusCounter\ class that manages the counter state and turn history, ensuring the card name reflects its active buffs.
HSTracker/Hearthstone/CardExtraInfo · high confidence
Anomaly guide tooltips in Battlegrounds
Added UI components and a view model to display contextual guide tooltips for Battlegrounds anomalies. The new AnomalyGuideBadgeTriggerView shows a tooltip with how-to-play instructions and favorable tribes when hovering over the anomaly badge after the mulligan phase, while AnomalyGuideMulliganTriggerView handles tooltip display during the mulligan phase by detecting hover over the anomaly icon. The BattlegroundsAnomalyGuidesViewModel fetches guide data from HSReplay and manages the state for hovered cards.
HSTracker/UIs/Battlegrounds/Guides/Anomalies · high confidence
Automated CI and Release Pipeline for HSTracker
This change introduces a new Fastlane configuration to automate the continuous integration and release process for the HSTracker macOS application. The setup includes a CI lane that handles dependency resolution via Carthage and runs unit tests using Scan. The release lane automates the full release workflow: it reads the version and changelog from CHANGELOG.md, updates the bundle version in Info.plist, creates a Git tag, builds the application with Gym, zips the app, and uploads the release to HockeyApp for testing. It also publishes a GitHub release with the associated assets and generates a Sparkle appcast XML file to enable automatic updates for existing users.
fastlane · high confidence
Death Knight card support and deck highlighting
Added support for the Death Knight class in the Related Cards System, including deck highlighting for cards like Arrival of the Old Gods, Finality, and Dread Raptor, as well as tooltip definitions for resurrection and discovery effects across numerous Death Knight cards.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/DeathKnight · high confidence
Demon Hunter related cards and highlights
Added related card and highlight support for numerous Demon Hunter cards. This includes highlighting synergies for cards like BartendOBot (Outcast), Axe of Cenarius (portals), and Cliff Dive (minions), as well as defining related card pools for resurrection effects (All Fel Breaks Loose, Ferocious Felbat), crewmate generation (Dirdra Rebel Captain, Voronei Recruiter), and discover effects (Alarashi, Blind Box, Felerin the Forgotten).
HSTracker/Hearthstone/RelatedCardsSystem/Cards/DemonHunter · high confidence
Expanded Battlegrounds counter coverage for new mechanics and cards
The Battlegrounds counter system now tracks a wider range of game states and specific card interactions. New counters have been added for the Ancestral Automaton and Eternal Knight scaling mechanics, the Deity (Old God) size and evolution, the Free Refresh count, and the Gold Next Turn calculation (including Overconfidence and Accord-o-Tron interactions). Additional counters now display buffs for Blood Gem Barrage, Volumizer, Whelp, Random Tavern Minion, and Tavern Spells, while existing counters for Beetles, Blood Gem, Elemental buffs, Naga spell dividends, and Undead bonuses have been updated or refined to handle new card IDs and edge cases.
HSTracker/Hearthstone/CounterSystem/BgCounters · high confidence
Expanded HSReplay API data models for Battlegrounds and Mulligan guides
This update adds comprehensive data models to support new HSReplay API features, specifically for Battlegrounds and Mulligan guides. For Battlegrounds, the codebase now includes structures for anomaly guides, composition guides, hero/trinket/quest pick stats and parameters, inspiration lineups, and tavern pool observations, enabling the app to fetch and display detailed strategic data and pick recommendations. Additionally, Mulligan guide support is enhanced with V2 data models, allowing for more granular hand-analysis feedback and status checks. These changes prepare the application to integrate with the latest HSReplay API capabilities for improved in-game guidance.
HSTracker/HSReplay/Data · high confidence
Expanded Rogue card synergies and highlighting
The Rogue class now features significantly enhanced Related Cards support, covering a broad range of new and existing cards. The system now highlights synergistic cards in the deck for abilities like Blink, Cutlass Courier, DigForTreasure, ElvenMinstrel, PitStop, RaidingParty, ScourgeIllusionist, ShroudOfConcealment, SketchyInformation, and Swindle. Additionally, related card tooltips and pools are implemented for cards such as AcademicEspionage, AmbushPredators, AssemblyLine, Bamboozle, BazaarMugger, Burgle, CleverDisguise, ContrabandStash, CostumeMerchant, CounterfeitBlade, Dethrone, DigForTreasure, DiscJockey, DragonsHoard, DustBunny, EverythingMustGo, FaceCollector, Flashback, FollowTheFootsteps, GaronaHalforcenTheKingslayers, GurubashiHypemon, HarbingerOfTheBlighted, HenchClanBurglar, Jackpot, JadeGuardians, JourneyBelow, KajamiteCreation, LilianVoss, LuckyComet, MaestraMaskMerchant, MerchantOfLegend, Mixtape, MountHyjalImposter, MyraRotspring, NefersetWeaponsmith, Perjury, PettyTheft, PharaohCat, Pilfer, Reconnaissance, ScroungingShipwright, ShadowjewelerHanar, ShakuTheCollector, ShellGame, SliceAndDice, SmokeBomb, StarshipSchematic, StickUp, StolenPower, StolenSteel, Swashburglar, and TessGreymane.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Rogue · high confidence
Expanded in-game counter tracking for new and existing cards
The CounterSystem now tracks a wide range of specific game states and card interactions to provide more detailed information during matches. New counters have been added for cards such as Abyssal Curse, Anachronos, Animal Companion, Ashalon's Ridge Guardian, Asteroid, Astral Automaton, Aviana/Elune's Chosen, Captured Archmage, Playhouse Giant, and various turn-based metrics like cards drawn/played this turn or game. The system also improves tracking for existing mechanics, including updated logic for the Imbue counter, Deathwing discount calculations with multiple Ultraxions, and opponent counters for cards like Azalina Soulsever. These changes ensure that relevant card costs, buffs, and game-state thresholds are displayed accurately for both players.
HSTracker/Hearthstone/CounterSystem/Counters · high confidence
Granular HSReplay replay upload controls
The HSReplay preferences pane now offers detailed control over which game modes are uploaded to HSReplay. Users can toggle automatic replay uploads and enable or disable uploads for specific modes, including Ranked, Casual, Arena, Tavern Brawl, Friendly, Adventure/Practice, Spectator, Battlegrounds, Duels, and Mercenaries.
HSTracker/HSReplay/Base.lproj · high confidence
Initial repository import and configuration scaffolding
This change represents the initial import of the HSTracker project into the repository, establishing the foundational configuration files required for development and release. It introduces \.gitattributes\ to manage text and binary file handling, a \.swiftlint.yml\ configuration with custom rules to prevent crashes from unknown Hearthstone enum values, and a \.travis.yml\ CI setup using Carthage and Fastlane. The commit also adds standard project documentation (\README.md\, \CONTRIBUTING.md\, \LICENSE\), a \Config.xcconfig\ for code signing, and an \hs-build-dates.json\ mapping Hearthstone client build numbers to dates. Additionally, it removes the legacy \Rakefile\ (indicating a shift away from RubyMotion) and updates \.gitignore\ to exclude build artifacts, Carthage dependencies, and Sparkle release keys.
(repo-wide) · high confidence
Introduce App Health monitoring and structured logging infrastructure
The logging subsystem now includes an App Health tracker that monitors the status of Hearthstone and the tracker itself, updating the application icon badge to reflect states such as game installed, tracker working, or game in progress. Additionally, a new structured logging framework has been added, featuring log namespaces, zones, and high-precision date handling to improve log parsing stability and debugging capabilities.
HSTracker/Logging · high confidence
Introduce Swift-based HearthMirror integration layer
This change adds a new Swift wrapper layer (HearthMirror) that bridges the native memory-reading library with the HSTracker application. It introduces data models for account identification, arena and brawl statistics, and detailed match information (including player stats, medals, and format details), along with a helper class to manage the lifecycle and thread-safe access to the underlying mirror instance. This enables the tracker to read real-time game state and user data from the running Hearthstone process.
HSTracker/HearthMirror · high confidence
Introduce The Outfinder related-cards system
Added a new related-cards analysis system (The Outfinder) that provides statistical summaries and probability calculations for card generation and Discover effects. This includes support for standard Discover pools, dynamic cost-relative effects (such as Evolve and Devolve), and state-value pools (like counters or mana-based effects). The system integrates with the UI to display highlighted synergies, filtered related cards based on format legality, and detailed statistics (median costs, keyword percentages) for premium users, while also handling edge cases like secrets and hero cards.
HSTracker/Hearthstone/RelatedCardsSystem · high confidence
Introduced Mulligan V2 guide UI components for Constructed mode
Added a new SwiftUI-based UI layer for the Constructed Mulligan Guide, including views for card headers, linear confidence gauges, and tip icons, along with their corresponding ViewModels. This implementation replaces previous layout approaches with a structure that aligns with Hearthstone Desktop's positioning, featuring specific handling for card stats visibility, error/warning states, and dynamic confidence updates via a linear gauge with flash animations.
HSTracker/UIs/Constructed/Mulligan/V2 · high confidence
Introduces a new themeable card bar system with multiple size options
The card tracker UI now uses a new \CardBar\ component that supports four distinct visual themes (Classic, Dark, Frost, and Minimal) and five row heights (Tiny, Small, Medium, Big, and Huge). This allows users to customize the appearance and compactness of the card list, with the new system handling theme-specific assets and layout calculations for each size variant.
HSTracker/UIs/Cards · high confidence
Introduces the Counter System for tracking game state
Adds a new Counter System (HSTracker/Hearthstone/CounterSystem) that provides a framework for tracking and displaying various game statistics for both the player and the opponent. The system includes a BaseCounter class for common logic, a CounterManager to handle initialization and thread-safe access to counter lists, and specific counter types like NumericCounter and StatsCounter. This enables features such as showing related cards, sorting counters by importance, and handling specific game mechanics like Azalina Soulsever or Battlegrounds card availability.
HSTracker/Hearthstone/CounterSystem · high confidence
Introduction of overlay toast notifications
A new Toast component has been added to display transient notifications as an overlay window. This feature ensures notifications appear on the correct monitor by detecting the screen containing the Hearthstone window, and it supports interactive behaviors such as pausing the dismissal timer when the user hovers over the toast or clicking a provided action button.
HSTracker/UIs/Toast · high confidence
Ladder climb prediction with confidence intervals
The Statistics tab now includes a Ladder climb prediction feature that estimates the number of games and time required to reach specific ranks (20, 15, 10, 5, and Legend). This prediction is based on precomputed Monte Carlo data stored in a local SQLite database (grid.db) and incorporates the user's current rank, stars, and win streak. To provide a more realistic expectation, the display includes confidence intervals for both the game count and time estimates, calculated using a binomial proportion confidence interval on the user's win rate.
HSTracker/Statistics · high confidence
Mage card support for new expansions and mechanics
Added related-card definitions and highlight logic for a large set of new Mage cards, including AlterTime, Anomalize, ArcaneKeysmith, ArrivalOfTheTitans, Astromancer, and GrandMagisterRommath. This enables the tracker to correctly model spell and minion pools, discover effects, secret generation, and deck highlights for these cards.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Mage · high confidence
New Battlegrounds guides browser and hover tooltips
A new Battlegrounds guides browser has been added, allowing users to view comp, hero, and minion guides before a match starts (in the lobby) and during gameplay. The browser includes a meta snapshot feature and supports filtering by minion availability. Additionally, hovering over trinkets or quest rewards now displays a guide tooltip, and card markers in the minion browser show tooltips indicating which card created or drew them.
HSTracker/UIs/Battlegrounds/Guides · high confidence
New Battlegrounds minion browser with tribe and keyword filtering
A new Battlegrounds minion browser has been added to the Guides tab, replacing the previous tier-details view. It features a tier strip for filtering by tavern level and an expandable side panel for filtering by minion type (tribes, spells, buddies) and keywords. The browser groups cards by tier or type, supports pinning minions, and displays tribe icons with correct zoom anchoring and border sizing. It also integrates with the live minion pool to show card availability and handles Dark Paradox indicators.
HSTracker/UIs/Battlegrounds/Guides/Minions · high confidence
New Battlegrounds notification toasts for hero picks and Timewarp
HSTracker now displays two new overlay toasts during Battlegrounds matches: one for hero selection and one for Timewarp events. These purple-themed panels appear on the overlay canvas and allow users to open the corresponding HSReplay.net pages directly from the notification.
HSTracker/UIs/Battlegrounds/Notifications · high confidence
New Battlegrounds overlay UI and last-games history tracking
The Battlegrounds overlay has been rebuilt in SwiftUI, introducing a new opponent info panel that displays the hovered player's last known warboard, deity progress, tier triples, and HSTracker-specific quest badges, along with a placement distribution histogram and fixed-pixel 'dead for' turn counters on the leaderboard. Minion rendering now supports the Venomous keyword and correctly handles Deity stats in the last-known-board popup. Additionally, a new local history system tracks individual game results, including MMR changes, final board states, and Duos status, to support improved session widget handling.
HSTracker/UIs/Battlegrounds · high confidence
New Battlegrounds quest-picking overlay with stats and composition data
A new SwiftUI-based overlay now displays statistics for offered Battlegrounds quest rewards during the picking phase. The view shows each quest's average placement, tier, and pick rate, along with the warband compositions that most frequently win using that quest. This feature is gated by the Tier 7 overlay setting and requires an active HSReplay Tier 7 subscription or trial to fetch the underlying stats.
HSTracker/UIs/Battlegrounds/QuestPicking · high confidence
New Battlegrounds trinket picking stats panel
A new overlay panel now displays detailed statistics (tier, average placement, and pick rate) for the trinkets offered during a Battlegrounds run. This feature includes a dedicated view for individual trinket stats, a main panel to display the row of offered trinkets, and a toggle button to show or hide the stats. The panel respects user settings for auto-showing and includes animations for appearing and disappearing.
HSTracker/UIs/Battlegrounds/TrinketPicking · high confidence
New Mono integration layer for Bob's Buddy simulation
The HSTracker Mono directory now contains a comprehensive set of Swift proxy classes that bridge the application to the Bob's Buddy C\# simulation engine. This new layer introduces typed wrappers for core simulation entities—including Minion, Player, Input, and Enchantment—along with specialized factories and handlers for specific game mechanics like deathrattles, anomalies, and hero powers. By exposing these simulation components through a structured Swift interface, the tracker can now accurately capture and relay complex game state data, such as minion stats, enchantments, and duos-specific inputs, to the Bob's Buddy backend for enhanced analysis and recommendations.
HSTracker/Mono · high confidence
New Statistics and Ladder Climb Prediction tabs
The Stats Manager now includes a new 'The Climb' tab that predicts ladder rank progression based on deck stats, and the main Statistics tab displays a confidence interval column for winrates. Users can also filter stats by game mode and season, and sort the statistics table by clicking column headers.
HSTracker/UIs/StatsManager · high confidence
New Tier 7 Battlegrounds overlay with pre-lobby panel and MMR messages
Users now see a new Tier 7 overlay for Battlegrounds, including a pre-lobby panel that displays account status, subscription options, and trial information, as well as MMR bracket messages (with anomaly-adjusted indicators) on the pickers. The overlay supports trial usage for logged-out users and can be disabled via a remote configuration flag.
HSTracker/UIs/Battlegrounds/Tier7 · high confidence
New UI utility components and image caching infrastructure
The HSTracker UIs module introduces several new foundational components: ClassColor defines the official color palette for all Hearthstone classes (including Demon Hunter); ClickableBox provides a reusable NSBox subclass with mouse-click event handling; TextButton allows for customizable text styling (color, size, padding) in buttons; and ImageUtils implements a synchronized, disk-backed caching system for downloading and displaying card tiles, art, hero portraits, and Battlegrounds-specific assets from the hearthstonejson.com API.
HSTracker/UIs · high confidence
New Window Move debug tool for overlay positioning
A new debug utility, WindowMove, has been added to the HSTracker Debug module. This tool provides a dedicated interface for manually adjusting the position and opacity of the application's overlay windows. Users can select specific windows (such as the 'Full overlay') and nudge their coordinates using fine-grained (1px) or coarse (10px, 100px) movement controls. It also includes functionality to show/hide the selected window and take screenshots of specific screen regions, aiding in the precise alignment of tracker elements.
HSTracker/Debug · high confidence
New active effects system and Death Knight support
The tracker now includes a new active effects system (ActiveEffects.swift) to manage and display temporary game states, alongside initial support for the Death Knight class with specific enchantment effects such as Alexandros Mograine, Cold Feet, and Helya.
HSTracker/Hearthstone/EffectSystem · high confidence
New deck import capabilities via clipboard and file
Users can now import decks directly from the system clipboard or by selecting a local text file. The new ClipboardImporter reads the current clipboard content and attempts to deserialize it as a deck string, while the FileImporter parses standard text-based deck lists (supporting formats like '2x Card Name' or '2 Card Name') to automatically detect the deck's class and card counts. These changes are supported by a refactored DeckSerializer that handles the underlying deck string parsing and a new DeckImporter class that manages arena deck detection.
HSTracker/Importers · high confidence
New dedicated preference panes for Arena, Battlegrounds, Mercenaries, and Counters
The preferences window now includes dedicated configuration panes for Arena, Battlegrounds, Mercenaries, and Counters, replacing the previous monolithic or scattered settings. The Arena pane allows users to enable the Arenasmith overlay and toggle specific draft aids like hero picking, score, related cards, and redraft discard visibility. The Battlegrounds pane provides granular control over the Tier 7 overlay, Bob's Buddy, turn counters, MMR display, tavern pinning, and session recap details. The Mercenaries pane lets users toggle opponent/player hover info, task lists, and ability overlays. Finally, the new Counters pane offers a searchable, per-counter configuration for both player and opponent sides, allowing users to enable, disable, or set auto-visibility for specific counters like deathrattles, experience, or Galakrond invokes.
HSTracker/UIs/Preferences · high confidence
New log parsing handlers for game state, choices, and arena tracking
Added new log event handlers (ArenaHandler, ChoicesHandler, GameInfoHandler, LoadingScreenHandler, RachelleHandler) to parse specific game events from the power log. These handlers enable tracking of Arena draft/reward states, parsing of player choices and entity selections, extracting player IDs and build numbers, managing game mode transitions and experience counters, and tracking gold progression rewards.
HSTracker/Logging/Handlers · high confidence
New player resources widget on the overlay canvas
A new SwiftUI-based PlayerResourcesView has been added to the Constructed UI, replacing the previous fixed-size AppKit window with a widget that scales with the overlay canvas. This widget displays the player's current health, mana, hand size, corpses, and gold (when raised above 10), and can be repositioned by dragging while the overlay is unlocked, mirroring the behavior of other movable overlay elements.
HSTracker/UIs/Constructed/PlayerResourcesWidget · high confidence
New release and build automation scripts
Added a suite of new scripts to automate the HSTracker build and release process. This includes \bootstrap.sh\ and \cards\_download.sh\ to fetch card data, \compile\_hslog.sh\ to build the kotlin-hslog framework from the Arcane-Tracker dependency, and \release.kts\ (a Kotlin script) to handle building, notarizing, and releasing the application via Xcode, generating Sparkle appcasts, and managing GitHub releases.
scripts · high confidence
New settings panes for counters and related cards visibility
HSTracker now includes dedicated settings panes that let users control the visibility of counters and the opponent's related cards list. These panes expose per-counter and per-card override options (Auto, Enabled, Disabled) for both the player and opponent sides, allowing users to force specific counters or related cards to always appear or always be hidden, regardless of the system's default heuristics.
HSTracker · high confidence
New utility infrastructure for Battlegrounds and thread safety
This change introduces a suite of new utility files in HSTracker/Utility to support Battlegrounds features and improve application stability. It adds a new Battlegrounds database (BattlegroundsDb.swift) that tracks minion pools, banned cards, and the Dark Paradox anomaly, alongside keyword filtering (BattlegroundsKeyword.swift) and utility functions for anomalies and hero IDs (BattlegroundsUtils.swift). To support these and other background operations, it introduces thread-safe data structures like ConcurrentQueue and LinkedList (Algorithm.swift), a Debounce mechanism, and a MainThreadGuard to detect and report UI work performed off the main thread, preventing heap corruption and crashes on modern macOS versions.
HSTracker/Utility · high confidence
Paladin card logic and highlights for new expansions
Added implementation files for numerous new Paladin cards across recent expansions (including WONDERS, KARA, and Arena sets). These files define discover pools (e.g., for A Light in the Darkness, Bronze Explorer, Emerald Portal), highlight synergies (e.g., for Alarmed Securitybot, BoogieDown, Grillmaster), and related-card tracking (e.g., for Lady Liadrin, Tyr, Past Gnomeregan). This ensures HSTracker correctly identifies card interactions, displays relevant highlights in the deckbuilder, and provides accurate hover summaries for these new cards.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Paladin · high confidence
Ported Arenasmith integration for HSReplay Arena data
This change introduces the backend logic for the Arenasmith feature in the Arena mode, porting functionality from the desktop client to support HSReplay's API. It adds new Swift files to handle API request parameters and response decoding for hero and card picks, including custom decoders to handle numeric-to-string score conversions. The update also implements managers to track arena trial status (starter and recurring trials) and to fetch opponent deck package information (legendary card groups) for the Arenasmith lens, while respecting remote configuration kill switches for availability.
HSTracker/HSReplay/Arena, HSTracker/Hearthstone/Arena · high confidence
Support for new Hearthstone mechanics and modes
This update adds support for several new game features and mechanics. It introduces tracking for the Battlegrounds Deity (Old Gods), including their stats and golden status, as well as detailed board state snapshots for opponents. The tracker now handles Whizbang deck generation, supports the Zilliax Deluxe 3000 cosmetic customization, and correctly processes Starship cards. Additionally, it improves collection management by adding player records support and fixing arena deck importing for underground and changes modes.
HSTracker/Hearthstone · high confidence
Warlock card tracking and highlighting support expanded
The Warlock-related cards system now includes definitions for a large set of new and existing cards, enabling HSTracker to correctly track synergies and highlight relevant cards in the deck. This includes highlight logic for Demon-centric cards (e.g., ArchwitchWillow, DirgeOfDespair), cost-based highlights (e.g., ApothecarysCaravan, Chronogor), and spell-school highlights (e.g., Darkbomb, SketchArtist). It also adds related-card tracking for complex interactions such as Archimonde (demon synergy), Chogall (discarded cards), WallowTheWretched (Nightmare spells), and resurrection cards like BloodreaverGuldan and TamsinsPhylactery. Additionally, discover and pool-based cards like TwistedKnowledge and CallOfTheVoidLegacy are now supported.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Warlock · high confidence
Warrior card synergies and highlights for new patches
Added related-card definitions and deck highlights for a large set of new and existing Warrior cards, including AllYouCanEat, ForgeOfSouls, Latorvius Gaze of the City, and many others. These entries enable HSTracker to highlight synergistic cards in your deck (such as minions for AllYouCanEat or weapons for ForgeOfSouls) and show relevant related cards (such as Cannoneer tokens for Cannonmaster or Coliseum Tiger tokens for Gladiatorial Combat) during gameplay.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Warrior · high confidence
Removals
Removal of legacy Core Data model classes
The Card, Deck, and Mechanic model classes have been removed from the application. These classes previously handled local data management for card details, deck composition, and game mechanics via Core Data. Their deletion indicates a shift away from this local persistence layer, likely as part of a broader data architecture change or migration to a different data source.
app/models · high confidence
Removal of legacy Hearthstone log parsing components
The \app/log\ directory has removed the \Hearthstone\, \LogAnalyzer\, and \LogObserver\ Ruby classes. This deletes the previous implementation that monitored the Unity player log file via \NSWorkspace\ notifications and parsed game events (such as card draws, plays, and game start/end) using specific regex patterns. Users relying on this specific log-reading mechanism will no longer have this functionality available in this location.
app/log · high confidence
Removal of legacy macOS controller and layout classes
The application has removed several legacy controller and layout files from the \app/controllers\ directory, including \DeckImport\, \GeneralPreferences\, \MainMenu\, \OpponentTracker\, and \PlayerTracker\ along with their associated layout definitions. This change eliminates the old UI components and logic for deck importing, general preferences, main menu structure, and player/opponent card tracking windows, indicating a significant restructuring or replacement of these specific interface elements.
app/controllers · high confidence
Removal of legacy utility classes
The Configuration, DatabaseGenerator, Importer, JSON, and Sorter utility classes have been removed from the application. This eliminates the previous mechanisms for managing Hearthstone locale settings, initializing the card database from local JSON files, importing decks from external websites (such as HearthPwn and hearthstone-decks.com), parsing JSON data, and sorting decks by cost and type.
app/utilities · high confidence
Removal of unused card data and logging configuration files
The \cards.json\ file, which contained the static data definitions for game cards (including costs, rarities, and golden status for classes like Druid), has been deleted. Additionally, the \log.config\ file, which defined logging levels and output settings for various system zones (such as Zone, Bob, Power, and Asset), has been removed. These changes clean up unused resources and configuration files from the application.
resources/files · high confidence
Removed initial database schema definition
The initial database schema definition file (0001\_initial.rb) has been removed. This file previously defined the data model for entities including Deck, Mechanic, and Card, along with their relationships and attributes. Users relying on this specific schema structure for database initialization or migration should be aware that this definition is no longer present in the codebase.
schemas · high confidence
Removed macOS-specific category extensions
The application no longer includes the \NSArray\ and \NSString\ category files that previously provided macOS-specific helper methods. Specifically, the \nscolor\ method for converting integer arrays to \NSColor\ objects and the \home\_path\ method for resolving user home directory paths on \NSString\ instances have been removed from the codebase.
app/categories · high confidence
Architecture
Removal of legacy AppDelegate initialization logic
The application entry point file (app\_delegate.rb) has been deleted, removing the code responsible for initializing the Core Data stack, setting up the main menu, and launching the player and opponent tracker windows. This change indicates a significant architectural shift in how the application starts and manages its UI components, likely moving this logic to a different entry point or framework.
app · high confidence
Behavioural changes
Active Effects overlay migrated to SwiftUI and integrated into the RootOverlay canvas
The Active Effects overlay has been rewritten in SwiftUI, replacing the previous standalone AppKit window with a view that lives directly on the RootOverlay canvas. This change allows the effects tiles to scale with the game client size and enables users to drag and reposition the player and opponent effect groups while the overlay is unlocked, matching the behavior of the desktop client.
HSTracker/UIs/Constructed/ActiveEffects · high confidence
Add managed resource configuration and ignore rules
The application now includes a new configuration file (HSTracker.config) and a .gitignore file within the HSTracker/Resources/Managed directory. The .gitignore file explicitly excludes generated or managed DLLs and XML files (HearthDb.dll, HearthDb.xml, BobsBuddy.dll, BobsBuddy.Common.dll) from version control, ensuring that build artifacts and external dependencies are not committed to the repository.
HSTracker/Resources/Managed · high confidence
Added CardDefsCompiler tool to merge split card definition files
A new build-time tool, CardDefsCompiler, has been added to the Tools directory to handle the transition from a single CardDefs.xml to split files for specific card sets. The tool reads multiple XML sources (including the newly split Battlegrounds and Mercenaries definitions) and concatenates them into a single binary blob that the application's database loader can consume, ensuring all card data is available regardless of how the source XML is organized.
Tools · high confidence
Battlegrounds session panel rebuilt in SwiftUI
The Battlegrounds session panel has been completely rewritten in SwiftUI, replacing the previous WPF implementation. This rebuild introduces several user-facing changes: the panel is now a movable overlay widget on the RootOverlay canvas rather than a separate window; a new Composition Stats section displays Tier7 minion composition data with popularity bars and average placements; the Latest Games list now shows hero names that scale to fit long text and allows the MMR delta column to overflow rather than truncating; and the final board from a past game is shown in a tooltip when hovering over a game row. Additionally, the Deity icon is now displayed instead of the Aberration icon for available minion types, and MMR handling has been improved to fall back to the session start MMR when the client reports none.
HSTracker/UIs/Battlegrounds/Session · high confidence
Board overlay hover detection and Mercenaries ability visuals moved to SwiftUI
The board overlay's mouse-over detection and Mercenaries ability visuals have been rewritten in SwiftUI, replacing the previous AppKit/NSTrackingAreas implementation. This change introduces a new \BoardMouseOverDetection\ class that calculates cursor positions against reported geometry to handle hover states on the click-through RootOverlay canvas, enabling accurate flavor text display for minions and hand cards. It also adds dedicated SwiftUI views (\MercenariesAbilityHoverView\, \MercenariesAbilityIconView\) to render Mercenaries ability icons and hover pop-ups, ensuring the ability strips and tooltips are correctly positioned and styled within the new overlay architecture.
HSTracker/UIs/Overlay/Board · high confidence
Bob's Buddy panel ported to SwiftUI with new combat damage insights
The Bob's Buddy Battlegrounds panel has been rewritten in SwiftUI, replacing the previous implementation. This update introduces a new UI that displays combat odds (win/tie/loss rates and lethal chances) during fights, along with side panels showing the average damage dealt and taken by each player. The panel also features a status bar indicating the simulator's state and includes informational pop-ups for new users. This change is part of a broader effort to modernize the UI and improve the clarity of combat statistics for users.
HSTracker/UIs/Battlegrounds/BobsBuddy · high confidence
Comp guides now load in the Battlegrounds lobby and display availability-aware minion pools
The Comp Guides list in the Battlegrounds tab now loads correctly before a match starts, resolving a previous issue where guides failed to appear in the lobby. The guide details now filter core and addon minion cards based on the current in-game minion pool when a match is in progress, ensuring users only see minions available in their current lobby. Additionally, the UI includes a pinned state check that de-duplicates card references across all guide sections to accurately reflect whether all named cards are pinned, and the list view now properly displays Tier7 mode badges and tooltips.
HSTracker/UIs/Battlegrounds/Guides/Comps · high confidence
Core infrastructure refactoring for overlay positioning and settings management
This change introduces foundational components in HSTracker/Core to support the new overlay architecture and improved configuration handling. The new RegionDrawer class calculates normalized screen regions for Hearthstone UI elements (cards, tooltips, hero powers, game menus), enabling the overlay to punch through these areas for better visibility. Paths.swift centralizes file system locations for cards, replays, and logs, while Settings.swift introduces property wrappers for robust UserDefaults management and refines the missing configuration detection to distinguish between path and language issues. Additionally, Events.swift defines new notification keys like tier7\_trial\_activated to support real-time Battlegrounds features, and SizeHelper and Version.swift provide updated window detection and build reporting logic.
HSTracker/Core · high confidence
Counters overlay rewritten in SwiftUI with resizable, draggable layout
The counters overlay has been replaced with a new SwiftUI implementation that integrates directly into the RootOverlay canvas, allowing the counter block to scale with the Hearthstone window size and be repositioned via drag when the overlay is unlocked. The visual style of individual counter chips (circular card art with wrapped text) is preserved from the previous AppKit version, and the layout logic now supports automatic row wrapping in Battlegrounds matches. Additionally, the overlay now shares the global tooltip registry for related-card popups and includes new settings to force the display or hiding of example counters.
HSTracker/UIs/Counters · high confidence
Deck Manager UI and data persistence overhaul
The Deck Manager has been rebuilt to use Realm for deck storage instead of JSON files, introducing a context menu for faster deck management and a new CurveView that visualizes mana curves by minion, spell, and weapon types. The interface now includes a custom DeckCellView with wild/arena indicators, a NewDeck dialog supporting imports from clipboard and files, and an EditDeck window with undo/redo support and keyboard shortcuts. Background loading of deck statistics prevents UI freezing during sorting, and the system now tracks games played and win percentages in the deck list.
HSTracker/UIs/DeckManager · high confidence
Deck Manager interface rebuilt with new layout and import options
The Deck Manager UI has been redesigned, introducing a split-pane layout with a dedicated right-hand panel for deck statistics and curve visualization. The New Deck dialog now offers a choice between creating a deck via the HSTracker builder or importing directly from the clipboard, replacing the previous file-based import method. Additionally, the Edit Deck view has been updated with a segmented control for class selection and a search field to filter cards.
HSTracker/UIs/DeckManager/Base.lproj · high confidence
Deck trackers and secret helper redrawn in SwiftUI
The deck trackers (player and opponent card lists) and the secret helper panel have been rewritten in SwiftUI, replacing the previous AppKit-based \CardBar\ and \TextFrame\ implementations. This change preserves the existing visual themes (Classic, Frost, Dark, Minimal) and layout logic while enabling smoother card animations (fade-in/out, count-change flashes) and consistent theme updates. The Link Opponent Deck panel and hover interactions (card previews, related cards grid, synergy highlights) have also been ported to the new SwiftUI overlay canvas, ensuring they function correctly with the overlay's lock state and scaling.
HSTracker/UIs/Overlay/Trackers · high confidence
Druid card synergies and related-card tracking
The Druid tracker now understands specific card interactions, providing visual highlights and related-card suggestions for key cards. Highlights appear for cards that synergize with specific mechanics, such as Fandral Staghelm and EmbraceOfNature (Choose One cards), LivingSeed (Beasts), and Hybridization (minions of specific costs). Related-card logic is implemented for cards that summon or discover specific entities, including Hadronox (Taunt minions), HydrationStation (Taunt minions in the graveyard), and SkyscreamerEggs (Skyscreamer Hatchlings). Additionally, discover and pool-based cards like AlternateReality, AzsharasTriumph, and ConvokeTheSpirits now define their specific card pools to aid in deck building and in-game decisions.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Druid · high confidence
Faster card database loading via binary format
The app now loads the Hearthstone card database significantly faster by using a pre-compiled binary format (CardDefs.bin) instead of parsing the large XML file at runtime. This binary file is generated at build time from the official CardDefs.xml and includes all card tags, localized strings, and entity data in a memory-mapped structure, reducing launch-time parsing overhead.
HSTracker/Database · high confidence
HSReplay integration overhaul with OAuth, collection sync, and Battlegrounds support
The HSReplay module has been rewritten to use OAuth 2.0 for authentication, replacing the previous method and enabling automatic token renewal. This change introduces automatic collection uploading for both Hearthstone and Mercenaries, with rate limiting and conflict handling for shared accounts. New API endpoints and logic have been added to support Battlegrounds features, including hero pick stats, quest pick stats, tavern pool observations, and composition guides. The preferences pane now allows users to toggle upload settings for specific game modes (Ranked, Casual, Arena, Battlegrounds, Duels, Mercenaries) and displays subscription status. Additionally, replay uploads now require a valid CREATE\_GAME log line and handle sideboard serialization, including specific cosmetic handling for Zilliax Deluxe 3000.
HSTracker/HSReplay · high confidence
HSTracker project file updated with new source files
The Xcode project file (project.pbxproj) has been updated to include a large number of new Swift source files. These additions cover various game modes and features, including Battlegrounds (e.g., BattlegroundsNotificationsView, BattlegroundsStatsPlateChrome), Mercenaries, and general card tracking (e.g., ActiveEffectView, CounterCatalog). The project now builds with these new components, which contribute to the overall functionality of the tracker.
HSTracker.xcodeproj · medium confidence
Hero guides now appear on hover in the Battlegrounds hero picker
When hovering over a hero in the Battlegrounds pick screen, HSTracker now displays a guide tooltip (showing 'How to Play', 'Buddy Guide', and 'Favorable Minions') positioned next to the game's native tooltip, mirroring the behavior of the desktop client. This replaces the previous method where guides were only accessible via the hero picker's stats plates, decoupling guide visibility from the loading state of the stats panel and ensuring the guide appears regardless of whether the stats are shown.
HSTracker/UIs/Battlegrounds/Guides/Heroes · high confidence
Hunter-related card support and highlighting rules
Added implementation for numerous Hunter cards within the Related Cards System, including resurrection logic (e.g., Abominable Bowman, Jewel of N'Zoth), discover pools (e.g., Beast Tripwire, Lock and Load), and state-value pools (e.g., Animal Companion Upgrade, Shimmer Shot). Introduced highlighting rules for synergies such as Beasts (e.g., Exotic Houndmaster, Messenger Buzzard), low-cost spells (e.g., Barak Kodobane), and Secrets (e.g., Phase Stalker). Fixed visibility for opponent-side related cards on cards like Sasquawk and Product 9 to prevent showing unplayed or irrelevant cards.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Hunter · high confidence
Introduce Bob's Buddy error handling and state tracking
The Bob's Buddy integration now includes structured error states (such as missing Mono, unsupported cards, or secrets not supported) and distinct simulation states (initial, combat, shopping, partial, and game over). Failed simulations are parsed to extract the specific .NET exception type and frame, allowing Sentry to group issues by root cause rather than lumping all failures into a single generic error, while environment failures (broken .NET installs) are silently ignored to prevent noise.
HSTracker/BobsBuddy · high confidence
Mercenaries task list overlay rewritten in SwiftUI
The Mercenaries task list overlay has been rebuilt from the ground up using SwiftUI, replacing the previous NSPanel-based implementation. This change introduces a new button view that reveals the task list on hover, a task list view that dynamically sizes its rows based on content width (with a ceiling to prevent overflow), and a unified view model that handles asynchronous data fetching from the game mirror. The new implementation also corrects visual issues present in the old version, such as double-offsetting the mercenary portrait and improper text wrapping for long descriptions, ensuring the overlay integrates cleanly with the RootOverlay canvas.
HSTracker/UIs/Overlay/Mercenaries · high confidence
Migrate UI strings to modern string catalogs
The localization files for the Deck Manager and Stats Manager interfaces have been converted from the legacy format to Apple's modern string catalog format (.xcstrings). This change updates the underlying storage for all user-facing text in these modules, ensuring compatibility with current Xcode localization tools while preserving existing translations for supported languages.
HSTracker/UIs/DeckManager/mul.lproj, HSTracker/UIs/StatsManager/mul.lproj · high confidence
Migrate analytics and crash reporting from AppCenter to Sentry
The analytics subsystem has been replaced with a new implementation using the Sentry SDK. This change introduces dedicated modules for general event tracking (Influx.swift) and specific error reporting for the 'BobsBuddy' feature (Sentry.swift), which now queues and sends terminal case exceptions along with input logs and attachments. This migration updates how user interactions are tracked and how crashes are reported to the development team.
HSTracker/Utility/Analytics · high confidence
Migrate deck and game data storage to Realm
The application has switched its persistence layer for decks, game statistics, and card tracking from JSON files to Realm. This change introduces new model classes (Deck, GameStats, RealmCard, TrackedCard) that utilize Realm's object mapping, enabling more robust data handling for deck lists, match history, and in-game card tracking.
HSTracker/Database/Models · high confidence
Migrate macOS translations to string catalogs
The macOS translation files have been migrated from the legacy \.strings\ format to Apple's modern \.xcstrings\ string catalog format. This change updates the underlying storage structure for localized strings, which may affect how translation tools interact with the project but ensures compatibility with current Xcode localization workflows.
Translations · high confidence
Migrate menu localization to string catalogs
The application's main menu strings have been migrated from the legacy .strings format to the modern .xcstrings string catalog format. This change updates the underlying localization infrastructure for the menu interface, ensuring that text for menu items (such as 'Decks', 'HSTracker', and 'Bug report...') is managed through the new catalog system while preserving existing translations for supported languages.
HSTracker/UIs/mul.lproj · high confidence
Migrate preferences UI strings to string catalogs
The localizable user interface strings for the Preferences pane have been migrated from legacy .strings files to Apple's modern string catalog format (.xcstrings). This change affects all preference sections, including Arena, Battlegrounds, Game, General, Importing, Initial Configuration, Mercenaries, Opponent Trackers, Player Trackers, Splashscreen, The OutFinder, and Trackers, ensuring that all visible labels, tooltips, and settings titles are now managed through the new catalog system.
HSTracker/UIs/Preferences/mul.lproj · high confidence
Migrate settings strings to modern string catalogs
The HSReplay preferences interface has been updated to use Apple's modern string catalog format (.xcstrings) instead of legacy localization files. This migration ensures that UI labels such as 'Duels', 'Subscription status', and 'Login to HSReplay.net' are managed in a standardized structure, improving consistency and maintainability for all supported languages including French, Spanish, Japanese, and others.
HSTracker/HSReplay/mul.lproj · high confidence
New SwiftUI hero picking overlay for Battlegrounds
The Battlegrounds hero picking overlay has been rewritten in SwiftUI, replacing the previous implementation. This new overlay displays a row of stats plates over the offered heroes, showing average placement, tier, and pick rate. It includes interactive features such as hovering over the average placement to reveal a placement distribution graph, and displays an overlay message indicating the MMR bracket and any anomaly adjustments. The view is gated by the existing 'Show hero picking stats' preference and handles thread-safe updates from background watchers.
HSTracker/UIs/Battlegrounds/HeroPicking · high confidence
New board damage counter with accurate attack and weapon calculations
The board damage counter has been rewritten in Swift to provide more accurate tracking of potential damage. This update introduces specific logic for handling Windfury (including Mega Windfury and silence interactions), Titan cards, and dormant minions, ensuring they are excluded or calculated correctly. It also fixes weapon damage calculations by treating weapon health as the limit for attacks and properly accounts for hero powers, infinite attack values, and the Hide Stats tag to prevent incorrect damage totals.
HSTracker/Utility/BoardDamage · high confidence
New dedicated preference panes for Arena, Battlegrounds, Game, and General settings
The preferences interface has been reorganized into four distinct, dedicated XIB files: ArenaPreferences, BattlegroundsPreferences, GamePreferences, and GeneralPreferences. This change introduces specific configuration options for Arena (such as Arenasmith integration, hero picking stats, and deck synergies), Battlegrounds (including Tier 7 overlays, Bob's Buddy, and comp stats), Game settings (Hearthstone path, language selection, and auto-archiving), and General preferences (notifications, replays, and AppHealth badges).
HSTracker/UIs/Preferences/Base.lproj · high confidence
New lightweight HTTP networking layer
The HSTracker/Network module now includes a new, self-contained HTTP implementation (Http.swift) that replaces the previous dependency on Alamofire. This new layer provides synchronous JSON fetching, promise-based GET and upload operations, and multipart support using only Foundation and PromiseKit, simplifying the network stack and reducing external dependencies.
HSTracker/Network · high confidence
Overlay UIs consolidated onto a single SwiftUI canvas with improved opacity masking
The overlay system has been migrated from multiple independent AppKit windows to a unified SwiftUI-based RootOverlay canvas. This consolidation replaces the previous separate windows for components like the opponent hand markers, deck trackers, and various Battlegrounds panels with a single, scalable overlay layer. The new system introduces a robust opacity mask that correctly cuts out regions for game UI elements (such as hovered cards, tooltips, and the friends list) so they remain visible, and supports hover-only interactions that do not block clicks to Hearthstone. Additionally, the opponent hand markers now display accurate source-card tiles and age badges, and the overlay layout is stabilized to prevent crashes on zero-size canvases.
HSTracker/UIs/Overlay/Root · high confidence
Overlay widgets are now draggable and flavor text is suppressed in Battlegrounds
Users can now reposition several overlay elements—including board attack icons, experience counters, flavor text, and turn timers—by dragging them while the overlay is unlocked, replacing the previous fixed positions. Additionally, the flavor text popup is now suppressed during Battlegrounds matches to prevent visual clutter.
HSTracker/UIs/Overlay · high confidence
Port Arena draft UI to SwiftUI
The Arena draft screen's bottom panel and card grid have been rewritten in SwiftUI, replacing the previous implementation. This new UI displays related cards and advisory messages, featuring a scrollable card grid that scales to fit the available space and a dedicated messages sidebar. The port also introduces custom preference keys to manage cursor hover regions and directional triggers for the draft choices, ensuring the overlay correctly handles user interaction during the pick phase.
HSTracker/UIs/Arena · high confidence
Port of HearthWatcher components to Swift
The HearthWatcher module has been ported from C\# to Swift, introducing a comprehensive set of new Swift files that replicate the game-state monitoring logic previously handled by the C\# implementation. This includes dedicated watchers for Arena (supporting both normal and Underground modes), Battlegrounds (including lobby info, teammate board state, and leaderboard hover), Dungeon Runs (including PVP Dungeon Runs), and general game state (such as choices, deck picking, experience, and scene transitions). The port maintains the existing event-driven architecture, ensuring that the overlay and other consumers continue to receive updates on game state changes like card picks, deck edits, and UI visibility.
HSTracker/HearthWatcher · high confidence
Priest card synergies and highlights updated for new expansions
The Priest-related cards system now includes support for new cards from the Ungoro, Wonders of Azeroth, and other recent expansions. This update adds related-card logic for resurrection effects (such as Amulet of Undying, Animate Dead, and Rest in Peace), discover pools (like Amanthul, Confessor Paletress, and Dark Prophecy), and card highlights for synergies involving spells, minions, and specific spell schools (Holy/Shadow). It also introduces new related-card tooltips for graveyard interactions, secrets, and created minions, ensuring the tracker accurately reflects Priest-specific mechanics and deck-building options in the current game version.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Priest · high confidence
Rebuilt Constructed Mulligan Guide UI in SwiftUI
The Constructed Mulligan Guide overlay has been rewritten from AppKit to SwiftUI, introducing new views for the pre-lobby deck status badges, the in-game card statistics row, and the user interaction controls. This change replaces the previous window-based implementation with a unified overlay canvas approach, ensuring the guide correctly handles visibility states, deck status updates, and user toggles while maintaining the existing statistical data display and layout.
HSTracker/UIs/Constructed/Mulligan · high confidence
Redesigned statistics interface with ladder predictions and season filtering
The StatsManager UI has been rebuilt to support a tabbed view for deck statistics, including a new Ladder tab that displays rank progression, games-to-rank estimates, and 90% confidence intervals for climb predictions. The main Statistics window now includes a season picker to filter data by season, a mode selector, and a button to clear all statistics. The interface also features updated table columns for win rates and confidence intervals across different game modes and opponent classes.
HSTracker/UIs/StatsManager/Base.lproj · high confidence
Refactored log parsing architecture with block-based state tracking
The log parsing system in HSTracker has been restructured to improve reliability and support complex game mechanics. The new architecture introduces a \LogEventParser\ protocol and a dedicated \TagChangeHandler\ to manage entity state and tag updates, separating parsing logic from game state handling. A key addition is block-based tracking (\BlockStartRegex\, \blockStart\, \blockEnd\), which allows the parser to correctly handle nested game events and context-specific actions (such as deathrattles or spell effects) that were previously difficult to track accurately. This change also includes improved handling of entity resolution for unknown players and better support for Battlegrounds-specific tags and combat phases.
HSTracker/Logging/Parsers · high confidence
Refactored secret tracking with MultiIdCard support and remote configuration
The secret tracking system has been refactored to support cards with multiple IDs via the new MultiIdCard class, improving accuracy for secret detection across different game formats (Wild, Standard, Classic, Twist). The SecretsManager now utilizes an AvailableSecretsProvider protocol, allowing secret lists to be sourced from remote configuration (RemoteArenaSettings) or local fallbacks, which enhances flexibility for live updates. Additionally, the Secret class now explicitly manages excluded secrets per hero class, ensuring that revealed or resolved secrets are correctly hidden from the tracker.
HSTracker/Hearthstone/Secrets · high confidence
Removal of French localization strings
The French localization file (Localizable.strings) has been deleted from the application resources. This removes the French translations for core UI elements, including menu items (File, Edit, Preferences), deck import dialogs, and class names (Shaman, Hunter, etc.), which will likely cause the application to display English fallback text or crash if the locale is forced to French without alternative resources.
resources/fr.lproj · high confidence
Removal of hardcoded English localization strings
The file containing static English translations for UI elements (such as menu items, class names, and error messages) has been deleted. This change removes the hardcoded fallback strings, likely shifting the application to rely on system-provided localization or a different localization strategy, which may affect how text is displayed if no other localization sources are available.
resources/Base.lproj · high confidence
Removal of legacy card cell view implementation
The \CardCellView\ class, which handled the manual drawing of card images, frames, costs, and counts in the table view, has been removed. This change eliminates the custom \drawRect\ logic that rendered card details using specific fonts (Belwe Bd BT) and image assets, indicating a shift to a different rendering approach for displaying cards in the interface.
app/views · high confidence
Removed legacy Core Data model and configuration
The application no longer uses the previous Core Data schema or its associated configuration file. Specifically, the \cdq.yml\ configuration and the \0001 initial.xcdatamodel\ (defining Deck, Mechanic, and Card entities) have been deleted. This change removes the legacy data model structure from the resources, likely as part of a migration to a new storage mechanism or a different data handling approach.
resources · medium confidence
Shaman card synergy tracking and highlighting
The Shaman section of the Related Cards System has been populated with logic for dozens of cards, enabling the tracker to highlight synergistic cards in your deck and show related card suggestions. This includes highlighting spells for cards like CactusCutter and Cosmonaut, identifying Murlocs for IceFishing, and displaying the last Battlecry minion for BrilliantMacaw. The system also implements dynamic discovery pools for cards such as AzsharanScroll, MountainMap, and OnceUponATime, and handles cost-offset transformations for cards like Evolve, Devolve, and Mutate.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Shaman · high confidence
Stability and compatibility improvements in core extensions
This update introduces several stability and compatibility improvements across the core extension library. The Array extension now includes a bounds-checked subscript (safeIndex) to prevent crashes when accessing indices from external sources, such as game memory or HSReplay responses, which previously caused the app to crash on launch with new scene modes. The NSImage extension has been refactored to use thread-safe drawing handlers instead of deprecated lockFocus methods, ensuring safe image processing from background threads. Additionally, the String extension now provides a fallback to the development localization (typically English) for untranslated strings, improving the user experience when language packs are incomplete.
HSTracker/Core/Extensions · high confidence
Support for new Neutral cards and card interactions in Patch 35.0
The Neutral card definitions in the Related Cards System have been updated to support Patch 35.0. This includes adding related card logic for new cards such as AeonWizard, AmberWarden, and Arfus, as well as implementing card highlighting for synergies like CaptainsParrot and Chromie. The update also covers resurrection cards like EndbringerUmbra and FateSplitter, and handles specific mechanics such as secrets and spell pools for cards like DevolvingMissiles and EnchantedCauldron.
HSTracker/Hearthstone/RelatedCardsSystem/Cards/Neutral · high confidence
Tracker UIs consolidated into a single RootOverlay window
The tracker interface has been refactored to move multiple previously separate floating windows (such as deck trackers, secret helpers, and various Battlegrounds/Mercenaries panels) into a single unified RootOverlay window. This change improves fullscreen compatibility and reduces visual clutter by managing all tracker elements within one overlay layer, while also introducing an animated card list for smoother deck updates.
HSTracker/UIs/Trackers · high confidence
Updated game mode and card set enums for new Hearthstone content
The logging enums have been updated to support recent Hearthstone updates. Game mode and game type enums now include entries for Duels, Mercenaries, Underground Arena, and various Battlegrounds variants (including Duos and AI modes). The CardSet enum has been expanded with new sets such as Return of the Lich King, Path of Arthas, Battle of the Bands, Titans, Whizbang's Workshop, and others, ensuring the tracker correctly identifies cards from these expansions.
HSTracker/Logging/Enums · high confidence
Workspace configuration and source control setup
The Xcode workspace has been restructured to include shared settings and source control blueprints. A new workspace data file and settings file (with previews disabled) were added, and the workspace checks plist was moved to the standard location. The source control blueprint now tracks three repositories: the main HSTracker project, the HearthMirror submodule, and the HSTracker-OpenCV submodule.
HSTracker.xcodeproj/project.xcworkspace · high confidence
Test coverage
Expanded test coverage for core algorithms, Battlegrounds logic, and UI components; Removed obsolete test files.
Dependencies
Migrate build tooling to Swift Package Manager and Fastlane
The project has replaced its previous dependency management and build automation systems with modern standards. For iOS/macOS dependencies, the project now uses Swift Package Manager (SPM), as evidenced by the new Package.resolved file pinning libraries such as Realm, Sentry, and Sparkle, replacing the older Carthage-based approach. For Ruby-based tooling, the Gemfile has been simplified to include Fastlane, Nokogiri, and Redcarpet, removing legacy gems like Cocoapods, MotionKit, and Sugarcube, which streamlines the CI and build process.
(dependencies) · high confidence
Housekeeping
Added Xcode project schemes for HSTracker and its tests
The HSTracker Xcode project now includes shared scheme definitions for the main application and its test bundle. These schemes configure the build, test, launch, profile, analyze, and archive actions, ensuring that the app and its UI tests are correctly set up for development and CI workflows.
HSTracker.xcodeproj/xcshareddata · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 47 → 52 (+5.3)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 80 → 79 (-0.3)
- Architecture 95 → 88 (-6.9)
- Maturity 51 → 51 (-0.7)
- Readiness 45 → 45 (-0.3)
- Security 34 → 55 (+21.3)
- Domain Modelling 91 → 91 (+0.0)
- Performance 60 (new)
Resolved (77)
- ArenaPickHelperViewModel.updateHoveredChoice (cognitive 16) (HSTracker/UIs/Arena/ArenaPickHelperViewModel.swift)
- BoardMinionView.tooltipDisplay (cognitive 29) (HSTracker/UIs/Trackers/BoardOverlay.swift)
- BoardMinionView.tooltipDisplay (cyclomatic 18) (HSTracker/UIs/Trackers/BoardOverlay.swift)
- BoardOverlayView.updateAbilitiesVisibility (cognitive 26) (HSTracker/UIs/Trackers/BoardOverlay.swift)
- BoardOverlayView.updateBoardState (cognitive 46) (HSTracker/UIs/Trackers/BoardOverlay.swift)
- BoardOverlayView.updateBoardState (cyclomatic 31) (HSTracker/UIs/Trackers/BoardOverlay.swift)
- CardHudContainer.update (cognitive 68) (HSTracker/UIs/Trackers/CardHudContainer.swift)
- CardHudContainer.update (cyclomatic 20) (HSTracker/UIs/Trackers/CardHudContainer.swift)
- Change coupling: Game.swift ↔ Tier7PreLobbyViewModel.swift (HSTracker/Logging/Game.swift)
- Change coupling: MirrorHelper.swift ↔ Watchers.swift (HSTracker/HearthMirror/MirrorHelper.swift)
- Change coupling: PlayerTrackersPreferences.swift ↔ Tracker.swift (HSTracker/UIs/Preferences/PlayerTrackersPreferences.swift)
- ClassTooLong: Tracker (HSTracker/UIs/Trackers/Tracker.swift)
- ConstructedMulliganGuide.update (cognitive 22) (HSTracker/UIs/Constructed/Mulligan/ConstructedMulliganGuide.swift)
- ConstructedMulliganGuidePreLobby.update (cognitive 31) (HSTracker/UIs/Constructed/Mulligan/ConstructedMulliganGuidePreLobby.swift)
- ConstructedMulliganGuidePreLobby.update (cyclomatic 16) (HSTracker/UIs/Constructed/Mulligan/ConstructedMulliganGuidePreLobby.swift)
- Coverage not measured — no coverage collector is wired up
- Documentation: no architecture or design documentation (README.md)
- Duplicated block (10 lines × 2) (HSTracker/Hearthstone/CounterSystem/BgCounters/DemonFodderCounter.swift)
- Duplicated block (10–11 lines × 4) (HSTracker/UIs/Trackers/CardHudContainer.swift)
- Duplicated block (15–16 lines × 2) (HSTracker/UIs/Trackers/Tracker.swift)
- …and 57 more
New (127)
- BattlegroundsCompGuideViewModel.pinnableCardIds (cognitive 16) (HSTracker/UIs/Battlegrounds/Guides/Comps/BattlegroundsCompGuideViewModel.swift)
- BattlegroundsMinionArtView.body (cognitive 18) (HSTracker/UIs/Battlegrounds/Guides/BattlegroundsMinionArtView.swift)
- BattlegroundsMinionArtView.body (cyclomatic 17) (HSTracker/UIs/Battlegrounds/Guides/BattlegroundsMinionArtView.swift)
- BoardMouseOverDetection.update (cognitive 44) (HSTracker/UIs/Overlay/Board/BoardMouseOverDetection.swift)
- BoardMouseOverDetection.update (cyclomatic 21) (HSTracker/UIs/Overlay/Board/BoardMouseOverDetection.swift)
- BoardOrderViewModel.update (cognitive 19) (HSTracker/UIs/Overlay/Board/BoardOrderViewModel.swift)
- CardTileView.content (cognitive 16) (HSTracker/UIs/Overlay/Trackers/CardTileView.swift)
- CardTooltipPanel.placedFrame (cyclomatic 17) (HSTracker/UIs/Battlegrounds/Guides/CardImageTooltip.swift)
- Change coupling: RootOverlayViewModel.swift ↔ WindowManager.swift (HSTracker/UIs/Overlay/Root/RootOverlayViewModel.swift)
- Change coupling: SizeHelper.swift ↔ RootOverlayViewModel.swift (HSTracker/Core/SizeHelper.swift)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (HSTracker/Hearthstone/CounterSystem/BgCounters/FreeRefreshCounter.swift)
- Duplicated block (10 lines × 2) (HSTracker/Hearthstone/CounterSystem/Counters/BeastsSummonedThisGameCounter.swift)
- Duplicated block (10 lines × 2) (HSTracker/Hearthstone/CounterSystem/Settings/CounterVisibilitySettings.swift)
- Duplicated block (10 lines × 2) (HSTracker/UIs/Battlegrounds/MinionPinning/BattlegroundsMinionPinningView.swift)
- Duplicated block (10 lines × 2) (HSTracker/UIs/Preferences/CountersPreferences.swift)
- Duplicated block (11 lines × 2) (HSTracker/UIs/Arena/ArenaPlaqueViewModel.swift)
- Duplicated block (11 lines × 2) (HSTracker/UIs/Arena/ArenaPreDraftView.swift)
- Duplicated block (11 lines × 2) (HSTracker/UIs/Battlegrounds/Guides/Comps/CompGuideDetailView.swift)
- …and 107 more
Changes since last survey
- 102 commits — 80 feature/other, 22 fixes
By area
- HSTracker/UIs — 38 commits
- (root) — 26 commits
- HSTracker/Logging — 13 commits
- HSTracker/Hearthstone — 4 commits
- HSTracker.xcodeproj/project.pbxproj — 3 commits
- HSTracker/BobsBuddy — 3 commits
- HSTracker/HSReplay — 3 commits
- HSTracker/Utility — 3 commits
- HSTracker/Assets — 2 commits
- HSTracker/BobsBuddy-version.txt — 2 commits
- HSTracker/Database — 2 commits
- HSTrackerTests/DatabaseTests.swift — 1 commit
- HSTrackerTests/SecretTests.swift — 1 commit
- Translations/macOS — 1 commit
Notable commits
- fix: Add Comp Guides scrolling fix to the changelog
- fix: Fix the mulligan guide outstaying the mulligan
- fix: Stop one broken Bob's Buddy install drowning out the real simulation bugs
- fix: fix: add the Reign of the Black Empire card set
- fix: fix: apply Battlegrounds tag overrides to card races
- fix: fix: attach the Bob's Buddy exception text instead of sending it as extra
- fix: fix: blank Aberration icon while the Deity portrait is loading
- fix: fix: fade the Battlegrounds overlay while a leaderboard hero is hovered
- fix: fix: give Bob's Buddy each side's own objectives
- fix: fix: hide Battlegrounds tavern pinning when the minion browser is off
- fix: fix: hide the Battlegrounds max gold counter once the game shows it
- fix: fix: include Duos-exclusive tavern spells in the keyword filter in Duos
- fix: fix: render deities in the last known board popup with white stats
- fix: fix: rewind replays not processing
- fix: fix: show only the golden version for ONLY_GOLD_IN_GUIDE minions
- fix: fix: skip the discover card mask for Battlegrounds shop choices
- fix: fix: sort the Battlegrounds minion type filter alphabetically
- fix: fix: stop adding ghost board's Fang Anklet enchant
- fix: fix: stop the comp guide truncating long names and crowding its headings
- fix: fix: stop the mulligan guide's show/hide button stretching the overlay
- …and 82 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
HearthSim/HSTracker was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 41f89c04f2b1bda13f60e08822a6fb2e1602f561 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.