logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git
commit: da166d4d8b1eb5cf984a08effdf20faaca2b3234
parent 3cd292498566cd94983a5311156fb3b7f348d911
Author: Pascal Getreuer <50221757+getreuer@users.noreply.github.com>
Date:   Mon, 31 Mar 2025 22:06:42 -0700

Add "license" field to Community Module JSON schema. (#25085)

Add "license" field to community module schema.

Diffstat:

Mdata/schemas/community_module.jsonschema1+
Mdocs/features/community_modules.md5+++++
Mlib/python/qmk/json_encoders.py8+++++---
Mmodules/qmk/hello_world/qmk_module.json1+
Mmodules/qmk/super_alt_tab/qmk_module.json1+
5 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/data/schemas/community_module.jsonschema b/data/schemas/community_module.jsonschema @@ -7,6 +7,7 @@ "properties": { "module_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, "maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, + "license": {"type": "string"}, "url": { "type": "string", "format": "uri" diff --git a/docs/features/community_modules.md b/docs/features/community_modules.md @@ -72,6 +72,7 @@ A Community Module is denoted by a `qmk_module.json` file such as the following: { "module_name": "Hello World", "maintainer": "QMK Maintainers", + "license": "GPL-2.0-or-later", "features": { "deferred_exec": true }, @@ -86,6 +87,10 @@ A Community Module is denoted by a `qmk_module.json` file such as the following: At minimum, the module must provide the `module_name` and `maintainer` fields. +The `license` field is encouraged to indicate the terms for using and sharing the module. It is recommended to use a [SPDX license identifier](https://spdx.org/licenses/) like "`Apache-2.0`" or "`GPL-2.0-or-later`" if possible. + +The `url` field may specify a URL to more information about the module. + The use of `features` matches the definition normally provided within `keyboard.json` and `info.json`, allowing a module to signal to the build system that it has its own dependencies. In the example above, it enables the _deferred executor_ feature whenever the above module is used in a build. The `keycodes` array allows a module to provide new keycodes (as well as corresponding aliases) to a keymap. diff --git a/lib/python/qmk/json_encoders.py b/lib/python/qmk/json_encoders.py @@ -250,12 +250,14 @@ class CommunityModuleJSONEncoder(QMKJSONEncoder): return '00module_name' if key == 'maintainer': return '01maintainer' + if key == 'license': + return '02license' if key == 'url': - return '02url' + return '03url' if key == 'features': - return '03features' + return '04features' if key == 'keycodes': - return '04keycodes' + return '05keycodes' elif self.indentation_level == 3: # keycodes if key == 'key': return '00key' diff --git a/modules/qmk/hello_world/qmk_module.json b/modules/qmk/hello_world/qmk_module.json @@ -1,6 +1,7 @@ { "module_name": "Hello World", "maintainer": "QMK Maintainers", + "license": "GPL-2.0-or-later", "features": { "console": true, "deferred_exec": true diff --git a/modules/qmk/super_alt_tab/qmk_module.json b/modules/qmk/super_alt_tab/qmk_module.json @@ -1,6 +1,7 @@ { "module_name": "Super Alt Tab", "maintainer": "QMK Maintainers", + "license": "GPL-2.0-or-later", "keycodes": [ { "key": "COMMUNITY_MODULE_SUPER_ALT_TAB",