aboutsummaryrefslogtreecommitdiffstats
path: root/docs/doing-a-release.rst
blob: e7ee88fa0c1259a28c5b6a7bfd7540034d825162 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Doing a release
===============

Doing a release of ``cryptography`` requires a few steps.

Security Releases
-----------------

In addition to the other steps described below, for a release which fixes a
security vulnerability, you should also include the following steps:

* Request a `CVE from MITRE`_. Once you have received the CVE, it should be
  included in the :doc:`changelog`. Ideally you should request the CVE before
  starting the release process so that the CVE is available at the time of the
  release.
* Ensure that the :doc:`changelog` entry credits whoever reported the issue.
* The release should be announced on the `oss-security`_ mailing list, in
  addition to the regular announcement lists.

Verifying OpenSSL version
-------------------------

The release process creates wheels bundling OpenSSL for Windows, macOS, and
Linux. Check that the Windows and macOS Jenkins builders have the latest
version of OpenSSL installed and verify that the latest version is present in
the ``pyca/cryptography-manylinux1`` docker containers. If anything is out
of date follow the instructions for upgrading OpenSSL.

Upgrading OpenSSL
-----------------

Use the `upgrading OpenSSL issue template`_.

Bumping the version number
--------------------------

The next step in doing a release is bumping the version number in the
software.

* Update the version number in ``src/cryptography/__about__.py``.
* Update the version number in ``vectors/cryptography_vectors/__about__.py``.
* Set the release date in the :doc:`/changelog`.
* Do a commit indicating this.
* Send a pull request with this.
* Wait for it to be merged.

Performing the release
----------------------

The commit that merged the version number bump is now the official release
commit for this release. You will need to have ``gpg`` installed and a ``gpg``
key in order to do a release. Once this has happened:

* Run ``python release.py {version}``.

The release should now be available on PyPI and a tag should be available in
the repository.

Verifying the release
---------------------

You should verify that ``pip install cryptography`` works correctly:

.. code-block:: pycon

    >>> import cryptography
    >>> cryptography.__version__
    '...'
    >>> import cryptography_vectors
>>> cryptography_vectors.__version__
        '...'

Verify that this is the version you just released.

For the Windows wheels check the builds for the ``cryptography-wheel-builder``
job and verify that the final output for each build shows it loaded and linked
the expected OpenSSL version.

Post-release tasks
------------------

* Update the version number to the next major (e.g. ``0.5.dev1``) in
  ``src/cryptography/__about__.py`` and
  ``vectors/cryptography_vectors/__about__.py``.
* Close the `milestone`_ for the previous release on GitHub.
* Add new :doc:`/changelog` entry with next version and note that it is under
  active development
* Send a pull request with these items
* Check for any outstanding code undergoing a deprecation cycle by looking in
  ``cryptography.utils`` for ``DeprecatedIn**`` definitions. If any exist open
  a ticket to increment them for the next release.
* Send an email to the `mailing list`_ and `python-announce`_ announcing the
  release.

