github markus-wa/demoinfocs-golang v5.3.0
v5.3.0 - Encrypted Net-Messages & Demos after the 2026-11-11 Update

latest release: v6.0.0-rc.2
one hour ago

Go Get

go get -u github.com/markus-wa/demoinfocs-golang/v5/pkg/demoinfocs@v5.3.0

The v6 line is in release candidates; v5 stays the stable line for now.

New Features

  • Parse & decrypt encrypted net-messages (e.g. chat messages in Valve matchmaking demos) by @blinkzz in #696 and @akiver in #697
    • CSVCMsg_EncryptedData is now a parseable net-message. Set ParserConfig.NetMessageDecryptionKey and the inner message is decrypted and dispatched as if it had been received in plain text
    • demoinfocs.MatchInfoDecryptionKey(b) extracts the key from the match730_*.dem.info file that ships next to Valve matchmaking demos
    • Two new warning types when the key is missing or a message can't be decrypted: events.WarnTypeMissingNetMessageDecryptionKey, events.WarnTypeCantReadEncryptedNetMessage

Fixes

  • CRASH FIX: demos recorded since the CS2 update of 2026-11-11 parse again by @markus-wa in #767 (#763)
    • The update added uint8 fields with the fixed8 encoder to CCSPlayerController (m_recentKillQueue, m_nFirstKill, m_nKillCount). They were read as varints, so any value >= 128 consumed an extra byte and desynced the rest of the packet; parsing then died with fatal error: out of memory in Entity.readFields (or a decode error)
    • Fields with a fixed8/fixed16/fixed32 encoder are now read as N raw bits, keeping the Go type the base type's varint decoder returns, so property getters such as RankType() don't change type. Backport of #764 and #765
    • Demos recorded before the update have no fixedN fields, so their output doesn't change
  • Equipment.AmmoInMagazine() no longer subtracts the m_iClip1 offset twice by @markus-wa in #719
    • On CS2 demos it returned one round too few for every weapon, and an empty magazine underflowed to 4294967295
    • ⚠️ Behaviour change: it now returns one more than before. Callers that added +1 downstream must drop it
  • GameRules.RoundTime() uses the CS2 property name by @markus-wa in #727
    • It looked up the CS:GO property cs_gamerules_data.m_iRoundTime, so it always returned ErrFailedToRetrieveGameRule on v5 (which parses CS2 demos only). It now returns the round time (e.g. 1m55s)
    • ⚠️ Behaviour change: code that relied on the error to fall back to a default now gets the real value

Changes

  • chore: update protobuf messages
  • CI: analyze Go only in CodeQL (@markus-wa in #769), lint v5 changes against the PR base branch (#698), follow the master → main rename (#722)

New Contributors

Full Changelog: v5.2.0...v5.3.0

Discussions / Chat / Announcements

Discord Chat

Don't miss a new demoinfocs-golang release

NewReleases is sending notifications on new releases.