@hyprune/schema 0.9.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 +41 -0
- package/README.md +31 -1
- 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 +147 -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/v0.10/object.schema.json +39 -0
- package/v0.25/ipc.schema.json +20085 -0
package/CHANGELOG.md
CHANGED
|
@@ -434,3 +434,44 @@ Draft only; no version changes. `v0.10/object.schema.json` and the validator:
|
|
|
434
434
|
## @hyprune/schema 0.9.0 (2026-10-13)
|
|
435
435
|
|
|
436
436
|
Publishes IPC 0.24: `objects.catalog` entries carry a placed machine's declared inputs (`machine`), and a new `live` state key reports each placed machine's source, status and per-input values (published only on change). Inherited from 0.23 otherwise; no new grant. Also the object 0.10 draft additions for gauges: the `average` mapping modifier, `levels` slots (fill/slide with spring) and stack rate, cap 100 and signed spacing.
|
|
437
|
+
|
|
438
|
+
## IPC 0.25 (draft): companions (RFC-0010 companions amendment)
|
|
439
|
+
|
|
440
|
+
- Methods (grant `objects.control`): `companion.set {ref}` (a companion-capable
|
|
441
|
+
library or user catalog ref), `companion.clear {}` and `companion.mode {mode:
|
|
442
|
+
follow|stay}`; each returns `{revision}`. Existing methods take the reserved
|
|
443
|
+
object id `companion`: `npcs.bind` (a route or a standing spot), `paths.draw
|
|
444
|
+
{bind}` and `interaction.choose`. No new grant, no new event.
|
|
445
|
+
- Required state key `companion {ref|null, name|null (<=32), state
|
|
446
|
+
(none|loading|unavailable|active|waiting|hidden), reason|null (<=64), mode
|
|
447
|
+
(follow|stay|route), path|null (qualified path ref), activity|null
|
|
448
|
+
(following|walking|running|idle|talking|sitting|waiting|carried),
|
|
449
|
+
position|null, carried}`.
|
|
450
|
+
- `objects.catalog` entries gain required `companion`: null, or `{capable,
|
|
451
|
+
name, reason|null}`.
|
|
452
|
+
- `npcs.aimed.interactions[].type` gains `companion` (Stay and Follow).
|
|
453
|
+
- Everything else is inherited from 0.24 unchanged; `session.hello` reports
|
|
454
|
+
`0.25`. Inheritance test included.
|
|
455
|
+
|
|
456
|
+
## Object format 0.10 (draft): companion block
|
|
457
|
+
|
|
458
|
+
- Optional `companion {name? (1-32), followDistance? (1.5-2.5 m), idles?
|
|
459
|
+
(<=4 unique clip names), say? (<=8 lines of <=160 characters)}`, only on
|
|
460
|
+
characters; idle variants must be clips of `traits.character` and not
|
|
461
|
+
canonical RFC-0010 clip names (`talk` is a new canonical name).
|
|
462
|
+
|
|
463
|
+
## @hyprune/schema 0.10.0 (2026-10-13)
|
|
464
|
+
|
|
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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **Hyprune** is an explorable, world-driven desktop environment for Hyprland: your workspaces become places you can walk through, with live windows on the walls. This repository holds the versioned **schemas** for world packages, IPC and manifests, and their validator. Install Hyprune through the [hyprune](https://github.com/hyprune/hyprune) repository (starter kits, Nix, Arch); learn more at [hyprune.com](https://hyprune.com). Licence: MIT.
|
|
4
4
|
|
|
5
|
-
Versioned contracts for Hyprune, a world-driven Hyprland desktop: world packages (formats 0.1–0.9), the IPC protocol (0.1–0.
|
|
5
|
+
Versioned contracts for Hyprune, a world-driven Hyprland desktop: world packages (formats 0.1–0.9), the IPC protocol (0.1–0.25, 0.25 draft), object and library manifests (0.9, draft 0.10), extension and screen-type manifests and the input keymap. JSON Schema dialect: **2020-12**. Every version is frozen once published; core, the shell and the SDK pin these exact files. Readable reference: [hyprune.com/reference/schema](https://hyprune.com/reference/schema/).
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -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:
|
|
@@ -212,6 +235,13 @@ raw value, condition (`fresh`, `stale`, `missing`, `error`) and `publishedAt`
|
|
|
212
235
|
grant; every other 0.23 definition is unchanged. See the RFC-0013 amendment
|
|
213
236
|
"Live state in IPC 0.24".
|
|
214
237
|
|
|
238
|
+
IPC **0.25** (draft, the RFC-0010 companions amendment) adds the companion: a
|
|
239
|
+
required `companion` state key (the chosen ref and name, its state, mode
|
|
240
|
+
`follow`/`stay`/`route`, bound path, activity and position), a `companion`
|
|
241
|
+
capability on catalog entries, the aimed interaction type `companion`, and
|
|
242
|
+
`companion.set/clear/mode` (objects.control). Object format 0.10 (draft) gains
|
|
243
|
+
the optional `companion` block. Every other 0.24 definition is unchanged.
|
|
244
|
+
|
|
215
245
|
## Objects and libraries (RFC-0011)
|
|
216
246
|
|
|
217
247
|
Object manifests (`object.json`) and library manifests (`library.json`) use the
|
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
|
+
}
|