.. _`CVE from MITRE`: https://cveform.mitre.org/
.. _`oss-security`: https://www.openwall.com/lists/oss-security/
.. _`upgrading OpenSSL issue template`: https://github.com/pyca/cryptography/issues/new?template=openssl-release.md
.. _`milestone`: https://github.com/pyca/cryptography/milestones
.. _`mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev
.. _`python-announce`: https://mail.python.org/mailman/listinfo/python-announce-list
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467
{
    "keyboard_name": "Moon",
    "url": "https://geekhack.org/index.php?topic=90379.0",
    "maintainer": "qmk",
    "width": 18.25,
    "height": 6.5,
    "layouts": {
        "LAYOUT_all": {
            "key_count": 88,
            "layout": [
                {"label":"Esc", "x":0, "y":0}, 
                {"label":"F1", "x":2, "y":0}, 
                {"label":"F2", "x":3, "y":0}, 
                {"label":"F3", "x":4, "y":0}, 
                {"label":"F4", "x":5, "y":0}, 
                {"label":"F5", "x":6.5, "y":0}, 
                {"label":"F6", "x":7.5, "y":0}, 
                {"label":"F7", "x":8.5, "y":0}, 
                {"label":"F8", "x":9.5, "y":0}, 
                {"label":"F9", "x":11, "y":0}, 
                {"label":"F10", "x":12, "y":0}, 
                {"label":"F11", "x":13, "y":0}, 
                {"label":"F12", "x":14, "y":0}, 
                {"label":"PrtSc", "x":15.25, "y":0}, 
                {"label":"Scroll Lock", "x":16.25, "y":0}, 
                {"label":"Pause", "x":17.25, "y":0}, 
                {"label":"~", "x":0, "y":1.5}, 
                {"label":"!", "x":1, "y":1.5}, 
                {"label":"@", "x":2, "y":1.5}, 
                {"label":"#", "x":3, "y":1.5}, 
                {"label":"$", "x":4, "y":1.5}, 
                {"label":"%", "x":5, "y":1.5}, 
                {"label":"^", "x":6, "y":1.5}, 
                {"label":"&", "x":7, "y":1.5}, 
                {"label":"*", "x":8, "y":1.5}, 
                {"label":"(", "x":9, "y":1.5}, 
                {"label":")", "x":10, "y":1.5}, 
                {"label":"_", "x":11, "y":1.5}, 
                {"label":"+", "x":12, "y":1.5}, 
                {"label":"Backspace", "x":13, "y":1.5, "w":2}, 
                {"label":"Insert", "x":15.25, "y":1.5}, 
                {"label":"Home", "x":16.25, "y":1.5}, 
                {"label":"PgUp", "x":17.25, "y":1.5}, 
                {"label":"Tab", "x":0, "y":2.5, "w":1.5}, 
                {"label":"Q", "x":1.5, "y":2.5}, 
                {"label":"W", "x":2.5, "y":2.5}, 
                {"label":"E", "x":3.5, "y":2.5}, 
                {"label":"R", "x":4.5, "y":2.5}, 
                {"label":"T", "x":5.5, "y":2.5}, 
                {"label":"Y", "x":6.5, "y":2.5}, 
                {"label":"U", "x":7.5, "y":2.5}, 
                {"label":"I", "x":8.5, "y":2.5}, 
                {"label":"O", "x":9.5, "y":2.5}, 
                {"label":"P", "x":10.5, "y":2.5}, 
                {"label":"{", "x":11.5, "y":2.5}, 
                {"label":"}", "x":12.5, "y":2.5}, 
                {"label":"|", "x":13.5, "y":2.5, "w":1.5}, 
                {"label":"Delete", "x":15.25, "y":2.5}, 
                {"label":"End", "x":16.25, "y":2.5}, 
                {"label":"PgDn", "x":17.25, "y":2.5}, 
                {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, 
                {"label":"A", "x":1.75, "y":3.5}, 
                {"label":"S", "x":2.75, "y":3.5}, 
                {"label":"D", "x":3.75, "y":3.5}, 
                {"label":"F", "x":4.75, "y":3.5}, 
                {"label":"G", "x":5.75, "y":3.5}, 
                {"label":"H", "x":6.75, "y":3.5}, 
                {"label":"J", "x":7.75, "y":3.5}, 
                {"label":"K", "x":8.75, "y":3.5}, 
                {"label":"L", "x":9.75, "y":3.5}, 
                {"label":":", "x":10.75, "y":3.5}, 
                {"label":"\"", "x":11.75, "y":3.5}, 
                {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, 
                {"label":"Shift", "x":0, "y":4.5, "w":1.25}, 
                {"label":"|", "x":1.25, "y":4.5}, 
                {"label":"Z", "x":2.25, "y":4.5}, 
                {"label":"X", "x":3.25, "y":4.5}, 
                {"label":"C", "x":4.25, "y":4.5}, 
                {"label":"V", "x":5.25, "y":4.5}, 
                {"label":"B", "x":6.25, "y":4.5}, 
                {"label":"N", "x":7.25, "y":4.5}, 
                {"label":"M", "x":8.25, "y":4.5}, 
                {"label":"<", "x":9.25, "y":4.5}, 
                {"label":">", "x":10.25, "y":4.5}, 
                {"label":"?", "x":11.25, "y":4.5}, 
                {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, 
                {"label":"Up", "x":16.25, "y":4.5}, 
                {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, 
                {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, 
                {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, 
                {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, 
                {"label":"Alt", "x":10, "y":5.5, "w":1.25}, 
                {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, 
                {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, 
                {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, 
                {"label":"Left", "x":15.25, "y":5.5}, 
                {"label":"Down", "x":16.25, "y":5.5}, 
                {"label":"Right", "x":17.25, "y":5.5}
            ]
        },
        "LAYOUT_tkl_ansi": {
            "key_count": 87,
            "layout": [
                {"label":"Esc", "x":0, "y":0}, 
                {"label":"F1", "x":2, "y":0}, 
                {"label":"F2", "x":3, "y":0}, 
                {"label":"F3", "x":4, "y":0}, 
                {"label":"F4", "x":5, "y":0}, 
                {"label":"F5", "x":6.5, "y":0}, 
                {"label":"F6", "x":7.5, "y":0}, 
                {"label":"F7", "x":8.5, "y":0}, 
                {"label":"F8", "x":9.5, "y":0}, 
                {"label":"F9", "x":11, "y":0}, 
                {"label":"F10", "x":12, "y":0}, 
                {"label":"F11", "x":13, "y":0}, 
                {"label":"F12", "x":14, "y":0}, 
                {"label":"PrtSc", "x":15.25, "y":0}, 
                {"label":"Scroll Lock", "x":16.25, "y":0}, 
                {"label":"Pause", "x":17.25, "y":0}, 
                {"label":"~", "x":0, "y":1.5}, 
                {"label":"!", "x":1, "y":1.5}, 
                {"label":"@", "x":2, "y":1.5}, 
                {"label":"#", "x":3, "y":1.5}, 
                {"label":"$", "x":4, "y":1.5}, 
                {"label":"%", "x":5, "y":1.5}, 
                {"label":"^", "x":6, "y":1.5}, 
                {"label":"&", "x":7, "y":1.5}, 
                {"label":"*", "x":8, "y":1.5}, 
                {"label":"(", "x":9, "y":1.5}, 
                {"label":")", "x":10, "y":1.5}, 
                {"label":"_", "x":11, "y":1.5}, 
                {"label":"+", "x":12, "y":1.5}, 
                {"label":"Backspace", "x":13, "y":1.5, "w":2}, 
                {"label":"Insert", "x":15.25, "y":1.5}, 
                {"label":"Home", "x":16.25, "y":1.5}, 
                {"label":"PgUp", "x":17.25, "y":1.5}, 
                {"label":"Tab", "x":0, "y":2.5, "w":1.5}, 
                {"label":"Q", "x":1.5, "y":2.5}, 
                {"label":"W", "x":2.5, "y":2.5}, 
                {"label":"E", "x":3.5, "y":2.5}, 
                {"label":"R", "x":4.5, "y":2.5}, 
                {"label":"T", "x":5.5, "y":2.5}, 
                {"label":"Y", "x":6.5, "y":2.5}, 
                {"label":"U", "x":7.5, "y":2.5}, 
                {"label":"I", "x":8.5, "y":2.5}, 
                {"label":"O", "x":9.5, "y":2.5}, 
                {"label":"P", "x":10.5, "y":2.5}, 
                {"label":"{", "x":11.5, "y":2.5}, 
                {"label":"}", "x":12.5, "y":2.5}, 
                {"label":"|", "x":13.5, "y":2.5, "w":1.5}, 
                {"label":"Delete", "x":15.25, "y":2.5}, 
                {"label":"End", "x":16.25, "y":2.5}, 
                {"label":"PgDn", "x":17.25, "y":2.5}, 
                {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, 
                {"label":"A", "x":1.75, "y":3.5}, 
                {"label":"S", "x":2.75, "y":3.5}, 
                {"label":"D", "x":3.75, "y":3.5}, 
                {"label":"F", "x":4.75, "y":3.5}, 
                {"label":"G", "x":5.75, "y":3.5}, 
                {"label":"H", "x":6.75, "y":3.5}, 
                {"label":"J", "x":7.75, "y":3.5}, 
                {"label":"K", "x":8.75, "y":3.5}, 
                {"label":"L", "x":9.75, "y":3.5}, 
                {"label":":", "x":10.75, "y":3.5}, 
                {"label":"\"", "x":11.75, "y":3.5}, 
                {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, 
                {"label":"Shift", "x":0, "y":4.5, "w":2.25}, 
                {"label":"Z", "x":2.25, "y":4.5}, 
                {"label":"X", "x":3.25, "y":4.5}, 
                {"label":"C", "x":4.25, "y":4.5}, 
                {"label":"V", "x":5.25, "y":4.5}, 
                {"label":"B", "x":6.25, "y":4.5}, 
                {"label":"N", "x":7.25, "y":4.5}, 
                {"label":"M", "x":8.25, "y":4.5}, 
                {"label":"<", "x":9.25, "y":4.5}, 
                {"label":">", "x":10.25, "y":4.5}, 
                {"label":"?", "x":11.25, "y":4.5}, 
                {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, 
                {"label":"Up", "x":16.25, "y":4.5}, 
                {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, 
                {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, 
                {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, 
                {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, 
                {"label":"Alt", "x":10, "y":5.5, "w":1.25}, 
                {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, 
                {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, 
                {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, 
                {"label":"Left", "x":15.25, "y":5.5}, 
                {"label":"Down", "x":16.25, "y":5.5}, 
                {"label":"Right", "x":17.25, "y":5.5}
            ]
        },
        "LAYOUT_tkl_ansi_wkl": {
            "key_count": 84,
            "layout": [
                {"label":"Esc", "x":0, "y":0}, 
                {"label":"F1", "x":2, "y":0}, 
                {"label":"F2", "x":3, "y":0}, 
                {"label":"F3", "x":4, "y":0}, 
                {"label":"F4", "x":5, "y":0}, 
                {"label":"F5", "x":6.5, "y":0}, 
                {"label":"F6", "x":7.5, "y":0}, 
                {"label":"F7", "x":8.5, "y":0}, 
                {"label":"F8", "x":9.5, "y":0}, 
                {"label":"F9", "x":11, "y":0}, 
                {"label":"F10", "x":12, "y":0}, 
                {"label":"F11", "x":13, "y":0}, 
                {"label":"F12", "x":14, "y":0}, 
                {"label":"PrtSc", "x":15.25, "y":0}, 
                {"label":"Scroll Lock", "x":16.25, "y":0}, 
                {"label":"Pause", "x":17.25, "y":0}, 
                {"label":"~", "x":0, "y":1.5}, 
                {"label":"!", "x":1, "y":1.5}, 
                {"label":"@", "x":2, "y":1.5}, 
                {"label":"#", "x":3, "y":1.5}, 
                {"label":"$", "x":4, "y":1.5}, 
                {"label":"%", "x":5, "y":1.5}, 
                {"label":"^", "x":6, "y":1.5}, 
                {"label":"&", "x":7, "y":1.5}, 
                {"label":"*", "x":8, "y":1.5}, 
                {"label":"(", "x":9, "y":1.5}, 
                {"label":")", "x":10, "y":1.5}, 
                {"label":"_", "x":11, "y":1.5}, 
                {"label":"+", "x":12, "y":1.5}, 
                {"label":"Backspace", "x":13, "y":1.5, "w":2}, 
                {"label":"Insert", "x":15.25, "y":1.5}, 
                {"label":"Home", "x":16.25, "y":1.5}, 
                {"label":"PgUp", "x":17.25, "y":1.5}, 
                {"label":"Tab", "x":0, "y":2.5, "w":1.5}, 
                {"label":"Q", "x":1.5, "y":2.5}, 
                {"label":"W", "x":2.5, "y":2.5}, 
                {"label":"E", "x":3.5, "y":2.5}, 
                {"label":"R", "x":4.5, "y":2.5}, 
                {"label":"T", "x":5.5, "y":2.5}, 
                {"label":"Y", "x":6.5, "y":2.5}, 
                {"label":"U", "x":7.5, "y":2.5}, 
                {"label":"I", "x":8.5, "y":2.5}, 
                {"label":"O", "x":9.5, "y":2.5}, 
                {"label":"P", "x":10.5, "y":2.5}, 
                {"label":"{", "x":11.5, "y":2.5}, 
                {"label":"}", "x":12.5, "y":2.5}, 
                {"label":"|", "x":13.5, "y":2.5, "w":1.5}, 
                {"label":"Delete", "x":15.25, "y":2.5}, 
                {"label":"End", "x":16.25, "y":2.5}, 
                {"label":"PgDn", "x":17.25, "y":2.5}, 
                {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, 
                {"label":"A", "x":1.75, "y":3.5}, 
                {"label":"S", "x":2.75, "y":3.5}, 
                {"label":"D", "x":3.75, "y":3.5}, 
                {"label":"F", "x":4.75, "y":3.5}, 
                {"label":"G", "x":5.75, "y":3.5}, 
                {"label":"H", "x":6.75, "y":3.5}, 
                {"label":"J", "x":7.75, "y":3.5}, 
                {"label":"K", "x":8.75, "y":3.5}, 
                {"label":"L", "x":9.75, "y":3.5}, 
                {"label":":", "x":10.75, "y":3.5}, 
                {"label":"\"", "x":11.75, "y":3.5}, 
                {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, 
                {"label":"Shift", "x":0, "y":4.5, "w":2.25}, 
                {"label":"Z", "x":2.25, "y":4.5}, 
                {"label":"X", "x":3.25, "y":4.5}, 
                {"label":"C", "x":4.25, "y":4.5}, 
                {"label":"V", "x":5.25, "y":4.5}, 
                {"label":"B", "x":6.25, "y":4.5}, 
                {"label":"N", "x":7.25, "y":4.5}, 
                {"label":"M", "x":8.25, "y":4.5}, 
                {"label":"<", "x":9.25, "y":4.5}, 
                {"label":">", "x":10.25, "y":4.5}, 
                {"label":"?", "x":11.25, "y":4.5}, 
                {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, 
                {"label":"Up", "x":16.25, "y":4.5}, 
                {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, 
                {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, 
                {"label":"Space", "x":4, "y":5.5, "w":7}, 
                {"label":"Alt", "x":11, "y":5.5, "w":1.5}, 
                {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, 
                {"label":"Left", "x":15.25, "y":5.5}, 
                {"label":"Down", "x":16.25, "y":5.5}, 
                {"label":"Right", "x":17.25, "y":5.5}
            ]
        },
        "LAYOUT_tkl_iso": {
            "key_count": 88,
            "layout": [
                {"label":"Esc", "x":0, "y":0}, 
                {"label":"F1", "x":2, "y":0}, 
                {"label":"F2", "x":3, "y":0}, 
                {"label":"F3", "x":4, "y":0}, 
                {"label":"F4", "x":5, "y":0}, 
                {"label":"F5", "x":6.5, "y":0}, 
                {"label":"F6", "x":7.5, "y":0}, 
                {"label":"F7", "x":8.5, "y":0}, 
                {"label":"F8", "x":9.5, "y":0}, 
                {"label":"F9", "x":11, "y":0}, 
                {"label":"F10", "x":12, "y":0}, 
                {"label":"F11", "x":13, "y":0}, 
                {"label":"F12", "x":14, "y":0}, 
                {"label":"PrtSc", "x":15.25, "y":0}, 
                {"label":"Scroll Lock", "x":16.25, "y":0}, 
                {"label":"Pause", "x":17.25, "y":0}, 
                {"label":"\u00ac", "x":0, "y":1.5}, 
                {"label":"!", "x":1, "y":1.5}, 
                {"label":"\"", "x":2, "y":1.5}, 
                {"label":"\u00a3", "x":3, "y":1.5}, 
                {"label":"$", "x":4, "y":1.5}, 
                {"label":"%", "x":5, "y":1.5}, 
                {"label":"^", "x":6, "y":1.5}, 
                {"label":"&", "x":7, "y":1.5}, 
                {"label":"*", "x":8, "y":1.5}, 
                {"label":"(", "x":9, "y":1.5}, 
                {"label":")", "x":10, "y":1.5}, 
                {"label":"_", "x":11, "y":1.5}, 
                {"label":"+", "x":12, "y":1.5}, 
                {"label":"Backspace", "x":13, "y":1.5, "w":2}, 
                {"label":"Insert", "x":15.25, "y":1.5}, 
                {"label":"Home", "x":16.25, "y":1.5}, 
                {"label":"PgUp", "x":17.25, "y":1.5}, 
                {"label":"Tab", "x":0, "y":2.5, "w":1.5}, 
                {"label":"Q", "x":1.5, "y":2.5}, 
                {"label":"W", "x":2.5, "y":2.5}, 
                {"label":"E", "x":3.5, "y":2.5}, 
                {"label":"R", "x":4.5, "y":2.5}, 
                {"label":"T", "x":5.5, "y":2.5}, 
                {"label":"Y", "x":6.5, "y":2.5}, 
                {"label":"U", "x":7.5, "y":2.5}, 
                {"label":"I", "x":8.5, "y":2.5}, 
                {"label":"O", "x":9.5, "y":2.5}, 
                {"label":"P", "x":10.5, "y":2.5}, 
                {"label":"{", "x":11.5, "y":2.5}, 
                {"label":"}", "x":12.5, "y":2.5}, 
                {"label":"Delete", "x":15.25, "y":2.5}, 
                {"label":"End", "x":16.25, "y":2.5}, 
                {"label":"PgDn", "x":17.25, "y":2.5}, 
                {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, 
                {"label":"A", "x":1.75, "y":3.5}, 
                {"label":"S", "x":2.75, "y":3.5}, 
                {"label":"D", "x":3.75, "y":3.5}, 
                {"label":"F", "x":4.75, "y":3.5}, 
                {"label":"G", "x":5.75, "y":3.5}, 
                {"label":"H", "x":6.75, "y":3.5}, 
                {"label":"J", "x":7.75, "y":3.5}, 
                {"label":"K", "x":8.75, "y":3.5}, 
                {"label":"L", "x":9.75, "y":3.5}, 
                {"label":":", "x":10.75, "y":3.5}, 
                {"label":"@", "x":11.75, "y":3.5}, 
                {"label":"~", "x":12.75, "y":3.5}, 
                {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2}, 
                {"label":"Shift", "x":0, "y":4.5, "w":1.25}, 
                {"label":"|", "x":1.25, "y":4.5}, 
                {"label":"Z", "x":2.25, "y":4.5}, 
                {"label":"X", "x":3.25, "y":4.5}, 
                {"label":"C", "x":4.25, "y":4.5}, 
                {"label":"V", "x":5.25, "y":4.5}, 
                {"label":"B", "x":6.25, "y":4.5}, 
                {"label":"N", "x":7.25, "y":4.5}, 
                {"label":"M", "x":8.25, "y":4.5}, 
                {"label":"<", "x":9.25, "y":4.5}, 
                {"label":">", "x":10.25, "y":4.5}, 
                {"label":"?", "x":11.25, "y":4.5}, 
                {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, 
                {"label":"Up", "x":16.25, "y":4.5}, 
                {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, 
                {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, 
                {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, 
                {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, 
                {"label":"AltGr", "x":10, "y":5.5, "w":1.25}, 
                {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, 
                {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, 
                {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, 
                {"label":"Left", "x":15.25, "y":5.5}, 
                {"label":"Down", "x":16.25, "y":5.5}, 
                {"label":"Right", "x":17.25, "y":5.5}
            ]
        },
        "LAYOUT_tkl_iso_wkl": {
            "key_count": 85,
            "layout": [
                {"label":"Esc", "x":0, "y":0}, 
                {"label":"F1", "x":2, "y":0}, 
                {"label":"F2", "x":3, "y":0}, 
                {"label":"F3", "x":4, "y":0}, 
                {"label":"F4", "x":5, "y":0}, 
                {"label":"F5", "x":6.5, "y":0}, 
                {"label":"F6", "x":7.5, "y":0}, 
                {"label":"F7", "x":8.5, "y":0}, 
                {"label":"F8", "x":9.5, "y":0}, 
                {"label":"F9", "x":11, "y":0}, 
                {"label":"F10", "x":12, "y":0}, 
                {"label":"F11", "x":13, "y":0}, 
                {"label":"F12", "x":14, "y":0}, 
                {"label":"PrtSc", "x":15.25, "y":0}, 
                {"label":"Scroll Lock", "x":16.25, "y":0}, 
                {"label":"Pause", "x":17.25, "y":0}, 
                {"label":"\u00ac", "x":0, "y":1.5}, 
                {"label":"!", "x":1, "y":1.5}, 
                {"label":"\"", "x":2, "y":1.5}, 
                {"label":"\u00a3", "x":3, "y":1.5}, 
                {"label":"$", "x":4, "y":1.5}, 
                {"label":"%", "x":5, "y":1.5}, 
                {"label":"^", "x":6, "y":1.5}, 
                {"label":"&", "x":7, "y":1.5}, 
                {"label":"*", "x":8, "y":1.5}, 
                {"label":"(", "x":9, "y":1.5}, 
                {"label":")", "x":10, "y":1.5}, 
                {"label":"_", "x":11, "y":1.5}, 
                {"label":"+", "x":12, "y":1.5}, 
                {"label":"Backspace", "x":13, "y":1.5, "w":2}, 
                {"label":"Insert", "x":15.25, "y":1.5}, 
                {"label":"Home", "x":16.25, "y":1.5}, 
                {"label":"PgUp", "x":17.25, "y":1.5}, 
                {"label":"Tab", "x":0, "y":2.5, "w":1.5}, 
                {"label":"Q", "x":1.5, "y":2.5}, 
                {"label":"W", "x":2.5, "y":2.5}, 
                {"label":"E", "x":3.5, "y":2.5}, 
                {"label":"R", "x":4.5, "y":2.5}, 
                {"label":"T", "x":5.5, "y":2.5}, 
                {"label":"Y", "x":6.5, "y":2.5}, 
                {"label":"U", "x":7.5, "y":2.5}, 
                {"label":"I", "x":8.5, "y":2.5}, 
                {"label":"O", "x":9.5, "y":2.5}, 
                {"label":"P", "x":10.5, "y":2.5}, 
                {"label":"{", "x":11.5, "y":2.5}, 
                {"label":"}", "x":12.5, "y":2.5}, 
                {"label":"Delete", "x":15.25, "y":2.5}, 
                {"label":"End", "x":16.25, "y":2.5}, 
                {"label":"PgDn", "x":17.25, "y":2.5}, 
                {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, 
                {"label":"A", "x":1.75, "y":3.5}, 
                {"label":"S", "x":2.75, "y":3.5}, 
                {"label":"D", "x":3.75, "y":3.5}, 
                {"label":"F", "x":4.75, "y":3.5}, 
                {"label":"G", "x":5.75, "y":3.5}, 
                {"label":"H", "x":6.75, "y":3.5}, 
                {"label":"J", "x":7.75, "y":3.5}, 
                {"label":"K", "x":8.75, "y":3.5}, 
                {"label":"L", "x":9.75, "y":3.5}, 
                {"label":":", "x":10.75, "y":3.5}, 
                {"label":"@", "x":11.75, "y":3.5}, 
                {"label":"~", "x":12.75, "y":3.5}, 
                {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2}, 
                {"label":"Shift", "x":0, "y":4.5, "w":1.25}, 
                {"label":"|", "x":1.25, "y":4.5}, 
                {"label":"Z", "x":2.25, "y":4.5}, 
                {"label":"X", "x":3.25, "y":4.5}, 
                {"label":"C", "x":4.25, "y":4.5}, 
                {"label":"V", "x":5.25, "y":4.5}, 
                {"label":"B", "x":6.25, "y":4.5}, 
                {"label":"N", "x":7.25, "y":4.5}, 
                {"label":"M", "x":8.25, "y":4.5}, 
                {"label":"<", "x":9.25, "y":4.5}, 
                {"label":">", "x":10.25, "y":4.5}, 
                {"label":"?", "x":11.25, "y":4.5}, 
                {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, 
                {"label":"Up", "x":16.25, "y":4.5}, 
                {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, 
                {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, 
                {"label":"Space", "x":4, "y":5.5, "w":7}, 
                {"label":"AltGr", "x":11, "y":5.5, "w":1.5}, 
                {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, 
                {"label":"Left", "x":15.25, "y":5.5}, 
                {"label":"Down", "x":16.25, "y":5.5}, 
                {"label":"Right", "x":17.25, "y":5.5}
            ]
        }
    }
}