@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.
- package/CHANGELOG.md +12 -0
- package/README.md +23 -0
- package/bin/validate.mjs +11 -5
- package/examples/registry/entry.json +106 -0
- package/examples/registry/index.json +137 -0
- package/examples/registry/invalid/registry-entry--bad-spdx.json +106 -0
- package/examples/registry/invalid/registry-entry--build-metadata.json +106 -0
- package/examples/registry/invalid/registry-entry--control-characters.json +106 -0
- package/examples/registry/invalid/registry-entry--duplicate-version.json +136 -0
- package/examples/registry/invalid/registry-entry--five-thumbnails.json +130 -0
- package/examples/registry/invalid/registry-entry--library-over-limit.json +22 -0
- package/examples/registry/invalid/registry-entry--name-too-long.json +106 -0
- package/examples/registry/invalid/registry-entry--tag-mismatch.json +106 -0
- package/examples/registry/invalid/registry-entry--uppercase-hash.json +106 -0
- package/examples/registry/invalid/registry-entry--versions-oldest-first.json +106 -0
- package/examples/registry/invalid/registry-index--duplicate-id.json +159 -0
- package/examples/registry/invalid/registry-index--entry-schema-pointer.json +138 -0
- package/examples/registry/invalid/registry-index--http-url.json +137 -0
- package/examples/registry/invalid/registry-index--newer-index-version.json +137 -0
- package/examples/registry/invalid/registry-index--zero-serial.json +137 -0
- package/examples/registry/invalid/release-record--archive-name.json +42 -0
- package/examples/registry/invalid/release-record--library-requires.json +42 -0
- package/examples/registry/invalid/release-record--short-commit.json +42 -0
- package/examples/registry/invalid/release-record--tag-mismatch.json +42 -0
- package/examples/registry/invalid/release-record--thumbnail-name.json +42 -0
- package/examples/registry/invalid/sources--archive-without-hash.json +50 -0
- package/examples/registry/invalid/sources--duplicate-id.json +59 -0
- package/examples/registry/invalid/sources--github-without-repo.json +50 -0
- package/examples/registry/invalid/sources--index-with-repo.json +52 -0
- package/examples/registry/invalid/sources--label-too-long.json +51 -0
- package/examples/registry/invalid/sources--reserved-id.json +51 -0
- package/examples/registry/invalid/sources--too-many.json +277 -0
- package/examples/registry/release-record.json +42 -0
- package/examples/registry/sources.json +51 -0
- package/lib/validate.d.mts +24 -0
- package/lib/validate.mjs +137 -0
- package/package.json +2 -1
- package/registry/v0.1/index.schema.json +309 -0
- package/registry/v0.1/release-record.schema.json +181 -0
- 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
|
|
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
|
-
|
|
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 =
|
|
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
|
+
}
|