Skip to content

Commit 21723cb

Browse files
committed
feat(registry): publish VPMS version 2 across the portal
1 parent 27a5250 commit 21723cb

6 files changed

Lines changed: 483 additions & 30 deletions

File tree

src/content/docs/vpms-v2.mdx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
title: VPMS Version 2
3+
description: Frozen Version 2 schema contract, canonical URLs, examples, and compatibility rules.
4+
order: 9
5+
---
6+
7+
# VPMS Version 2
8+
9+
VPMS Version 2 is the frozen `2.0.0` generation of the Vib Project Manifest Specification.
10+
11+
## Canonical schema
12+
13+
Use this immutable schema URL in Version 2 manifests:
14+
15+
```json
16+
{
17+
"$schema": "https://schema.ygit.dev/vpms/v2/vibproject.schema.json",
18+
"schemaVersion": 2,
19+
"manifestVersion": "2.0.0"
20+
}
21+
```

src/data/navigation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"title": "Reference",
1212
"items": [
1313
{ "label": "Schema Reference", "href": "/docs/schema-reference/" },
14+
{ "label": "VPMS Version 2", "href": "/docs/vpms-v2/" },
1415
{ "label": "Validation", "href": "/docs/validation/" },
1516
{ "label": "Versioning", "href": "/docs/versioning/" }
1617
]

src/data/schema-list.json

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,184 @@
141141
"description": "Manifest timestamps, author, generator, and specification metadata."
142142
}
143143
]
144+
},
145+
{
146+
"slug": "vibproject-v2",
147+
"acronym": "VPMS v2",
148+
"name": "Vib Project Manifest Schema Version 2",
149+
"description": "Frozen Version 2 schema for vibproject.ygit manifests with expanded project classification, links, support, distribution, funding, and security metadata.",
150+
"version": "2.0.0",
151+
"schemaVersion": 2,
152+
"status": "stable",
153+
"draft": "2020-12",
154+
"license": "MIT",
155+
"compatibility": "YGit v2",
156+
"schemaPath": "/vpms/v2/vibproject.schema.json",
157+
"examplePath": "/examples/v2/vibproject-full-example.ygit",
158+
"updatedAt": "2026-07-29",
159+
"properties": [
160+
{
161+
"name": "$schema",
162+
"type": "string (URI)",
163+
"required": true,
164+
"description": "Canonical VPMS Version 2 schema URL."
165+
},
166+
{
167+
"name": "schemaVersion",
168+
"type": "integer",
169+
"required": true,
170+
"description": "Schema major version; must equal 2."
171+
},
172+
{
173+
"name": "manifestVersion",
174+
"type": "string (SemVer)",
175+
"required": true,
176+
"description": "VPMS Version 2 manifest format version."
177+
},
178+
{
179+
"name": "project",
180+
"type": "object",
181+
"required": true,
182+
"description": "Project identity and general metadata."
183+
},
184+
{
185+
"name": "classification",
186+
"type": "object",
187+
"required": false,
188+
"description": "Project ownership, product type, application type, distribution model, and lifecycle."
189+
},
190+
{
191+
"name": "organization",
192+
"type": "object",
193+
"required": false,
194+
"description": "Organization, ownership, maintainers, contributors, and contact information."
195+
},
196+
{
197+
"name": "repository",
198+
"type": "object",
199+
"required": false,
200+
"description": "Repository hosting and source-control information."
201+
},
202+
{
203+
"name": "links",
204+
"type": "object",
205+
"required": false,
206+
"description": "Official website, documentation, community, social, and repository links."
207+
},
208+
{
209+
"name": "branding",
210+
"type": "object",
211+
"required": false,
212+
"description": "Product names, visual assets, and preferred theme."
213+
},
214+
{
215+
"name": "license",
216+
"type": "object",
217+
"required": false,
218+
"description": "Project license name, SPDX identifier, and license file."
219+
},
220+
{
221+
"name": "technology",
222+
"type": "object",
223+
"required": false,
224+
"description": "Languages, frameworks, libraries, package managers, databases, and APIs."
225+
},
226+
{
227+
"name": "platform",
228+
"type": "object",
229+
"required": false,
230+
"description": "Supported desktop, mobile, server, web, and operating-system platforms."
231+
},
232+
{
233+
"name": "runtime",
234+
"type": "object",
235+
"required": false,
236+
"description": "Python, Node.js, Docker, and container runtime requirements."
237+
},
238+
{
239+
"name": "entrypoints",
240+
"type": "object",
241+
"required": false,
242+
"description": "Application, CLI, GUI, API, documentation, and test entry points."
243+
},
244+
{
245+
"name": "paths",
246+
"type": "object",
247+
"required": false,
248+
"description": "Canonical repository file and directory locations."
249+
},
250+
{
251+
"name": "dependencies",
252+
"type": "object",
253+
"required": false,
254+
"description": "Required, optional, and external-service dependencies."
255+
},
256+
{
257+
"name": "documentation",
258+
"type": "object",
259+
"required": false,
260+
"description": "Documentation files, roots, and published website."
261+
},
262+
{
263+
"name": "support",
264+
"type": "object",
265+
"required": false,
266+
"description": "Support email, documentation, community, issues, discussions, and security links."
267+
},
268+
{
269+
"name": "build",
270+
"type": "object",
271+
"required": false,
272+
"description": "Build system, package formats, and build commands."
273+
},
274+
{
275+
"name": "release",
276+
"type": "object",
277+
"required": false,
278+
"description": "Release strategy, versioning standard, latest version, and release notes."
279+
},
280+
{
281+
"name": "distribution",
282+
"type": "object",
283+
"required": false,
284+
"description": "Official package registries, application stores, and release channels."
285+
},
286+
{
287+
"name": "funding",
288+
"type": "object",
289+
"required": false,
290+
"description": "Funding and sponsorship links."
291+
},
292+
{
293+
"name": "quality",
294+
"type": "object",
295+
"required": false,
296+
"description": "Formatting, linting, testing, coverage, and security tooling."
297+
},
298+
{
299+
"name": "security",
300+
"type": "object",
301+
"required": false,
302+
"description": "Security policy, SBOM, signing, and vulnerability-reporting metadata."
303+
},
304+
{
305+
"name": "automation",
306+
"type": "object",
307+
"required": false,
308+
"description": "CI/CD systems, workflows, and scheduled automation."
309+
},
310+
{
311+
"name": "ai",
312+
"type": "object",
313+
"required": false,
314+
"description": "AI repository-context and project-discovery capabilities."
315+
},
316+
{
317+
"name": "metadata",
318+
"type": "object",
319+
"required": false,
320+
"description": "Manifest timestamps, author, generator, and VPMS specification information."
321+
}
322+
]
144323
}
145324
]

src/pages/examples/index.astro

Lines changed: 126 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,134 @@
22
import Button from '@/components/buttons/Button';
33
import Card from '@/components/cards/Card';
44
import Container from '@/components/common/Container';
5-
import Breadcrumb from '@/components/navigation/Breadcrumb';
65
import CodeBlock from '@/components/documentation/CodeBlock';
76
import PageHeader from '@/components/documentation/PageHeader';
7+
import Breadcrumb from '@/components/navigation/Breadcrumb';
88
import MainLayout from '@/layouts/MainLayout.astro';
99
import { readFile } from 'node:fs/promises';
10-
const example = await readFile(new URL('../../../examples/vibproject-full-example.ygit', import.meta.url), 'utf-8');
10+
11+
const v1Example = await readFile(
12+
new URL('../../../examples/vibproject-full-example.ygit', import.meta.url),
13+
'utf-8',
14+
);
15+
16+
const v2Example = await readFile(
17+
new URL('../../../examples/v2/vibproject-full-example.ygit', import.meta.url),
18+
'utf-8',
19+
);
20+
21+
const v2Examples = [
22+
{
23+
title: 'Minimal manifest',
24+
description: 'The smallest valid VPMS Version 2 manifest.',
25+
path: '/examples/v2/vibproject-minimal-example.ygit',
26+
},
27+
{
28+
title: 'Full manifest',
29+
description: 'Every supported VPMS Version 2 root section and property.',
30+
path: '/examples/v2/vibproject-full-example.ygit',
31+
},
32+
{
33+
title: 'Desktop application',
34+
description: 'A cross-platform desktop application manifest.',
35+
path: '/examples/v2/vibproject-desktop-app-example.ygit',
36+
},
37+
{
38+
title: 'Web service',
39+
description: 'A containerized API and web-service manifest.',
40+
path: '/examples/v2/vibproject-web-service-example.ygit',
41+
},
42+
{
43+
title: 'Software library',
44+
description: 'A reusable package and library manifest.',
45+
path: '/examples/v2/vibproject-library-example.ygit',
46+
},
47+
{
48+
title: 'Community project',
49+
description: 'A community-owned open-source project manifest.',
50+
path: '/examples/v2/vibproject-community-project-example.ygit',
51+
},
52+
{
53+
title: 'Edge worker',
54+
description: 'A TypeScript edge-worker application manifest.',
55+
path: '/examples/v2/vibproject-worker-example.ygit',
56+
},
57+
] as const;
1158
---
12-
<MainLayout category="example" title="Examples" description="Official valid VPMS Version 1 reference manifests."><Container class="py-5"><Breadcrumb items={[{ label: 'Home', href: '/' }, { label: 'Examples' }]} /><PageHeader title="Examples" description="Production-oriented manifests synchronized with the official Version 1 schema." /><Card class="mb-5"><div class="flex flex-wrap items-center justify-between gap-3"><div><h2 class="text-h3 font-semibold text-text">Full project manifest</h2><p class="mt-1 text-base text-content">Demonstrates every supported root object and recommended property ordering.</p></div><Button href="/examples/vibproject-full-example.ygit" download>Download</Button></div></Card><CodeBlock code={example} language="json" title="vibproject-full-example.ygit" /></Container></MainLayout>
59+
60+
<MainLayout
61+
category="example"
62+
title="Examples"
63+
description="Official valid VPMS Version 1 and Version 2 reference manifests."
64+
>
65+
<Container class="py-5">
66+
<Breadcrumb items={[{ label: 'Home', href: '/' }, { label: 'Examples' }]} />
67+
68+
<PageHeader
69+
title="Examples"
70+
description="Production-oriented manifests synchronized with the official versioned VPMS schemas."
71+
/>
72+
73+
<section class="mb-8" aria-labelledby="version-2-examples">
74+
<div class="mb-4">
75+
<h2 id="version-2-examples" class="text-lg font-semibold text-text">VPMS Version 2</h2>
76+
77+
<p class="mt-2 text-base text-content">
78+
Frozen Version 2 reference manifests for common project types.
79+
</p>
80+
</div>
81+
82+
<div class="mb-5 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
83+
{
84+
v2Examples.map((example) => (
85+
<Card as="article" hover class="flex h-full flex-col">
86+
<h3 class="text-h3 font-semibold text-text">{example.title}</h3>
87+
88+
<p class="mt-2 mb-4 flex-1 text-base text-content">{example.description}</p>
89+
90+
<div>
91+
<Button href={example.path} variant="secondary" download>
92+
Download
93+
</Button>
94+
</div>
95+
</Card>
96+
))
97+
}
98+
</div>
99+
100+
<CodeBlock
101+
code={v2Example}
102+
language="json"
103+
title="vibproject-full-example.ygit — VPMS Version 2"
104+
/>
105+
</section>
106+
107+
<section aria-labelledby="version-1-example">
108+
<div class="mb-4">
109+
<h2 id="version-1-example" class="text-lg font-semibold text-text">VPMS Version 1</h2>
110+
111+
<p class="mt-2 text-base text-content">Original stable Version 1 reference manifest.</p>
112+
</div>
113+
114+
<Card class="mb-5">
115+
<div class="flex flex-wrap items-center justify-between gap-3">
116+
<div>
117+
<h3 class="text-h3 font-semibold text-text">Full Version 1 manifest</h3>
118+
119+
<p class="mt-1 text-base text-content">
120+
Demonstrates every Version 1 root object and recommended property ordering.
121+
</p>
122+
</div>
123+
124+
<Button href="/examples/vibproject-full-example.ygit" download> Download </Button>
125+
</div>
126+
</Card>
127+
128+
<CodeBlock
129+
code={v1Example}
130+
language="json"
131+
title="vibproject-full-example.ygit — VPMS Version 1"
132+
/>
133+
</section>
134+
</Container>
135+
</MainLayout>

0 commit comments

Comments
 (0)