---
title: 'Schemas als Quelle'
description: 'Welche tibi-types-Schemas wofür gelten und wie du sie liest.'
---
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
Deine `api/*.yml`-Dateien sind durch JSON-Schemas geprüft. Die Schemas liegen in `tibi-types/schemas/config/`. Jede YML-Datei verweist oben per `$schema`-Zeile auf ihr Schema.
## Schema-Liste
Das Verzeichnis enthält 16 Dateien (nicht 15, wie ältere Docs behaupten):
| Schema | Gilt für | Pflichtfelder |
| --- | --- | --- |
| `project.schema.json` | `api/config.yml` | `namespace` |
| `collection.schema.json` | `api/collections/*.yml` | `name`, `permissions` |
| `field.schema.json` | einzelnes Feld | Typ-abhängig |
| `field-list.schema.json` | Feld-Listen | — |
| `field-meta.schema.json` | `meta:` an Feldern | keine (alle optional) |
| `collection-meta.schema.json` | `meta:` an Collections | keine (alle optional) |
| `permissions.schema.json` | `permissions:`-Block | `public`, `user` |
| `hooks.schema.json` | `hooks:`-Block | keine (`get`, `post`, `put`, `delete`, `audit` optional) |
| `job.schema.json` | Jobs in `config.yml` | `type`, `file` |
| `action.schema.json` | Actions in `config.yml` | `name` |
| `asset.schema.json` | Assets in `config.yml` | `name`, `path` |
| `image-filter.schema.json` | `imageFilter:` an Collections | — |
| `projections.schema.json` | `projections:`-Block | — |
| `snapshot.schema.json` | Snapshots in `config.yml` | `name` |
| `openapi.schema.json` | OpenAPI-Metadaten je Collection | keine |
| `defs.schema.json` | nur `$ref`-Bausteine, kein eigenes Ziel | — |
## Lesart
```yaml title="api/collections/content.yml"
# yaml-language-server: $schema=../../tibi-types/schemas/config/collection.schema.json
name: content
permissions:
public:
methods:
get: true
```
Der Editor prüft live gegen das Schema. Tippfehler in Schlüsseln meldet er sofort.
Das Schema prüft die **Form**. Ob der Server die Werte so versteht, steht im Code:
- `collection.schema.json` verlangt `permissions` — was `public` und `user` dürfen, entscheidet `internal/models/permission.go` im tibi-server.
- `field.schema.json` kennt Typen wie `string`, `number`, `date` — was davon wirklich validiert wird, steht in `internal/controller/validator.go`.
- `project.schema.json` kennt `admin.tokens` — was diese Tokens dürfen, steht in `internal/config/admin_token.go`.
## Text-Diagramm: Wo was geprüft wird
```text title="Prüfebenen im Überblick"
api/config.yml ──$schema──▶ project.schema.json (Form)
│
▼
tibi-server beim Reload (Bedeutung)
├── permission.go → wer darf was?
├── validator.go → ist der Datensatz gültig?
└── admin_token.go → welches Token gilt wofür?
```
## Nächste Schritte
- Lege ein neues Projekt an: Einstieg Neues Projekt.
- Schlage einen Hook-Kontext nach: Hook-Kontexte.
- Verstehe Fehlermeldungen: Fehlerbilder.
Verifiziert am 4c55f82 2026-10-12 (tibi-types)