• Added support for new web-gui into Docker

  • Implemented whole-new web-based GUI with Flask

  • Removed old GUI (Etrigan) from code and resources

  • Removed sqliteweb

  • Removed Etrigan (GUI)


  • Added warning about Etrigan (GUI) being deprecated

  • More docs (do not run on same machine as client)

  • Added Docker support for multiple listen IPs

  • Added graceful Docker shutdowns


  • More Windows 10/11 keys

  • Fixed some deprecation warnings

  • Fixed SO_REUSEPORT platform checks

  • Fixed loglevel “MININFO” with Docker

  • Added Docker healthcheck

  • Added UID/GID change support for Docker

  • Dependabot alerts


  • Integrated Office 2021 GLVK keys & database

  • Docker entrypoint fixes

  • Updated docs to include SQLite stuff

  • Fix for undefined timezones

  • Removed LOGFILE extension checks

  • Added support for Windows 11


  • Helm charts for Kubernetes deployment

  • Windows 2022 updates

  • Faster Github Action builds


  • Addded GHCR support

  • Docs table reformatted

  • Updated GUI

  • Windows Sandbox fix

  • Added contribution guidelines

  • Docker multiarch

  • Reshot screenshots in docs


  • Sql database path customizable.

  • Sql database file keeps different AppId.

  • Support for multi-address connection.

  • Added timeout send / receive.


  • py-kms Gui: now matches all cli options, added modes onlyserver / onlyclient, added some animations.

  • Added suboptions FILEOFF and STDOUTOFF of -F.

  • Created option for asynchronous messages.

  • Cleaned options parsing process.


  • Optimized pretty-print messages process.

  • Added -F FILESTDOUT option.

  • Added deamonization options (via Etrigan project).

  • py-kms GUI resurrected (and improved).

  • Cleaned, cleaned, cleaned.


  • Merging for Python2 / Python3 compatibility all-in-one.

  • Added new options:

    • timeout, logsize.

    • more control on logging and info visualization (custom loglevel and stdout logfile redirection) to match this request.

  • Setup for multithreading support.

  • Graphical improvements:

    • added a (“really silly”) tkinter GUI as an alternative to command line.

  • Dockerized with sqlite-web.

  • Fixed activation threshold.

  • Renamed files, cosmetics and many other little big adjustments.


  • Implemented some good modifications inspired by this other fork.

    • Clean up code ( deleted no longer useful files,,; erased useless functions and import modules )

    • Reading parameters directly from a slightly modified KmsDataBase.xml ( created with LicenseManager 5.0 by Hotbird64 HGM ) with

  • Added support for Windows Server 2019 and Office 2019.

  • Improved random EPID generation.

  • Corrected this in


  • py-kms NOW is for Python3 too ( py3-kms ), the previous one ( written with Python2 ) is renamed py2-kms

  • Repaired logging messages

  • Added pretty processing messages


  • Added option verbose logging in a file

  • Updated “” with new SKUIDs

  • Added a brief guide “py-kms-Guide.pdf” ( replaced “client-activation.txt” )

  • Added a well formatted and more complete list of volume keys “py-kms-ClientKeys.pdf” ( replaced “client-keys.txt” )


  • Updated (Matches LicenseManager 4.6.0 by Hotbird64 HGM)


  • Fixed major bug on Response function

  • Fixed Random PID Generator (thanks: mkuba50)


  • Added missing UUID, credits: Hotbird64

  • Added Windows Server 2016 in random PID generator


  • Added Windows Server 2016 UUID

  • Fixed GroupID and PIDRange

  • Added Office 2016 CountKMSID


  • Added Windows 10 UUID

py-kms_2014-10-13 build 3:

  • Added Client Activation Examples: “client-activation.txt”

  • Added Volume Keys: “client-keys.txt”

py-kms_2014-10-13 build 2:

  • Added missing skuIds in file “”. Thanks (user_hidden)

py-kms_2014-10-13 build 1:

  • The server now outputs the hwid in use.

  • The server hwid can be random by using parameter: “-w random”. Example: “python -w random”

  • Included file “” to generate random hwid on demand.

  • Included file “” to generate random epid and hwid on demand.


  • The server HWID can now be specified on the command line.

  • The client will print the HWID when using the v6 protocol.


  • Made the sqlite3 module optional.

  • Changed the “log” flag to an “sqlite” flag and made a real log flag in preparation for when real request logging is implemented.


  • Added RPC response decoding to the KMS client emulator.


  • The v4 hash now uses the proper pre-expanded key.


  • Modified the v4 code to use the custom aes module in order to make it more streamlined and efficient.


  • Removed the need for the pre-computed table ( for v4 CMAC calculation, cutting the zip file size in half.


  • Switched to getting the to-be-logged request time from the KMS server instead of the client.


  • You can now specify the CMID and the Machine Name to use with the client emulator.


  • Added a request-logging feature to the server. It stores requests in an SQLite database and uses the ePIDs stored there on a per-CMID basis.

  • The client emulator now works for v4, v5, and v6 requests.

  • The client emulator now also verifies the KMS v4 responses it receives.


  • Added a client (work in progress) that right now can only generate and send RPC bind requests.

  • Added a bunch of new classes to handle RPC client stuff, but I might just end up moving their functions back into the old classes at some point.

  • Lots of other code shuffling.

  • Made the verbose and debug option help easier to read.

  • Added some server error messages.


  • Made some really huge internal changes to streamline packet parsing.


  • Added tons of new SKU IDs


  • Added Office SKU IDs

  • Small internal changes


  • Made the rpcResponseArray in rpcRequest output closer to spec


  • SKUID conversion: Converts the SKUID UUID into a human-readable product version for SKUIDs in its SKUID dictionary.

  • Fancy new timezone conversion stuff.

  • Enabled setting custom LCIDs.

  • Data parsing is now handled by

  • Some other minor stuff you probably won’t notice.


  • Got rid of custom functions module (finally)


  • Simplified custom functions module

  • Got rid of “v4” subfolder

  • Cleaned up a bunch of code


  • Added timestamps to verbose output

  • Made the verbose output look better


  • Moved some stuff into verbose output

  • Enabled server ePIDs of arbitrary length


  • Permanently fixed machineName decoding

  • Adheres closer to the DCE/RPC protocol spec

  • Added client info to program output

  • Small formatting changes


  • First working release added to the Mega folder.