|
1 | 1 | NIP-82 |
2 | 2 | ====== |
3 | 3 |
|
4 | | -Applications |
5 | | ------------- |
| 4 | +Software Applications |
| 5 | +--------------------- |
6 | 6 |
|
7 | 7 | `draft` `optional` |
8 | 8 |
|
9 | 9 | This NIP defines kind 32267 to represent a software application. |
10 | 10 |
|
11 | | -The description and visuals of an application are optionally provided via a linked [NIP-54](54.md) kind 30818 wiki article. |
12 | | - |
13 | 11 | ## Application |
14 | 12 |
|
15 | 13 | ```jsonc |
16 | 14 | { |
17 | 15 | "kind": 32267, |
18 | | - "content": "", |
| 16 | + "content": "<description>", // Description of the application, markdown is allowed |
19 | 17 | "tags": [ |
20 | 18 | ["d", "<app-id>"], // Usually reverse domain notation: com.example.app |
21 | | - ["name", "<human-readable project name>"], // Name, in case wiki article is missing |
22 | | - ["icon", "<icon-url>"], // Icon URL: https://cdn.zap.store/8a8fc42aed83d76ccb48afd6eec40bb8b15af6296e03a27a9eeab015f07e2a54.png |
| 19 | + ["name", "<human-readable project name>"], // Name: Example App |
| 20 | + ["icon", "<icon-url>"], // Icon URL |
| 21 | + ["image", "<image-url>"], // Image URL, can be used multiple times |
| 22 | + ["t", "<tag>"], // Tags related to the application, can be used multiple times |
| 23 | + ["url", "<website-url>"], // Website URL for the app |
23 | 24 | ["repository", "<repo-url>"], // Source code repository URL: https://github.com/example/android |
24 | | - ["commit-id", "<sha1-commit-id>"], // SHA1 commit id used to build the release |
25 | | - ["a", "30818:<destination-pubkey>:<app-slug>", "<relay-url>"], // Pointer to NIP-54 wiki article |
26 | 25 | ["a", "30617:<destination-pubkey>:<repo-id>", "<relay-url>"], // Pointer to NIP-34 repository |
27 | | - ["license", "<spdx-id>"] // License ID from https://spdx.org/licenses/: Apache-2.0 |
| 26 | + ["a", "30063:<destination-pubkey>:<app-id>@<version>"], // Pointer to the latest NIP-51 release artifact set |
| 27 | + ["commit-id", "<sha1-commit-id>"], // SHA1 commit id used to build the release |
| 28 | + ["f", "<platform-identifier>"], // Platform identifier, can be used multiple times |
| 29 | + ["license", "<spdx-id>"] // License ID |
28 | 30 | ] |
29 | 31 | } |
30 | 32 | ``` |
31 | 33 |
|
32 | | -All tags are optional except for `d`. Android applications MUST use the application identifier as the `d` tag. |
| 34 | +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. |
| 35 | + |
| 36 | +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. |
| 37 | + |
| 38 | +License IDs are SPDX IDs as defined in https://spdx.org/licenses/. |
| 39 | + |
| 40 | +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. |
33 | 41 |
|
34 | | -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. |
| 42 | +### Platforms |
35 | 43 |
|
36 | | -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. |
| 44 | +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`: |
37 | 45 |
|
38 | | -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. |
| 46 | +| Identifier | OS | Architecture | |
| 47 | +| --------- | --- | --- | |
| 48 | +| `android-arm64-v8a` | Android | ARMv8-A | |
| 49 | +| `android-armeabi-v7a` | Android | ARMv7-A | |
| 50 | +| `android-x86` | Android | x86 | |
| 51 | +| `android-x86_64` | Android | x86-64 | |
| 52 | +| `darwin-arm64` | MacOS | ARM64 | |
| 53 | +| `darwin-x86_64` | MacOS | x86-64 | |
| 54 | +| `linux-aarch64` | Linux | ARM64 | |
| 55 | +| `linux-x86_64` | Linux | x86-64 | |
| 56 | +| `windows-aarch64` | Windows | ARM64 | |
| 57 | +| `windows-x86_64` | Windows | x86-64 | |
| 58 | +| `ios-arm64` | iOS | ARM64 | |
| 59 | +| `web` | (Web browsers) | - | |
39 | 60 |
|
40 | 61 | ### Attribution |
41 | 62 |
|
42 | 63 | 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. |
43 | 64 |
|
44 | 65 | ## Usage |
45 | 66 |
|
46 | | -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. |
| 67 | +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. |
0 commit comments