From https://github.com/AveYo/ShowMMR

Numbers are displayed like in the old client - the Nov 19 2017 one still works - example: 12345 (+45)
New numbers are saved locally per-user, serialized to JOY1 - JOY32 binds for up to 640 recent matches
Your defined binds - that reside in slot0 - will not be affected Optionally retrieve previous history via ShowMMR tool, and replace local file with the generated one

                                        _______________________
                        SetTableValue  |                      3|    GetTableValue
                        _______________| scripts /             |____________________
                       |  __>___>___>__  custom_net_tables.txt  ___>___>___>___>__  |
                       |^|             |_______________________|                  | |
                 ______| |_____                                                   |v|
                |             2|         SendCustomGameEvent       _______________| |________________
                | scripts /    |__________________________________|                                 4|
  SendToConsole | vscripts /    ___<___<___<___<___<___<___<___<__  panorama /                       |
   _____________| core /       |                                  | layout /                         |
  |  _<___<___<_  coreinit.lua |          DOTARankUpdated         | dashboard_background_manager.xml |
  | |           |______   _____|   DOTAShowProfileHeroStatsPage   |_______________   ________________|
  | |                  | |               #ranked_mmr_value                        | |
  |v|    LoadKeyValues |^|                                                        |v| core.Data.history
  | |      ____________| |___________                          ___________________| |__________________
  | |     |                         1|                        |                                       5|
  | |_____|  cfg /                   |                        | panorama /                             |
  |____>__   user_keys_%d_slot3.vcfg |                        | layout /                               |
          |__________________________|                        | dashboard_page_profile_recent_game.xml |
                                                              |________________________________________|

If any game is running, only cached Data history is used when opening the profile page Back at dashboard, event signals script to retrieve #ranked_mmr_value and update table if needed
It may look like a lot of work to just get a number from ui and save it in a table locally That is because vscript and panorama are finally hardened / crippled, no more ~arbitrary r/w!

These scripts do not touch any gameplay elements, should be whitelist-able at a glance Knowing Valve have historically disabled specific modding features rather than carpet banning users
Nothing bad should happen if there is any official griefing regarding this harmless dashboard mod
Still, use at your own risk!

To install the mod:

  • open Steam > Library > Dota2 > right-click Properties > Installed files > Browse…
  • copy release/game/ subfolder over there, overwriting existing files: game/dota_mods/pak01_dir.vpk game/dota/gameinfo_branchspecific.gi
  • or skip gameinfo_branchspecific.gi and use instead launch option: -language mods

To remake the mod from source:

  • need Dota2 Workshop Tools DLC for resourcecompile xml source files
  • run dota_mod_builder.bat, auto-compiled vpkmod will create the release vpk archive

To explore release/game/dota_mods/pak01_dir.vpk and compiled *_c content: