Skip to content

JSON Schema

jabol ships a JSON Schema generated from the same Zod definitions the server uses to validate links.json at boot. Point your editor at it and you get autocomplete, schema validation, and field-level hover docs while you edit.

The $schema pointer

Add "$schema" as the first key in your links.json:

{
"$schema": "https://raw.githubusercontent.com/stephansama/jabol/refs/heads/main/schema/links.schema.json",
"title": "Homelab",
"categories": [
/* … */
]
}

VS Code, JetBrains IDEs, Neovim (with vscode-json-languageservice / coc-json / nvim-cmp), and any other JSON-Schema-aware tool will fetch the schema and offer:

  • Autocomplete for top-level keys, category keys, and link keys.
  • Inline validation — invalid values are underlined immediately.
  • Hover tooltips on each field with the descriptions from Top-level fields and Link fields.

Where the schema lives

The canonical schema file is at schema/links.schema.json in the repo. The raw URL above is what you embed in $schema.

How it’s generated

The schema is derived from server/enrich/schema.ts (the Zod source) via pnpm schema:generate. CI’s schema:check job fails any PR where the committed schema drifts from the Zod source, so the file you point at is always in sync with the validation the server does at boot.

Project-wide editor config (VS Code)

If your links.json is named something else, or you want autocomplete without editing the file itself, point at the schema from .vscode/settings.json:

{
"json.schemas": [
{
"fileMatch": ["links.json", "my-links.json"],
"url": "https://raw.githubusercontent.com/stephansama/jabol/refs/heads/main/schema/links.schema.json"
}
]
}