Dota Companion began as a popup: one click, a glance at your last ten games, and out. Version 2.0 made the full page the main place to work. Version 2.5 finishes the thought. The popup is gone, the toolbar button opens Chrome’s side panel, and the app finally has room to hold everything it has learned to do. If you would rather just try it, it is on the Chrome Web Store; the rest of this post is what changed, why, and what went wrong on the way.
One honest note on versions: the store always serves the newest build Google has approved, so 2.5 reaches you as an automatic update once it clears review. This post describes that build. The project page has the short version and a changelog.
Why the popup had to go
At 420 pixels wide, eleven tabs wrapped onto two rows, with Settings stranded alone on the second. A popup also vanishes the moment you click anywhere else, which is the wrong behaviour for something you consult while doing something else. So the toolbar button now opens the side panel, which stays put as you switch tabs. The full page is its maximized form: a button in the header opens it, and a new minimize button brings you back to the panel and closes the tab.

That change costs one new permission, sidePanel, used for nothing except showing the interface in the panel. The app still asks for no account and no API key, still keeps your notes and goals on your device, and still does not request the tabs permission. It needs Chrome 116 or newer. I have only run the side panel in Chrome; if you try it in another Chromium browser, I would like to hear what happens. Chrome documents the side panel API if you want the details.
A tab bar that stays on one line
Tabs that do not fit now fold into a More menu, and whichever tab you are on is always kept on the bar, so you are never looking at a selection that is not visible. On the full page there is room for all ten. Everything works from the keyboard: arrow keys move along the tabs, and the More menu opens, navigates and closes with Esc like any menu should.
Settings is no longer a tab at all. The gear in the header opens a drawer with four plain cards — Player, Appearance, Data and a clearly separated Danger zone — and a real on/off switch for “Refresh on open”. It is a proper dialog: focus moves in, Tab stays inside, Esc closes it, and focus returns to the gear.
Favorites, and a review for each
Star the heroes you care about and each one gets a review: your lifetime record on that hero, your last ten games as a row of W and L chips, and how your gold, experience, last hits, hero damage and kills per minute compare with everyone else who plays that hero. The record is adjusted for sample size, and it is pulled toward your own overall win rate rather than toward fifty percent, because the question a favorite hero answers is “am I better here than I usually am?” A 2–0 record is not read as a hundred percent.

Once the guide data is loaded, the review also shows what you finish games with on that hero. That is your final inventory, not purchase order; purchase order needs a parsed match, and not every match is parsed.
A guide book with nothing hand-written in it
I did not want a guide section that is out of date after the next patch and becomes a permanent writing job. So every guide is built from data OpenDota already serves: what a hero, ability, talent or item is, what other players build, how a hero fares against each enemy, and what you have built. Search finds heroes, abilities and items together. Hero guides cover lore, abilities, the talent ladder, facets, what people buy in each phase of the game, and matchups. Item guides show what an item builds from and what it builds into. There are role guides too, ranking heroes by win rate in your own rank bracket.

Two things you should know. The guide data is a download of about two megabytes, fetched once when you press the button and kept on your device. And about two thirds of talent names arrive from the source with their numbers missing, so the guide shows an X where it does not know the value and says so, rather than inventing one. Matchup lists leave out enemies you have too few games against, and say how few that cutoff is. The data comes from OpenDota.
The ward map, and a polite way to copy a better player
The Wards tab draws where you place observers and sentries, from the matches OpenDota holds. Switch to compare mode, paste another player’s OpenDota or Steam profile, and the map marks the spots they use that you use far less, as numbered rings with a plain-language list beside them. In my own test, one comparison flagged twelve spots. Every one was a place I do ward, just much less often than they do.

It is a comparison with one player’s habits, not a rule, and the board is a schematic, not the in-game minimap. A count of wards is not a win rate; where someone wards is not proof it is where you should.
Cards you can post
The share panel gained four cards: match history, a single match, a favorite hero, and the ward map. Each comes in a wide size for X and Facebook and a square one for Instagram, with Copy image, Download and the system share sheet. The image is the share. Your stats never ride along in a link, so nothing about you lands in anyone’s server log.
Smaller changes that took longest
Dropdowns now sit well clear of the text above them, and keyboard focus draws a single ring instead of two that used to collide. I measured that ring at about 12 to 1 against the dark background and about 5 to 1 against the light one. The inventory page had been inheriting the popup’s width limit, which pinned it to a narrow column at the left of a wide screen; it is now a centred column with its header aligned to its content.
What went wrong on the way
A script I wrote to keep the translation catalog in sync wrote nine invalid keys into it, and Chrome refused to load the extension at all. Nothing I had run actually loaded the extension, so every check was green while the thing could not start. I now load the unpacked build in a real browser before anything is packaged. The square ward card also drew its totals below the bottom edge of the image; I only saw that by looking at an exported card, and there is now a test that checks every card at both sizes. Two open windows could overwrite each other’s favorites, and a thin matchup sample printed the same five heroes under both “does best against” and “struggles against”. All four were fixed before this reached the store.
What is next
Rampage cards, which need parsed matches. The new text is English only for now, so Simplified Chinese falls back to English until it is translated. And a real check of the side panel outside Chrome.
The earlier chapters of this build are on the blog: what 1.9.0 changed, how the inventory half got built, why it is deliberately slow and after patch 7.41e, a 50 percent win rate tells you nothing. If you are reading this to decide whether to install it, the project page has the feature list and the privacy notes, and the Chrome Web Store listing is where updates arrive. Dota Companion is not affiliated with or endorsed by Valve.

Leave a Reply