@hyprune/schema 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +23 -0
  3. package/bin/validate.mjs +11 -5
  4. package/examples/registry/entry.json +106 -0
  5. package/examples/registry/index.json +137 -0
  6. package/examples/registry/invalid/registry-entry--bad-spdx.json +106 -0
  7. package/examples/registry/invalid/registry-entry--build-metadata.json +106 -0
  8. package/examples/registry/invalid/registry-entry--control-characters.json +106 -0
  9. package/examples/registry/invalid/registry-entry--duplicate-version.json +136 -0
  10. package/examples/registry/invalid/registry-entry--five-thumbnails.json +130 -0
  11. package/examples/registry/invalid/registry-entry--library-over-limit.json +22 -0
  12. package/examples/registry/invalid/registry-entry--name-too-long.json +106 -0
  13. package/examples/registry/invalid/registry-entry--tag-mismatch.json +106 -0
  14. package/examples/registry/invalid/registry-entry--uppercase-hash.json +106 -0
  15. package/examples/registry/invalid/registry-entry--versions-oldest-first.json +106 -0
  16. package/examples/registry/invalid/registry-index--duplicate-id.json +159 -0
  17. package/examples/registry/invalid/registry-index--entry-schema-pointer.json +138 -0
  18. package/examples/registry/invalid/registry-index--http-url.json +137 -0
  19. package/examples/registry/invalid/registry-index--newer-index-version.json +137 -0
  20. package/examples/registry/invalid/registry-index--zero-serial.json +137 -0
  21. package/examples/registry/invalid/release-record--archive-name.json +42 -0
  22. package/examples/registry/invalid/release-record--library-requires.json +42 -0
  23. package/examples/registry/invalid/release-record--short-commit.json +42 -0
  24. package/examples/registry/invalid/release-record--tag-mismatch.json +42 -0
  25. package/examples/registry/invalid/release-record--thumbnail-name.json +42 -0
  26. package/examples/registry/invalid/sources--archive-without-hash.json +50 -0
  27. package/examples/registry/invalid/sources--duplicate-id.json +59 -0
  28. package/examples/registry/invalid/sources--github-without-repo.json +50 -0
  29. package/examples/registry/invalid/sources--index-with-repo.json +52 -0
  30. package/examples/registry/invalid/sources--label-too-long.json +51 -0
  31. package/examples/registry/invalid/sources--reserved-id.json +51 -0
  32. package/examples/registry/invalid/sources--too-many.json +277 -0
  33. package/examples/registry/release-record.json +42 -0
  34. package/examples/registry/sources.json +51 -0
  35. package/lib/validate.d.mts +24 -0
  36. package/lib/validate.mjs +137 -0
  37. package/package.json +2 -1
  38. package/registry/v0.1/index.schema.json +309 -0
  39. package/registry/v0.1/release-record.schema.json +181 -0
  40. package/registry/v0.1/sources.schema.json +129 -0
package/CHANGELOG.md CHANGED
@@ -463,3 +463,15 @@ Publishes IPC 0.24: `objects.catalog` entries carry a placed machine's declared
463
463
  ## @hyprune/schema 0.10.0 (2026-10-13)
464
464
 
465
465
  Publishes IPC 0.25: companions. `companion.set`, `companion.clear` and `companion.mode` (follow or stay), a required `companion` state key, a companion capability on catalog entries and the aimed interaction type `companion`; and the object 0.10 draft `companion` block (name, followDistance, idles, say). Inherits 0.24.
