VCTM 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 VCTM 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 at the top of your file configures credential-level properties:
| Property | Description |
|---|---|
vct |
The Verifiable Credential Type identifier (URI) |
background_color |
Background color for credential display (hex, e.g., "#1a365d") |
text_color |
Text color for credential display (hex) |
extends |
URI of another VCT that this type extends |
extends#integrity |
SRI integrity hash for the extended type metadata |
background_image |
URI for a background image |
Title and Description
The first H1 heading becomes the credential name, and the first
paragraph after it becomes the description:
# Student ID Credential
A digital student identification credential issued by educational institutions.
Claims
Claims are defined as list items under a ## Claims section using
this format:
- `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 shown to users |
(type) |
No | Value type: string, date, number, object, image (default: string) |
Description |
No | Human-readable description of the claim |
[mandatory] |
No | Mark the claim as required |
[sd=always|never] |
No | Selective disclosure setting |
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]
# Claim with complex type
- `address` "Address" (object): Current residential address [sd=always]
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
Locale Format
- locale: "Label" - Description
The locale code follows BCP 47
format (e.g., en-US, de-DE, sv, fr-CA).
Full Localized Example
## Claims
- `given_name` "Given Name" (string): The given name of the holder [mandatory]
- de-DE: "Vorname" - Der Vorname des Inhabers
- sv: "Förnamn" - Innehavarens förnamn
- `family_name` "Family Name" (string): The family name of the holder [mandatory]
- de-DE: "Familienname" - Der Familienname des Inhabers
- sv: "Efternamn" - Innehavarens efternamn
- `birth_date` "Date of Birth" (date): Date of birth [sd=always]
- de-DE: "Geburtsdatum" - Geburtsdatum des Inhabers
Images
Reference images using standard Markdown syntax. Images are processed specially:
- The first image becomes the credential logo
- SVG images become SVG templates for dynamic rendering
- When using
--base-url, images get full URLs and SRI integrity hashes
## Images


SVG Templates
SVG files can include placeholders that wallets replace with actual claim values:
<text id="given_name"></text>
<text id="issue_date"></text>
Complete Example
Here's a complete example combining all features:
---
vct: https://university.edu/credentials/student-id
background_color: "#003366"
text_color: "#ffffff"
---
# Student ID Credential
A digital student identification credential issued by accredited educational institutions.
## Description
This credential verifies the holder's enrollment status and basic identity information
at an educational institution. It supports selective disclosure to minimize data exposure.
## Claims
- `student_id` "Student ID" (string): Unique student identifier [mandatory]
- de-DE: "Matrikelnummer" - Die eindeutige Studierendennummer
- sv: "Studentnummer" - Unikt studentnummer
- `given_name` "Given Name" (string): Legal first name [mandatory]
- de-DE: "Vorname" - Der Vorname
- sv: "Förnamn" - Förnamn
- `family_name` "Family Name" (string): Legal family name [mandatory]
- de-DE: "Familienname" - Der Familienname
- sv: "Efternamn" - Efternamn
- `enrollment_date` "Enrollment Date" (date): Date of initial enrollment
- `expected_graduation` "Expected Graduation" (date): Expected graduation date [sd=always]
- `program` "Program" (string): Enrolled academic program
- `faculty` "Faculty" (string): Academic faculty or department
- `photo` "Photo" (image): Student photograph [sd=always]
## Images


## Issuer Requirements
The issuer must be an accredited educational institution with a valid digital
credential issuing capability.
Generated VCTM Output
The above Markdown generates a VCTM JSON document like this:
{
"vct": "https://university.edu/credentials/student-id",
"name": "Student ID Credential",
"description": "A digital student identification credential...",
"display": [{
"locale": "en-US",
"name": "Student ID Credential",
"description": "...",
"rendering": {
"simple": {
"logo": { "uri": "...", "uri#integrity": "sha256-..." },
"background_color": "#003366",
"text_color": "#ffffff"
},
"svg_templates": [...]
}
}],
"claims": [{
"path": ["student_id"],
"mandatory": true,
"display": [
{ "locale": "en-US", "label": "Student ID", "description": "..." },
{ "locale": "de-DE", "label": "Matrikelnummer", "description": "..." },
{ "locale": "sv", "label": "Studentnummer", "description": "..." }
]
}, ...]
}
Using mtcvctm
Generate VCTM files using the command line or GitHub Action:
Command Line
# Generate single file
mtcvctm generate credential.md -o credential.vctm --base-url https://example.com
# Batch process directory
mtcvctm batch --input ./credentials --output ./vctm --base-url https://example.com
GitHub Action
See the GitHub Action Setup guide for automated VCTM generation in your CI/CD pipeline.
References
About mtcvctm
mtcvctm is an anagram: MarkDown To Create Verifiable Credential Type Metadata. The tool transforms human-readable documentation into machine-readable VCTM JSON while preserving all the semantic information needed for credential interoperability.