Credential Type Metadata Markdown Format
Define Verifiable Credential Type Metadata using familiar Markdown syntax with support for display names, multiple languages, and rich rendering options.
Basic Structure
A credential metadata markdown file consists of YAML front matter followed by structured content sections:
---
vct: https://example.com/credentials/identity
background_color: "#1a365d"
text_color: "#ffffff"
---
# Identity Credential
A verifiable credential for identity verification.
## Claims
- `given_name` "Given Name" (string): The given name [mandatory]
- `family_name` (string): The family name [mandatory]
## Images

Front Matter
The optional YAML front matter configures credential-level properties:
| Property | Description |
|---|---|
vct | The Verifiable Credential Type identifier (URI) |
background_color | Background color for credential display (hex) |
text_color | Text color for credential display (hex) |
extends | URI of another VCT that this type extends |
doctype | mso_mdoc document type identifier |
formats | Comma-separated list of output formats to generate (e.g. sd-jwt, w3c). When omitted, all formats are generated. Aliases: vctm/sd-jwt/sdjwt, mddl/mdoc/mso_mdoc, w3c/jwt_vc_json |
Claims
Claims are defined as list items under a ## Claims section:
- `claim_name` "Display Name" (type): Description [flags]
Claim Components
| Component | Required | Description |
|---|---|---|
`claim_name` | Yes | The claim identifier in backticks |
"Display Name" | No | Human-readable label |
(type) | No | Value type: string, date, number, object, image |
[mandatory] | No | Mark the claim as required |
[sd=always|never] | No | Selective disclosure setting |
[svg_id=id] | No | SVG template element ID |
Examples
# Simple claim with type
- `email` (string): The holder's email address
# Claim with display name
- `given_name` "Given Name" (string): The first name of the holder
# Mandatory claim with selective disclosure
- `personal_id` "Personal ID" (string): Unique identifier [mandatory] [sd=always]
Nested Claims
Claims that contain sub-fields (objects) or repeated items (arrays) are
expressed using Markdown sub-lists. Use (object) for structured
data and (array) for repeating items:
- `address` (object): Postal address [mandatory]
- `street` (string): Street address [mandatory]
- `city` (string): City [mandatory]
- `postal_code` (string): Postal code
- `country` (string): Country code
- `previous_addresses` (array): Previous addresses
- `street` (string): Street address
- `city` (string): City
Each output format represents nested claims appropriately:
| Container | VCTM (SD-JWT) | mDOC (MDDL) | W3C (JSON Schema) |
|---|---|---|---|
object |
Nested paths, e.g. ["address", "street"] |
Dot-notation, e.g. address.street |
Nested properties |
array |
Paths with null index, e.g. ["previous_addresses", null, "city"] |
Dot-notation, e.g. previous_addresses.city |
items schema with properties |
Localization
Add multi-language support by nesting locale-specific entries under claims:
- `given_name` "Given Name" (string): The given name [mandatory]
- de-DE: "Vorname" - Der Vorname des Inhabers
- sv: "Förnamn" - Innehavarens förnamn
- fr: "Prénom" - Le prénom du titulaire
Multi-Format Output
registry-cli generates three credential format specifications from each Markdown file:
- SD-JWT VC Type Metadata (
.vctm.json) - mso_mdoc Configuration (
.mdoc.json) - W3C VCDM 2.0 Schema (
.vc.json)
To generate only specific formats for a credential, add formats
to the front matter:
---
vct: https://example.com/credentials/identity
formats: sd-jwt, w3c
---
When formats is omitted, all three formats are generated.