466
+
467
+ ## @hyprune/schema 0.11.0 (2026-10-13): registry documents
468
+
469
+ Registry documents (RFC-0015), versioned independently under `registry/v0.1/`:
470
+ `index.schema.json` (index documents; `$defs.entry` for registry entry files),
471
+ `release-record.schema.json` and `sources.schema.json`. `validateRegistry(kind, doc,
472
+ version?)` for kinds `registry-index`, `registry-entry`, `release-record` and `sources`
473
+ checks unique ids, versions unique and newest first (SemVer, no build metadata), tags
474
+ naming their version (`v<version>` or `<name>-v<version>`), SPDX licences, per-type
475
+ archive limits and custom source rules. New exports: `registryVersions`,
476
+ `registryLimits`, `parseSemver`, `compareSemver`, `tagVersion`. The CLI accepts the four
477
+ registry kinds. The package ships `registry/`. World formats and IPC are unchanged.
package/README.md CHANGED
@@ -32,6 +32,29 @@ Every schema file is importable at `@hyprune/schema/v0.N/<name>.schema.json` (`v
32
32
 
33
33
  [RFC source](https://github.com/hyprune/docs/tree/main/src/content/docs/rfcs) is normative for semantics. [RFC-0003](https://hyprune.com/rfcs/0003-ipc/) defines IPC; [RFC-0004](https://hyprune.com/rfcs/0004-world-format/) defines worlds. The `$id` URLs are mirrored by docs for authoring; this validator registers all schemas locally and never fetches them.
34
34
 
35
+ ## Registry documents (RFC-0015)
36
+
37
+ Registry formats are versioned on their own, under `registry/v0.N/` (first: `0.1`):
38
+
39
+ | Schema | Describes |
40
+ | --- | --- |
41
+ | `registry/v0.1/index.schema.json` | An index (official, community registry or any third-party index). `$defs.entry` is one entry and the shape of a registry entry file, which may add a `$schema` pointer. |
42
+ | `registry/v0.1/release-record.schema.json` | `<id>-<version>.release.json`, the record published with each release. |
43
+ | `registry/v0.1/sources.schema.json` | `sources.json` and the read-only files listed in `HYPRUNE_SOURCES_FILES`. |
44
+
45
+ ```js
46
+ import { validateRegistry, compareSemver, tagVersion } from '@hyprune/schema';
47
+ validateRegistry('registry-index', index); // also 'registry-entry', 'release-record', 'sources'
48
+ tagVersion('lumen-reach-v0.10.2'); // { name: 'lumen-reach', version: '0.10.2' }
49
+ ```
50
+
51
+ `validateRegistry` adds the rules a schema can't express: ids unique within an index,
52
+ versions unique and newest first by SemVer, each tag naming its version (`v<version>` or
53
+ `<name>-v<version>`), SPDX licences, per-type archive limits (`registryLimits`), release
54
+ record asset names, and unique, non-reserved custom source ids. CLI:
55
+ `npm run validate -- registry-index index.json` (indexes up to 16 MiB). Fixtures:
56
+ `examples/registry/` (valid) and `examples/registry/invalid/<kind>--<case>.json`.
57
+
35
58
  ## Validate
36
59
 
37
60
  Use Node >=22.12 (CI pins 24.14.0), npm, and the committed lockfile:
package/bin/validate.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { readFileSync } from 'node:fs';
3
- import { validate } from '../lib/validate.mjs';
3
+ import { validate, validateRegistry } from '../lib/validate.mjs';
4
+ const registryKinds = ['registry-index', 'registry-entry', 'release-record', 'sources'];
4
5
  const [kind, file, method, version, worldFile, asset, ...extra] = process.argv.slice(2);
5
6
  // For kind `object` the fifth argument is the object's glTF (.gltf or .glb) for the cross-checks.
6
7
  const gltfJson = path => {
@@ -9,19 +10,24 @@ const gltfJson = path => {
9
10
  if (bytes.length < 20 || bytes.readUInt32LE(0) !== 0x46546c67 || bytes.readUInt32LE(16) !== 0x4e4f534a) throw new Error('Invalid GLB header/JSON chunk');
10
11
  return JSON.parse(bytes.subarray(20, 20 + bytes.readUInt32LE(12)).toString('utf8'));
11
12
  };
12
- if (!kind || !file || extra.length || ((worldFile || asset) && kind !== 'scene' && kind !== 'object') || (asset && kind === 'object')) {
13
+ if (!kind || !file || extra.length || ((worldFile || asset) && kind !== 'scene' && kind !== 'object') || (asset && kind === 'object') ||
14
+ (registryKinds.includes(kind) && method && method !== '-')) {
13
15
  console.error('Usage: hyprune-validate <world|extension|screen-type|ipc> <file.json|-> [response-method|-] [contract-version]\n' +
14
16
  ' hyprune-validate scene <scene.gltf> - <world-format> <world.json> [object-asset-id]\n' +
15
- ' hyprune-validate <object|library|library-releases> <file.json|-> [-] [format] [object scene.gltf|.glb]\n(in this repository: npm run validate -- ...)');
17
+ ' hyprune-validate <object|library|library-releases> <file.json|-> [-] [format] [object scene.gltf|.glb]\n' +
18
+ ' hyprune-validate <registry-index|registry-entry|release-record|sources> <file.json|-> [-] [registry version]\n(in this repository: npm run validate -- ...)');
16
19
  process.exitCode = 2;
17
20
  } else {
18
21
  try {
19
22
  const bytes = readFileSync(file === '-' ? 0 : file);
20
- if (bytes.length > 1_048_576) throw new Error('Document exceeds 1 MiB');
23
+ // Indexes may be up to 16 MiB as served (RFC-0015); every other document 1 MiB.
24
+ const cap = kind === 'registry-index' ? 16 * 1_048_576 : 1_048_576;
25
+ if (bytes.length > cap) throw new Error(`Document exceeds ${cap / 1_048_576} MiB`);
21
26
  const value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
22
27
  const options = kind === 'object' ? { gltf: worldFile ? gltfJson(worldFile) : undefined }
23
28
  : { world: worldFile ? JSON.parse(readFileSync(worldFile, 'utf8')) : undefined, asset };
24
- const result = validate(kind, value, method === '-' ? undefined : method, version || undefined, options);
29
+ const result = registryKinds.includes(kind) ? validateRegistry(kind, value, version || undefined)
30
+ : validate(kind, value, method === '-' ? undefined : method, version || undefined, options);
25
31
  for (const warning of result.warnings || []) console.error(`warning: ${warning}`);
26
32
  if (result.valid) console.log(`VALID ${kind}: ${file}`);
27
33
  else { console.error(result.errors.join('\n')); process.exitCode = 1; }
@@ -0,0 +1,106 @@
1
+ {
2
+ "$schema": "https://hyprune.com/schema/registry/v0.1/index.schema.json#/$defs/entry",
3
+ "id": "io.github.example-creator.tidepool",
4
+ "type": "world",
5
+ "name": "Tidepool Station",
6
+ "summary": "A tidal research station with four workspace homes and a pier.",
7
+ "description": "Four connected homes around a flooded atrium.\nA pier with a long view.",
8
+ "creator": "example-creator",
9
+ "repo": "https://github.com/example-creator/tidepool-world",
10
+ "tags": [
11
+ "water",
12
+ "station"
13
+ ],
14
+ "versions": [
15
+ {
16
+ "tag": "v1.2.0",
17
+ "version": "1.2.0",
18
+ "formatVersion": "0.9",
19
+ "published": "2026-11-01",
20
+ "license": "CC-BY-SA-4.0",
21
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.tar.zst",
22
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
23
+ "bytes": 48213004,
24
+ "expandedBytes": 96424960,
25
+ "files": 212,
26
+ "record": {
27
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.release.json",
28
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
29
+ },
30
+ "requires": {
31
+ "libraries": [
32
+ "com.example.street@1.2.0"
33
+ ]
34
+ },
35
+ "thumbnails": [
36
+ {
37
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.thumb-1.png",
38
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
39
+ "width": 1280,
40
+ "height": 720
41
+ }
42
+ ],
43
+ "status": "available"
44
+ },
45
+ {
46
+ "tag": "v1.2.0-rc.1",
47
+ "version": "1.2.0-rc.1",
48
+ "formatVersion": "0.9",
49
+ "published": "2026-10-28",
50
+ "license": "CC-BY-SA-4.0",
51
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.tar.zst",
52
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
53
+ "bytes": 48213004,
54
+ "expandedBytes": 96424960,
55
+ "files": 212,
56
+ "record": {
57
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.release.json",
58
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
59
+ },
60
+ "requires": {
61
+ "libraries": [
62
+ "com.example.street@1.2.0"
63
+ ]
64
+ },
65
+ "thumbnails": [
66
+ {
67
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.thumb-1.png",
68
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
69
+ "width": 1280,
70
+ "height": 720
71
+ }
72
+ ],
73
+ "status": "available"
74
+ },
75
+ {
76
+ "tag": "v1.1.0",
77
+ "version": "1.1.0",
78
+ "formatVersion": "0.9",
79
+ "published": "2026-10-20",
80
+ "license": "CC-BY-SA-4.0",
81
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.tar.zst",
82
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
83
+ "bytes": 48213004,
84
+ "expandedBytes": 96424960,
85
+ "files": 212,
86
+ "record": {
87
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.release.json",
88
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
89
+ },
90
+ "requires": {
91
+ "libraries": [
92
+ "com.example.street@1.2.0"
93
+ ]
94
+ },
95
+ "thumbnails": [
96
+ {
97
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.thumb-1.png",
98
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
99
+ "width": 1280,
100
+ "height": 720
101
+ }
102
+ ],
103
+ "status": "available"
104
+ }
105
+ ]
106
+ }
@@ -0,0 +1,137 @@
1
+ {
2
+ "indexVersion": "0.1",
3
+ "name": "Example community index",
4
+ "homepage": "https://example.org/hyprune",
5
+ "serial": 1842,
6
+ "generated": "2026-11-02T08:00:00Z",
7
+ "successor": null,
8
+ "entries": [
9
+ {
10
+ "id": "io.github.example-creator.tidepool",
11
+ "type": "world",
12
+ "name": "Tidepool Station",
13
+ "summary": "A tidal research station with four workspace homes and a pier.",
14
+ "description": "Four connected homes around a flooded atrium.\nA pier with a long view.",
15
+ "creator": "example-creator",
16
+ "repo": "https://github.com/example-creator/tidepool-world",
17
+ "tags": [
18
+ "water",
19
+ "station"
20
+ ],
21
+ "versions": [
22
+ {
23
+ "tag": "v1.2.0",
24
+ "version": "1.2.0",
25
+ "formatVersion": "0.9",
26
+ "published": "2026-11-01",
27
+ "license": "CC-BY-SA-4.0",
28
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.tar.zst",
29
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
30
+ "bytes": 48213004,
31
+ "expandedBytes": 96424960,
32
+ "files": 212,
33
+ "record": {
34
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.release.json",
35
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
36
+ },
37
+ "requires": {
38
+ "libraries": [
39
+ "com.example.street@1.2.0"
40
+ ]
41
+ },
42
+ "thumbnails": [
43
+ {
44
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.thumb-1.png",
45
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
46
+ "width": 1280,
47
+ "height": 720
48
+ }
49
+ ],
50
+ "status": "available"
51
+ },
52
+ {
53
+ "tag": "v1.2.0-rc.1",
54
+ "version": "1.2.0-rc.1",
55
+ "formatVersion": "0.9",
56
+ "published": "2026-10-28",
57
+ "license": "CC-BY-SA-4.0",
58
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.tar.zst",
59
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
60
+ "bytes": 48213004,
61
+ "expandedBytes": 96424960,
62
+ "files": 212,
63
+ "record": {
64
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.release.json",
65
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
66
+ },
67
+ "requires": {
68
+ "libraries": [
69
+ "com.example.street@1.2.0"
70
+ ]
71
+ },
72
+ "thumbnails": [
73
+ {
74
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.thumb-1.png",
75
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
76
+ "width": 1280,
77
+ "height": 720
78
+ }
79
+ ],
80
+ "status": "available"
81
+ },
82
+ {
83
+ "tag": "v1.1.0",
84
+ "version": "1.1.0",
85
+ "formatVersion": "0.9",
86
+ "published": "2026-10-20",
87
+ "license": "CC-BY-SA-4.0",
88
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.tar.zst",
89
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
90
+ "bytes": 48213004,
91
+ "expandedBytes": 96424960,
92
+ "files": 212,
93
+ "record": {
94
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.release.json",
95
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
96
+ },
97
+ "requires": {
98
+ "libraries": [
99
+ "com.example.street@1.2.0"
100
+ ]
101
+ },
102
+ "thumbnails": [
103
+ {
104
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.thumb-1.png",
105
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
106
+ "width": 1280,
107
+ "height": 720
108
+ }
109
+ ],
110
+ "status": "available"
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "id": "com.example.street",
116
+ "type": "library",
117
+ "name": "Street kit",
118
+ "summary": "Lanterns and benches.",
119
+ "creator": "example-org",
120
+ "repo": "https://github.com/example-org/hyprune-objects",
121
+ "versions": [
122
+ {
123
+ "tag": "street-v1.2.0",
124
+ "version": "1.2.0",
125
+ "formatVersion": "0.10",
126
+ "published": "2026-10-30",
127
+ "license": "CC0-1.0",
128
+ "url": "https://github.com/example-org/hyprune-objects/releases/download/street-v1.2.0/com.example.street-1.2.0.tar.zst",
129
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
130
+ "bytes": 3108221,
131
+ "expandedBytes": 7340032,
132
+ "files": 24
133
+ }
134
+ ]
135
+ }
136
+ ]
137
+ }
@@ -0,0 +1,106 @@
1
+ {
2
+ "$schema": "https://hyprune.com/schema/registry/v0.1/index.schema.json#/$defs/entry",
3
+ "id": "io.github.example-creator.tidepool",
4
+ "type": "world",
5
+ "name": "Tidepool Station",
6
+ "summary": "A tidal research station with four workspace homes and a pier.",
7
+ "description": "Four connected homes around a flooded atrium.\nA pier with a long view.",
8
+ "creator": "example-creator",
9
+ "repo": "https://github.com/example-creator/tidepool-world",
10
+ "tags": [
11
+ "water",
12
+ "station"
13
+ ],
14
+ "versions": [
15
+ {
16
+ "tag": "v1.2.0",
17
+ "version": "1.2.0",
18
+ "formatVersion": "0.9",
19
+ "published": "2026-11-01",
20
+ "license": "Free for everyone",
21
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.tar.zst",
22
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
23
+ "bytes": 48213004,
24
+ "expandedBytes": 96424960,
25
+ "files": 212,
26
+ "record": {
27
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.release.json",
28
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
29
+ },
30
+ "requires": {
31
+ "libraries": [
32
+ "com.example.street@1.2.0"
33
+ ]
34
+ },
35
+ "thumbnails": [
36
+ {
37
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.thumb-1.png",
38
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
39
+ "width": 1280,
40
+ "height": 720
41
+ }
42
+ ],
43
+ "status": "available"
44
+ },
45
+ {
46
+ "tag": "v1.2.0-rc.1",
47
+ "version": "1.2.0-rc.1",
48
+ "formatVersion": "0.9",
49
+ "published": "2026-10-28",
50
+ "license": "CC-BY-SA-4.0",
51
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.tar.zst",
52
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
53
+ "bytes": 48213004,
54
+ "expandedBytes": 96424960,
55
+ "files": 212,
56
+ "record": {
57
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.release.json",
58
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
59
+ },
60
+ "requires": {
61
+ "libraries": [
62
+ "com.example.street@1.2.0"
63
+ ]
64
+ },
65
+ "thumbnails": [
66
+ {
67
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.thumb-1.png",
68
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
69
+ "width": 1280,
70
+ "height": 720
71
+ }
72
+ ],
73
+ "status": "available"
74
+ },
75
+ {
76
+ "tag": "v1.1.0",
77
+ "version": "1.1.0",
78
+ "formatVersion": "0.9",
79
+ "published": "2026-10-20",
80
+ "license": "CC-BY-SA-4.0",
81
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.tar.zst",
82
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
83
+ "bytes": 48213004,
84
+ "expandedBytes": 96424960,
85
+ "files": 212,
86
+ "record": {
87
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.release.json",
88
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
89
+ },
90
+ "requires": {
91
+ "libraries": [
92
+ "com.example.street@1.2.0"
93
+ ]
94
+ },
95
+ "thumbnails": [
96
+ {
97
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.thumb-1.png",
98
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
99
+ "width": 1280,
100
+ "height": 720
101
+ }
102
+ ],
103
+ "status": "available"
104
+ }
105
+ ]
106
+ }
@@ -0,0 +1,106 @@
1
+ {
2
+ "$schema": "https://hyprune.com/schema/registry/v0.1/index.schema.json#/$defs/entry",
3
+ "id": "io.github.example-creator.tidepool",
4
+ "type": "world",
5
+ "name": "Tidepool Station",
6
+ "summary": "A tidal research station with four workspace homes and a pier.",
7
+ "description": "Four connected homes around a flooded atrium.\nA pier with a long view.",
8
+ "creator": "example-creator",
9
+ "repo": "https://github.com/example-creator/tidepool-world",
10
+ "tags": [
11
+ "water",
12
+ "station"
13
+ ],
14
+ "versions": [
15
+ {
16
+ "tag": "v1.2.0+build.5",
17
+ "version": "1.2.0+build.5",
18
+ "formatVersion": "0.9",
19
+ "published": "2026-11-01",
20
+ "license": "CC-BY-SA-4.0",
21
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.tar.zst",
22
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
23
+ "bytes": 48213004,
24
+ "expandedBytes": 96424960,
25
+ "files": 212,
26
+ "record": {
27
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.release.json",
28
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
29
+ },
30
+ "requires": {
31
+ "libraries": [
32
+ "com.example.street@1.2.0"
33
+ ]
34
+ },
35
+ "thumbnails": [
36
+ {
37
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.thumb-1.png",
38
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
39
+ "width": 1280,
40
+ "height": 720
41
+ }
42
+ ],
43
+ "status": "available"
44
+ },
45
+ {
46
+ "tag": "v1.2.0-rc.1",
47
+ "version": "1.2.0-rc.1",
48
+ "formatVersion": "0.9",
49
+ "published": "2026-10-28",
50
+ "license": "CC-BY-SA-4.0",
51
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.tar.zst",
52
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
53
+ "bytes": 48213004,
54
+ "expandedBytes": 96424960,
55
+ "files": 212,
56
+ "record": {
57
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.release.json",
58
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
59
+ },
60
+ "requires": {
61
+ "libraries": [
62
+ "com.example.street@1.2.0"
63
+ ]
64
+ },
65
+ "thumbnails": [
66
+ {
67
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.thumb-1.png",
68
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
69
+ "width": 1280,
70
+ "height": 720
71
+ }
72
+ ],
73
+ "status": "available"
74
+ },
75
+ {
76
+ "tag": "v1.1.0",
77
+ "version": "1.1.0",
78
+ "formatVersion": "0.9",
79
+ "published": "2026-10-20",
80
+ "license": "CC-BY-SA-4.0",
81
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.tar.zst",
82
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
83
+ "bytes": 48213004,
84
+ "expandedBytes": 96424960,
85
+ "files": 212,
86
+ "record": {
87
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.release.json",
88
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
89
+ },
90
+ "requires": {
91
+ "libraries": [
92
+ "com.example.street@1.2.0"
93
+ ]
94
+ },
95
+ "thumbnails": [
96
+ {
97
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.thumb-1.png",
98
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
99
+ "width": 1280,
100
+ "height": 720
101
+ }
102
+ ],
103
+ "status": "available"
104
+ }
105
+ ]
106
+ }
@@ -0,0 +1,106 @@
1
+ {
2
+ "$schema": "https://hyprune.com/schema/registry/v0.1/index.schema.json#/$defs/entry",
3
+ "id": "io.github.example-creator.tidepool",
4
+ "type": "world",
5
+ "name": "Tidepool Station",
6
+ "summary": "line\nbreak",
7
+ "description": "Four connected homes around a flooded atrium.\nA pier with a long view.",
8
+ "creator": "example-creator",
9
+ "repo": "https://github.com/example-creator/tidepool-world",
10
+ "tags": [
11
+ "water",
12
+ "station"
13
+ ],
14
+ "versions": [
15
+ {
16
+ "tag": "v1.2.0",
17
+ "version": "1.2.0",
18
+ "formatVersion": "0.9",
19
+ "published": "2026-11-01",
20
+ "license": "CC-BY-SA-4.0",
21
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.tar.zst",
22
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
23
+ "bytes": 48213004,
24
+ "expandedBytes": 96424960,
25
+ "files": 212,
26
+ "record": {
27
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.release.json",
28
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
29
+ },
30
+ "requires": {
31
+ "libraries": [
32
+ "com.example.street@1.2.0"
33
+ ]
34
+ },
35
+ "thumbnails": [
36
+ {
37
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0/io.github.example-creator.tidepool-1.2.0.thumb-1.png",
38
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
39
+ "width": 1280,
40
+ "height": 720
41
+ }
42
+ ],
43
+ "status": "available"
44
+ },
45
+ {
46
+ "tag": "v1.2.0-rc.1",
47
+ "version": "1.2.0-rc.1",
48
+ "formatVersion": "0.9",
49
+ "published": "2026-10-28",
50
+ "license": "CC-BY-SA-4.0",
51
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.tar.zst",
52
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
53
+ "bytes": 48213004,
54
+ "expandedBytes": 96424960,
55
+ "files": 212,
56
+ "record": {
57
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.release.json",
58
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
59
+ },
60
+ "requires": {
61
+ "libraries": [
62
+ "com.example.street@1.2.0"
63
+ ]
64
+ },
65
+ "thumbnails": [
66
+ {
67
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.2.0-rc.1/io.github.example-creator.tidepool-1.2.0-rc.1.thumb-1.png",
68
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
69
+ "width": 1280,
70
+ "height": 720
71
+ }
72
+ ],
73
+ "status": "available"
74
+ },
75
+ {
76
+ "tag": "v1.1.0",
77
+ "version": "1.1.0",
78
+ "formatVersion": "0.9",
79
+ "published": "2026-10-20",
80
+ "license": "CC-BY-SA-4.0",
81
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.tar.zst",
82
+ "sha256": "5d2f0c6e3b9a41d8e7c2b0f4a6d9e1c3b5a7f9e2d4c6b8a0f1e3d5c7b9a2e4f6",
83
+ "bytes": 48213004,
84
+ "expandedBytes": 96424960,
85
+ "files": 212,
86
+ "record": {
87
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.release.json",
88
+ "sha256": "9a1c3e5f7b9d0a2c4e6f8b1d3a5c7e9f0b2d4a6c8e1f3b5d7a9c0e2f4b6d8a1c"
89
+ },
90
+ "requires": {
91
+ "libraries": [
92
+ "com.example.street@1.2.0"
93
+ ]
94
+ },
95
+ "thumbnails": [
96
+ {
97
+ "url": "https://github.com/example-creator/tidepool-world/releases/download/v1.1.0/io.github.example-creator.tidepool-1.1.0.thumb-1.png",
98
+ "sha256": "0b8e4c2a6f1d3e5b7a9c0d2e4f6a8b1c3d5e7f9a0b2c4d6e8f1a3b5c7d9e0f2a",
99
+ "width": 1280,
100
+ "height": 720
101
+ }
102
+ ],
103
+ "status": "available"
104
+ }
105
+ ]
106
+ }