From 4635124e950a9c81e3db04997a61739b7a2481ea Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Fri, 28 Jun 2024 23:15:56 -0300 Subject: [PATCH 1/7] Software applications event --- 82.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 82.md diff --git a/82.md b/82.md new file mode 100644 index 00000000..dc85d409 --- /dev/null +++ b/82.md @@ -0,0 +1,35 @@ +NIP-82 +====== + +Applications +------------ + +`draft` `optional` + +This NIP defines kind 32267 to represent a software application. + +## Format + +The `.content` of these events is a full description of the application in Markdown format. + +And tags as follows: + +| tag | description | required | example | +| --- | --- | --- | --- | +| `d` | App identifier (preferably in reverse domain notation) | yes | com.example.app | +| `name` | Name of the app | yes | Example App | +| `description` | Short description of the app | no | An app that exemplifies | +| `repository`| Source code repository URL or [NIP-34](34.md) repository (if open source) | no | https://github.com/example/android or `30617:e4ee4fceb9721ce4ee4fceb91c9711ca2a6c9a5ab:example-repo` | +| `url` | Homepage URL | no | https://example.com | +| `icon` | App icon URL | no | https://cdn.satellite.earth/a81c5dcfc8530026925ef0c94f3003768be0d9adfca854a3db7d3e28915f1e40.png | +| `image` | Image captures of the app | no | https://cdn.satellite.earth/003768be0d9adfca854a3db7d3e28915f1e40a81c5dcfc8530026925ef0c94f3.png | +| `t` | Tags | no | android, file-manager, kotlin | +| `license` | License ID from [SPDX](https://spdx.org/licenses/) | no | Apache-2.0 | + +### Attribution + +App authors MAY include their pubkeys as `p` tags and `zap` tags as per [NIP-57 - Appendix G](57.md). This is useful in the case of an author other than the one who signed the event, or multiple authors. + +## Usage + +A kind 30063 [release artifact set](51.md) SHOULD have an `"a"` tag reference to this event, alongside its references to `"e"` [file metadata](94.md) events. \ No newline at end of file From 8006c582e4ae89c3650daceabbf67e556f7ed0db Mon Sep 17 00:00:00 2001 From: franzap <126621043+franzaps@users.noreply.github.com> Date: Tue, 9 Jul 2024 16:49:57 +0000 Subject: [PATCH 2/7] Update 82.md Co-authored-by: DanConwayDev <114834599+DanConwayDev@users.noreply.github.com> --- 82.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/82.md b/82.md index dc85d409..163ad770 100644 --- a/82.md +++ b/82.md @@ -19,7 +19,10 @@ And tags as follows: | `d` | App identifier (preferably in reverse domain notation) | yes | com.example.app | | `name` | Name of the app | yes | Example App | | `description` | Short description of the app | no | An app that exemplifies | -| `repository`| Source code repository URL or [NIP-34](34.md) repository (if open source) | no | https://github.com/example/android or `30617:e4ee4fceb9721ce4ee4fceb91c9711ca2a6c9a5ab:example-repo` | +| `repository`| Source code repository URL | no | https://github.com/example/android | +| `a`| address pointer to [NIP-34](34.md) repository | no | `30617:e4ee4fceb9721ce4ee4fceb91c9711ca2a6c9a5ab:example-repo` | +| `commit-id`| SHA1 commit id used to build the release | no | `42981750c3ab3bacaf242bf05a623ae1b299e0a1` | + | `url` | Homepage URL | no | https://example.com | | `icon` | App icon URL | no | https://cdn.satellite.earth/a81c5dcfc8530026925ef0c94f3003768be0d9adfca854a3db7d3e28915f1e40.png | | `image` | Image captures of the app | no | https://cdn.satellite.earth/003768be0d9adfca854a3db7d3e28915f1e40a81c5dcfc8530026925ef0c94f3.png | From 3f1d2a14abd52e32e0c7eebe3538dc21ca7ef7ed Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Sun, 14 Jul 2024 19:30:15 -0300 Subject: [PATCH 3/7] Delegate app description and visuals to a NIP-54 event --- 82.md | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/82.md b/82.md index 163ad770..0fa29131 100644 --- a/82.md +++ b/82.md @@ -8,26 +8,31 @@ Applications This NIP defines kind 32267 to represent a software application. -## Format +The description and visuals of an application are optionally provided via a linked [NIP-54](54.md) kind 30818 wiki article. -The `.content` of these events is a full description of the application in Markdown format. +## Application -And tags as follows: +```jsonc +{ + "kind": 32267, + "content": "", + "tags": [ + ["d", ""], // Usually reverse domain notation: com.example.app + ["name", ""], // Name, in case wiki article is missing + ["repository", ""], // Source code repository URL: https://github.com/example/android + ["commit-id", ""], // SHA1 commit id used to build the release + ["a", "30818::", ""], // Pointer to NIP-54 wiki article + ["a", "30617::", ""], // Pointer to NIP-34 repository + ["license", ""] // License ID from https://spdx.org/licenses/: Apache-2.0 + ] +} +``` -| tag | description | required | example | -| --- | --- | --- | --- | -| `d` | App identifier (preferably in reverse domain notation) | yes | com.example.app | -| `name` | Name of the app | yes | Example App | -| `description` | Short description of the app | no | An app that exemplifies | -| `repository`| Source code repository URL | no | https://github.com/example/android | -| `a`| address pointer to [NIP-34](34.md) repository | no | `30617:e4ee4fceb9721ce4ee4fceb91c9711ca2a6c9a5ab:example-repo` | -| `commit-id`| SHA1 commit id used to build the release | no | `42981750c3ab3bacaf242bf05a623ae1b299e0a1` | +All tags are optional except for `d`. Android applications MUST use the application identifier as the `d` tag. -| `url` | Homepage URL | no | https://example.com | -| `icon` | App icon URL | no | https://cdn.satellite.earth/a81c5dcfc8530026925ef0c94f3003768be0d9adfca854a3db7d3e28915f1e40.png | -| `image` | Image captures of the app | no | https://cdn.satellite.earth/003768be0d9adfca854a3db7d3e28915f1e40a81c5dcfc8530026925ef0c94f3.png | -| `t` | Tags | no | android, file-manager, kotlin | -| `license` | License ID from [SPDX](https://spdx.org/licenses/) | no | Apache-2.0 | +The `content` field SHOULD be empty. + +Clients SHOULD first check for the availability of the linked kind 30818 to retrieve the app description and display information contained in tags including `title`, `summary`, `image`, `icon`, `url`, `t`, etc. ### Attribution From b85741cae80e0b5e12ac768455e31f698fd6f115 Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Sun, 14 Jul 2024 19:33:31 -0300 Subject: [PATCH 4/7] Note on NIP-89 --- 82.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/82.md b/82.md index 0fa29131..250ecf40 100644 --- a/82.md +++ b/82.md @@ -34,6 +34,8 @@ The `content` field SHOULD be empty. Clients SHOULD first check for the availability of the linked kind 30818 to retrieve the app description and display information contained in tags including `title`, `summary`, `image`, `icon`, `url`, `t`, etc. +Note on [NIP-89](89.md): Not all applications can or should handle nostr events. Those that do MAY choose to publish a NIP-89 event. + ### Attribution App authors MAY include their pubkeys as `p` tags and `zap` tags as per [NIP-57 - Appendix G](57.md). This is useful in the case of an author other than the one who signed the event, or multiple authors. From d52b377dd4bdeff7eabdba3a3b3ccede613465f1 Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Mon, 15 Jul 2024 15:00:39 -0300 Subject: [PATCH 5/7] Icon URL --- 82.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/82.md b/82.md index 250ecf40..75d00c37 100644 --- a/82.md +++ b/82.md @@ -19,6 +19,7 @@ The description and visuals of an application are optionally provided via a link "tags": [ ["d", ""], // Usually reverse domain notation: com.example.app ["name", ""], // Name, in case wiki article is missing + ["icon", ""], // Icon URL: https://cdn.zap.store/8a8fc42aed83d76ccb48afd6eec40bb8b15af6296e03a27a9eeab015f07e2a54.png ["repository", ""], // Source code repository URL: https://github.com/example/android ["commit-id", ""], // SHA1 commit id used to build the release ["a", "30818::", ""], // Pointer to NIP-54 wiki article @@ -30,9 +31,9 @@ The description and visuals of an application are optionally provided via a link All tags are optional except for `d`. Android applications MUST use the application identifier as the `d` tag. -The `content` field SHOULD be empty. +The `content` field SHOULD be empty. For `icon` any URL is valid but a Blossom [BUD-01](https://github.com/hzrd149/blossom/blob/master/buds/01.md#get-sha256---get-blob) endpoint is recommended. -Clients SHOULD first check for the availability of the linked kind 30818 to retrieve the app description and display information contained in tags including `title`, `summary`, `image`, `icon`, `url`, `t`, etc. +Clients SHOULD first check for the availability of the linked kind 30818 to retrieve the app description and display information contained in tags including `title`, `summary`, `image`, `icon`, `url`, `t`, etc. The `name` field MUST be used as fallback if `title` was not available. Note on [NIP-89](89.md): Not all applications can or should handle nostr events. Those that do MAY choose to publish a NIP-89 event. From bc53923335da2b05c5b8ca15a9604bf8650e7b44 Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Tue, 10 Dec 2024 14:38:22 -0300 Subject: [PATCH 6/7] Update kind 32267 to reflect latest usage --- 82.md | 51 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/82.md b/82.md index 75d00c37..74b302d6 100644 --- a/82.md +++ b/82.md @@ -1,41 +1,62 @@ NIP-82 ====== -Applications ------------- +Software Applications +--------------------- `draft` `optional` This NIP defines kind 32267 to represent a software application. -The description and visuals of an application are optionally provided via a linked [NIP-54](54.md) kind 30818 wiki article. - ## Application ```jsonc { "kind": 32267, - "content": "", + "content": "", // Description of the application, markdown is allowed "tags": [ ["d", ""], // Usually reverse domain notation: com.example.app - ["name", ""], // Name, in case wiki article is missing - ["icon", ""], // Icon URL: https://cdn.zap.store/8a8fc42aed83d76ccb48afd6eec40bb8b15af6296e03a27a9eeab015f07e2a54.png + ["name", ""], // Name: Example App + ["icon", ""], // Icon URL + ["image", ""], // Image URL, can be used multiple times + ["t", ""], // Tags related to the application, can be used multiple times + ["url", ""], // Website URL for the app ["repository", ""], // Source code repository URL: https://github.com/example/android - ["commit-id", ""], // SHA1 commit id used to build the release - ["a", "30818::", ""], // Pointer to NIP-54 wiki article ["a", "30617::", ""], // Pointer to NIP-34 repository - ["license", ""] // License ID from https://spdx.org/licenses/: Apache-2.0 + ["a", "30063::@"], // Pointer to the latest NIP-51 release artifact set + ["commit-id", ""], // SHA1 commit id used to build the release + ["f", ""], // Platform identifier, can be used multiple times + ["license", ""] // License ID ] } ``` -All tags are optional except for `d`. Android applications MUST use the application identifier as the `d` tag. +All tags are optional but the `d` tag MUST be present. Applications SHOULD use their application or bundle identifier as the `d` tag, which typically is an ID with dots in reverse-domain notation. -The `content` field SHOULD be empty. For `icon` any URL is valid but a Blossom [BUD-01](https://github.com/hzrd149/blossom/blob/master/buds/01.md#get-sha256---get-blob) endpoint is recommended. +For `icon` and `image` tags any URL is valid but a Blossom [BUD-01](https://github.com/hzrd149/blossom/blob/master/buds/01.md#get-sha256---get-blob) endpoint is recommended. -Clients SHOULD first check for the availability of the linked kind 30818 to retrieve the app description and display information contained in tags including `title`, `summary`, `image`, `icon`, `url`, `t`, etc. The `name` field MUST be used as fallback if `title` was not available. +License IDs are SPDX IDs as defined in https://spdx.org/licenses/. -Note on [NIP-89](89.md): Not all applications can or should handle nostr events. Those that do MAY choose to publish a NIP-89 event. +An `a` tag reference to the latest 30063 event SHOULD be present to facilitate discovering the latest release of an app. Similarly, `f` tags SHOULD be included to describe supported platforms that MUST match predefined identifiers. + +### Platforms + +Platform is defined as the specific underlying system on which the application is executed, a combination of operating system and hardware architecture. We use the `f` tag for this purpose, with the following identifiers loosely based off `uname -sm`: + +| Identifier | OS | Architecture | +| --------- | --- | --- | +| `android-arm64-v8a` | Android | ARMv8-A | +| `android-armeabi-v7a` | Android | ARMv7-A | +| `android-x86` | Android | x86 | +| `android-x86_64` | Android | x86-64 | +| `darwin-arm64` | MacOS | ARM64 | +| `darwin-x86_64` | MacOS | x86-64 | +| `linux-aarch64` | Linux | ARM64 | +| `linux-x86_64` | Linux | x86-64 | +| `windows-aarch64` | Windows | ARM64 | +| `windows-x86_64` | Windows | x86-64 | +| `ios-arm64` | iOS | ARM64 | +| `web` | (Web browsers) | - | ### Attribution @@ -43,4 +64,4 @@ App authors MAY include their pubkeys as `p` tags and `zap` tags as per [NIP-57 ## Usage -A kind 30063 [release artifact set](51.md) SHOULD have an `"a"` tag reference to this event, alongside its references to `"e"` [file metadata](94.md) events. \ No newline at end of file +A kind 30063 [release artifact set](51.md) SHOULD have an `a` tag reference back to this event, alongside its references to `"e"` [file metadata](94.md) events. \ No newline at end of file From 1642fd4cf9763d94a659ade3e3594944b4f63c0e Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Fri, 13 Dec 2024 10:36:19 -0300 Subject: [PATCH 7/7] Add summary --- 82.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/82.md b/82.md index 74b302d6..f25a73f2 100644 --- a/82.md +++ b/82.md @@ -13,10 +13,11 @@ This NIP defines kind 32267 to represent a software application. ```jsonc { "kind": 32267, - "content": "", // Description of the application, markdown is allowed + "content": "", // Full description of the application, markdown is allowed "tags": [ ["d", ""], // Usually reverse domain notation: com.example.app ["name", ""], // Name: Example App + ["summary", ""], // Summary, short description: An app that does example ["icon", ""], // Icon URL ["image", ""], // Image URL, can be used multiple times ["t", ""], // Tags related to the application, can be used multiple times