Skip to content
KMS Server Emulator written in Python
Branch: master
Clone or download
Latest commit 6ad01d9 Dec 3, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
previous uploaded py-kms zips Nov 14, 2018
py2-kms Fix missing values Dec 3, 2018
py3-kms Fix missing values Dec 3, 2018
LICENSE updated readme Nov 14, 2018


py-kms is a port of node-kms created by cyrozap, which is a port of either the C#, C++, or .NET implementations of KMS Emulator. The original version was written by CODYQX4 and is derived from the reverse-engineered code of Microsoft's official KMS.


  • Responds to V4, V5, and V6 KMS requests.
  • Supports activating:
    • Windows Vista
    • Windows 7
    • Windows 8
    • Windows 8.1
    • Windows 10 ( 1511 / 1607 / 1703 / 1709 / 1803 / 1809 )
    • Windows Server 2008
    • Windows Server 2008 R2
    • Windows Server 2012
    • Windows Server 2012 R2
    • Windows Server 2016
    • Windows Server 2019
    • Microsoft Office 2010 ( Volume License )
    • Microsoft Office 2013 ( Volume License )
    • Microsoft Office 2016 ( Volume License )
    • Microsoft Office 2019 ( Volume License )
  • It's written in Python:
    • py2-kms tested with Python 2.7.12
    • py3-kms tested with Python 3.5.2


  • Python 3.x or Python 2.7.x or Python 2.6.x with the argparse module installed.
  • If the tzlocal module is installed, the "Request Time" in the verbose output will be converted into local time. Otherwise, it will be in UTC.
  • It can use the sqlite3 module so you can use the database function, storing activation data so it can be recalled again.
  • Installation Example on Ubuntu:
    • sudo apt-get install python-pip
    • sudo pip install tzlocal
    • sudo apt-get install python-sqlite or sudo pip install pysqlite


  • NOTE: Pay attention to how invoke scripts, if you want to run py2-kms use python... while for py3-kms use python3..., also depending on the Python versions that resides in your PC.
  • To start the server, execute python [IPADDRESS] [PORT]. The default IPADDRESS is "" ( all interfaces ) and the default PORT is "1688".
  • To run the client (only for testing purposes), use python IPADDRESS [PORT]. Argument IPADDRESS is always required, while the default PORT is "1688", so a valid command is: python
  • To show the help pages type: python -h and python -h
  • To generate a random HWID use -w option: python -w random
  • To get the HWID from any server use the client, for example type: python 1688 -m Windows8.1 -v INFO

Other Important Stuff

Consult the Wiki for more informations about activation with py-kms and to get GVLK keys.



You can’t perform that action at this time.