dev.tsunagite.game

tsunagite.dev

Schema Diff

+5 -0

From

CID
bafyreiadgf2wzxy...
Indexed At
2026-04-30 03:21 UTC
View this version

To

CID
bafyreifxzuzd7jd...
Indexed At
2026-05-05 21:58 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 2 non-breaking changes.

Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "dev.tsunagite.game:body.nsid" }
  • AddedEdge AddedEdge { src: "dev.tsunagite.game:body", tgt: "dev.tsunagite.game:body.nsid", kind: "prop", name: Some("nsid") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "dev.tsunagite.game:body.nsid" }

Additional Notes

  • Non-breaking: AddedEdge { src: "dev.tsunagite.game:body", tgt: "dev.tsunagite.game:body.nsid", kind: "prop", name: Some("nsid") }
1 1
{
2 2
  "id": "dev.tsunagite.game",
3 3
  "defs": {
4 4
    "enum": {
5 5
      "type": "object",
6 6
      "required": [
7 7
        "name",
8 8
        "values"
9 9
      ],
10 10
      "properties": {
11 11
        "name": {
12 12
          "ref": "dev.tsunagite.translatable",
13 13
          "type": "ref",
14 14
          "description": "The human-readable name of this component in UI."
15 15
        },
16 16
        "values": {
17 17
          "type": "array",
18 18
          "items": {
19 19
            "ref": "dev.tsunagite.defs#indexable",
20 20
            "type": "ref"
21 21
          },
22 22
          "description": "The allowed values for this enum to take."
23 23
        }
24 24
      },
25 25
      "description": "A closed set of indexable named values."
26 26
    },
27 27
    "main": {
28 28
      "key": "any",
29 29
      "type": "record",
30 30
      "record": {
31 31
        "type": "object",
32 32
        "required": [
33 33
          "name",
34 34
          "judgments",
35 35
          "scoreComponents",
36 36
          "defaultComponent"
37 37
        ],
38 38
        "properties": {
39 39
          "logo": {
40 40
            "type": "blob",
41 41
            "accept": [
42 42
              "image/png",
43 43
              "image/jpeg",
44 44
              "image/jxl",
45 45
              "image/webp"
46 46
            ],
47 47
            "maxSize": 8000000,
48 48
            "description": "The logo of the game, for display in UI."
49 49
          },
50 50
          "name": {
51 51
            "ref": "dev.tsunagite.translatable",
52 52
            "type": "ref",
53 53
            "description": "The human-readable name of the game, for display in UI."
54 54
          },
55 +
          "nsid": {
56 +
            "type": "string",
57 +
            "format": "nsid",
58 +
            "description": "The namespaced ID of the game used for leaderboard and profile keys."
59 +
          },
55 60
          "modes": {
56 61
            "type": "array",
57 62
            "items": {
58 63
              "type": "string",
59 64
              "description": "Can be tokens or raw strings.",
60 65
              "knownValues": [
61 66
                "dev.tsunagite.singles",
62 67
                "dev.tsunagite.doubles"
63 68
              ]
64 69
            },
65 70
            "description": "An array of playable game modes with different gameplay configurations. Optional if the game only has one mode."
66 71
          },
67 72
          "createdAt": {
68 73
            "type": "string",
69 74
            "format": "datetime"
70 75
          },
71 76
          "judgments": {
72 77
            "type": "array",
73 78
            "items": {
74 79
              "ref": "dev.tsunagite.defs#indexable",
75 80
              "type": "ref",
76 81
              "description": "Indices will be displayed in ascending order."
77 82
            },
78 83
            "description": "The obtainable judgments during gameplay."
79 84
          },
80 85
          "updatedAt": {
81 86
            "type": "string",
82 87
            "format": "datetime"
83 88
          },
84 89
          "inputMethods": {
85 90
            "type": "array",
86 91
            "items": {
87 92
              "type": "string",
88 93
              "description": "Can be tokens or raw strings.",
89 94
              "knownValues": [
90 95
                "dev.tsunagite.keyboard",
91 96
                "dev.tsunagite.gamepad"
92 97
              ]
93 98
            },
94 99
            "description": "An array of usable input methods for the game. Optional if the game only has one input method or doesn't separate leaderboards by method."
95 100
          },
96 101
          "scoreComponents": {
97 102
            "type": "object",
98 103
            "properties": {
99 104
              "$keyFormat": {
100 105
                "type": "string",
101 106
                "format": "record-key",
102 107
                "maxLength": 32,
103 108
                "minLength": 1
104 109
              },
105 110
              "$valueType": {
106 111
                "refs": [
107 112
                  "#enum",
108 113
                  "#points",
109 114
                  "#percentage",
110 115
                  "#text"
111 116
                ],
112 117
                "type": "union",
113 118
                "description": "If you need a component type that doesn't exist yet, contact @lemmaeof.gay"
114 119
              }
115 120
            },
116 121
            "description": "All the components of a score in the game, including grades, lamps, EX score, and whatever other constructs are used."
117 122
          },
118 123
          "defaultComponent": {
119 124
            "type": "string",
120 125
            "format": "record-key",
121 126
            "description": "The default component for leaderboard sorting."
122 127
          }
123 128
        }
124 129
      },
125 130
      "description": "A record describing a game hosting leaderboards via Tsunagite."
126 131
    },
127 132
    "text": {
128 133
      "type": "object",
129 134
      "required": [
130 135
        "name"
131 136
      ],
132 137
      "properties": {
133 138
        "name": {
134 139
          "ref": "dev.tsunagite.translatable",
135 140
          "type": "ref",
136 141
          "description": "The human-readable name of this component in UI."
137 142
        }
138 143
      },
139 144
      "description": "A fallback component for displaying arbitrary text."
140 145
    },
141 146
    "points": {
142 147
      "type": "object",
143 148
      "required": [
144 149
        "name"
145 150
      ],
146 151
      "properties": {
147 152
        "name": {
148 153
          "ref": "dev.tsunagite.translatable",
149 154
          "type": "ref",
150 155
          "description": "The human-readable name of this component in UI."
151 156
        },
152 157
        "maximum": {
153 158
          "type": "integer",
154 159
          "description": "The maximum allowed value for this score."
155 160
        }
156 161
      },
157 162
      "description": "An integer point score, with or without a cap."
158 163
    },
159 164
    "percentage": {
160 165
      "type": "object",
161 166
      "required": [
162 167
        "name",
163 168
        "maximum",
164 169
        "precision"
165 170
      ],
166 171
      "properties": {
167 172
        "name": {
168 173
          "ref": "dev.tsunagite.translatable",
169 174
          "type": "ref",
170 175
          "description": "The human-readable name of this component in UI."
171 176
        },
172 177
        "maximum": {
173 178
          "type": "integer",
174 179
          "default": 100,
175 180
          "description": "The maximum allowed percentage for this score."
176 181
        },
177 182
        "precision": {
178 183
          "type": "integer",
179 184
          "default": 2,
180 185
          "description": "The number of decimal places to include in the percentage."
181 186
        }
182 187
      },
183 188
      "description": "A percentage score with customizable precision."
184 189
    }
185 190
  },
186 191
  "$type": "com.atproto.lexicon.schema",
187 192
  "lexicon": 1,
188 193
  "description": "Definitions related to games hosting leaderboards via Tunagite.",
189 194
  "featureFlags": [
190 195
    "dev.tsunagite.dictionaryObject"
191 196
  ]
192 197
}

Compare Other Versions

Lexicon Garden

@