W3C First Public Working Draft
Copyright © 2025 World Wide Web Consortium . W3C ® liability , trademark and permissive document license rules apply.
This specification describes mechanisms that can be used to represent a Verifiable Credential through a visual, auditory, or haptic medium. It covers rendering a Verifiable Credential to a physical document, digital image, screen reader, or braille output.
This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C standards and drafts index .
This is an experimental specification and is undergoing regular revisions. It is not fit for production deployment.
This document was published by the Verifiable Credentials Working Group as a First Public Working Draft using the Recommendation track .
Publication as a First Public Working Draft does not imply endorsement by W3C and its Members.
This is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to cite this document as other than a work in progress.
This document was produced by a group operating under the W3C Patent Policy . W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent that the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy .
This document is governed by the 18 August 2025 W3C Process Document .
Rendering methods can be used when the issuer has a specific way that they want to express a verifiable credential to an observer through a visual, auditory, or haptic mechanism. For example, an issuer of an employee badge credential might want to include rich imagery of their corporate logo and specific placement of employee information in specific areas of the badge. They might also want to provide an audio read out of the important aspects of the badge for individuals that have accessibility needs related to their eyesight.
The following terms are used to describe concepts in this specification.
Our definition of credential differs from, NIST's definitions of credential .
did:example:123456abcdef
.
verifiableCredential
.
These
properties
result
in
separate
graphs
that
contain
all
claims
defined
in
the
corresponding
JSON
objects.
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY , MUST , OPTIONAL , RECOMMENDED , and REQUIRED in this document are to be interpreted as described in BCP 14 [ RFC2119 ] [ RFC8174 ] when, and only when, they appear in all capitals, as shown here.
A conforming render method is any concrete expression of the data model that complies with the normative statements in this specification. Specifically, all relevant normative statements in Sections 2. Data Model and 3. Algorithms of this document MUST be enforced.
A conforming processor is any algorithm realized as software and/or hardware that generates or consumes a conforming render method . Conforming processors MUST produce errors when non-conforming documents are consumed.
This
document
also
contains
examples
that
contain
JSON
and
JSON-LD
content.
Some
of
these
examples
contain
characters
that
are
invalid
JSON,
such
as
inline
comments
(
//
)
and
the
use
of
ellipsis
(
...
)
to
denote
information
that
adds
little
value
to
the
example.
Implementers
are
cautioned
to
remove
this
content
if
they
desire
to
use
the
information
as
valid
JSON
or
JSON-LD.
The following sections outline the data model that is used by this specification for rendering methods
The
renderMethod
property
is
a
reserved
extension
point
in
the
Verifiable
Credentials
Data
Model
specification
[
VC-DATA-MODEL-2.0
].
An
issuer
can
utilize
this
property
in
a
verifiable
credential
to
express
one
or
more
preferred
render
methods.
renderMethod
property
MUST
specify
one
or
more
rendering
methods
that
can
be
used
by
software
to
express
the
verifiable
credential
using
a
visual,
auditory,
or
haptic
mechanism.
Each
renderMethod
value
MUST
specify
its
type
,
for
example,
TemplateRenderMethod
,
OpenAttestationEmbeddedRenderer
,
or
OCABundle
.
The
precise
contents
of
each
rendering
hint
is
determined
by
the
specific
renderMethod
type
definition.
When
an
issuer
desires
to
specify
template-based
rendering
instructions
for
a
verifiable
credential
,
they
MAY
add
a
render
property
that
uses
the
data
model
described
below.
Property | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|
id | An OPTIONAL string that follows the URL Standard and, when fetched, dereferences to a render template. | ||||||||
type |
A
REQUIRED
string
that
MUST
be
the
value
TemplateRenderMethod
.
|
||||||||
renderSuite | A REQUIRED string that identifies the algorithms that are used for generating the concrete rendering. | ||||||||
name | An OPTIONAL human-readable string that can be displayed to provide a hint to the type of rendering that will be performed. This property might be used in a graphical interface that enables an individual to select between multiple presentation modes. | ||||||||
description |
An
OPTIONAL
human-readable
string
that
provides
a
more
involved
description
than
name
of
when
the
particular
rendering
might
be
useful.
|
||||||||
renderProperty |
An
OPTIONAL
list
of
string
values
that
each
conform
to
the
JavaScript
Object
Notation
(JSON)
Pointer
syntax
that
specifies
which
properties
from
the
verifiable
credential
are
exposed
when
using
this
specific
render
method.
If
renderProperty
is
not
provided,
the
entire
verifiable
credential
is
presumed
to
be
shared
when
the
render
method
is
used.
|
||||||||
template |
An
OPTIONAL
string
or
map
that
provides
the
template
that
will
be
used
to
perform
the
rendering.
If
the
value
is
a
string
,
it
MUST
be
a
URL.
If
the
value
is
a
map
,
it
MUST
conform
to
the
following
rules:
|
||||||||
digestMultibase |
An
OPTIONAL
multibase-encoded
Multihash
of
the
render
method
referenced
if
id
is
specified.
The
multibase
value
MUST
be
u
(base64url-nopad)
and
the
multihash
value
MUST
be
SHA-2
with
256-bits
of
output
(
0x12
).
|
The data model shown above is expressed in a verifiable credential in the example below.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2",
"https://w3id.org/vc/render-method/v1"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "UniversityDegreeCredential"],
"issuer": "https://example.edu/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "BachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "svg-mustache",
"template": {
"id": "https://example.edu/credential-templates/BachelorDegree",
"mediaType": "image/svg+xml",
"digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR",
"renderProperty": [
"/issuer", "/validFrom", "/credentialSubject/degree/name"
]
}
}
}
In
the
example
above,
the
issuer
has
provided
a
Mustache-based
SVG
rendering
template
for
a
Bachelor's
degree
that
will
be
filled
in
with
specific
information
from
the
verifiable
credential
listed
in
renderProperty
.
The
svg-mustache
render
suite
uses
the
Mustache
templating
language
to
modify
an
SVG
file,
which
is
then
used
to
render
a
visual
representation
of
the
verifiable
credential
.
In the example below, a fully embedded SVG file is used as the rendering template.
{ ... "renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "svg-mustache", // the SVG file is embedded in the VC "template": "data:image/svg+xml;base64,Qjei89...3jZpW" } }
The
next
example
links
to
the
SVG
file
on
the
Web
and
secures
it
against
modification
by
using
the
digestMultibase
property.
{ ... "renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "svg-mustache", "template": { // this SVG file is fetched from the Web "id": "https://degree.example/credential-templates/bachelors", "mediaType": "image/svg+xml", "digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR" } }
The
next
example
links
to
the
rendering
template
on
the
Web
and
secures
it
using
the
digestMultibase
property:
{ ... "renderMethod": { // this render method is fetched from the Web "id": "https://degrees.example/bachelors-svg.jsonld", "mediaType": "application/ld+json", "type": "TemplateRenderMethod", "renderSuite": "svg-mustache", "digestMultibase": "zQmG270iEu5h6JqWAPdhyxz2dRerWC85Wg6wFl9znFCwYxAp" }
The
pdf-mustache
render
suite
uses
the
Mustache
templating
language
to
modify
a
PDF
file,
which
is
then
used
to
render
a
visual
representation
of
the
verifiable
credential
.
In the example below, a fully embedded PDF file is used as the rendering template.
{ ... "renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "pdf-mustache", // this PDF file is embedded in the VC "template": "data:application/pdf;base64,k309SK...pwK83b" } }
The
next
example
links
to
the
PDF
file
on
the
Web
and
secures
it
against
modification
by
using
the
digestMultibase
property.
{ ... "renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "pdf-mustache", "template": { // this PDF file is fetched from the Web "id": "https://degree.example/bachelors.pdf", "mediaType": "application/pdf", "digestMultibase": "zQmznFCwYxApG270iEu5h6JqWAPdhyxz2dRerWC85Wg6wFl9" } }
The
next
example
links
to
the
rendering
template
on
the
Web
and
secures
it
using
the
digestMultibase
property:
{ ... "renderMethod": { // this render method is fetched from the Web "id": "https://degrees.example/bachelors-pdf.jsonld", "type": "TemplateRenderMethod", "renderSuite": "pdf-mustache", "digestMultibase": "zQmEu5h6JqWAPdhyxmz2dRerWC85Wg6wFl9znFCwYxApG270" }
The
nfc
render
suite
transmits
a
binary
payload
representing
the
verifiable
credential
over
a
wireless
NFC
connection.
In the example below, a fully embedded NFC payload is used as the rendering template, which only discloses the barcode identifier associated with the credential.
{ ... "renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "nfc", "name": "Tap to send", // the NFC payload is embedded "template": "data:application/octet-stream;base64,2QZkpQGDG...G8XJWnROcY4Biw", // only the barcode is transmitted over NFC "renderProperty": ["/credentialSubject/barcode"] } }
OpenAttestationEmbeddedRenderer
is
used
by
an
issuer
to
render
a
verifiable
credential.
The
verifiable
credential
is
rendered
in
HTML
within
an
embedded
<iframe>
through
a
Template
Renderer
website
referenced
in
the
document.
This
arrangement
allows
for
interactive
selective
disclosure
using
OpenAttestationMerkleProofSignature2018.
The Template Renderer is a web application embedded in an iframe. It renders verifiable credentials based on selected templates and must listen for specific messages from the Host application to facilitate the rendering process.
There currently exists a number of OpenAttestationEmbeddedRenderer issuers and decentralized renderer implementations.
When
an
issuer
desires
to
specify
an
embedded
rendering
instructions
for
a
verifiable
credential
,
they
MAY
add
a
renderMethod
property
that
uses
the
data
model
described
below.
Property | Description |
---|---|
id | A URL that locates a website that implements the OpenAttestationEmbeddedRenderer Action API. |
type |
The
type
property
MUST
be
OpenAttestationEmbeddedRenderer
.
|
renderName |
Name
of
the
template
used
by
the
website
specified
by
id
to
render
the
document.
A
different
template
can
be
used
for
the
decentralized
renderer
to
present
a
different
HTML
view
of
the
verifiable
credential.
|
The data model shown above is expressed in a verifiable credential in the example below.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json"
],
"type": ["VerifiableCredential", "OpenAttestationCredential"],
"validFrom": "2021-03-08T12:00:00+08:00",
"name": "Republic of Singapore Driving Licence",
"issuer": {
"id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90",
"type": "OpenAttestationIssuer",
"name": "Government Technology Agency of Singapore (GovTech)",
"identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" }
},
"credentialSubject": {
"id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42",
"type": ["DriversLicense"],
"name": "John Doe",
"address": "123 Choa Chu Kang Road, Singapore 123456",
"licenses": [
{
"class": "3",
"description": "Motor cars with unladen weight <= 3000kg",
"effectiveDate": "2013-05-16T00:00:00+08:00"
},
{
"class": "3A",
"description": "Motor cars with unladen weight <= 3000kg",
"effectiveDate": "2013-05-16T00:00:00+08:00"
}
]
},
"renderMethod": [{
"id": "https://demo-renderer.opencerts.io",
"type": "OpenAttestationEmbeddedRenderer",
"rendererName": "GOVTECH_DEMO"
}]
}
The
verifiable
credential
specifies
a
decentralized
renderer
at
https://demo-renderer.opencerts.io
,
using
the
template
named
GOVTECH_DEMO
.
The decentralized renderer can support different templates that can provide different views of the verifiable credentials. Below are two renderings of the same verifiable credential using different templates.
The
Host
is
the
application
that
displays
the
document
with
the
help
of
the
Template
Renderer.
The
Template
Renderer
MUST
be
a
web
application
embedded
within
an
iframe
specified
by
renderMethod
.
id
.
It
MUST
communicate
with
the
Host
application
using
postMessage
API
to
perform
actions.
All
actions
follow
the
same
structure.
They
are
composed
of
type
and
payload
:
type
indicates
the
kind
of
action
being
executed,
for
instance,
RENDER_DOCUMENT
means
rendering
a
document.
The
type
of
an
action
is
mandatory.
payload
indicates
optional
data
associated
to
the
type,
for
instance,
the
content
of
the
document
to
render.
An open source reference implementation is available on GitHub .
The interaction between the Host and the Template Renderer is illustrated in the following diagram.
When the iframe is first displayed, the host sends commands to the iframe to render the document. The 4 types of actions supported are described below.
type | payload | action |
---|---|---|
GET_TEMPLATES
|
|
Obtain a list of templates supported by the renderer for the given document. The list of templates is returned from UPDATE_TEMPLATES call from the iframe. |
SELECT_TEMPLATE
|
|
Select the template to be used for rendering. It should be from the list returned by GET_TEMPLATES. If not found, a default template is used. |
RENDER_DOCUMENT
|
|
Render the verifiable credential inside the IFRAME using the selected template. Document is JSON object form of the verifiable credential. |
PRINT
|
|
MUST show the print dialog so the contents of the IFRAME can be printed. |
These are used by the iframe to update the host to make adjustments on formatting, or selective redaction.
type | payload | action |
---|---|---|
OBFUSCATE
|
|
This is used for selective redaction. The Host is informed of the path of the field that has been obfuscated so that the host can create an updated version of the document with the selected field obfuscated. |
UPDATE_HEIGHT
|
|
Notify the Host of the height of the embedded iframe in pixels so the Host can adjust the size on the browser. |
UPDATE_TEMPLATES
|
|
Notify the Host of the list of template names that are usable from RENDER_METHOD, or GET_TEMPLATES calls. |
OCABundle is used by an issuer to specify rendering instructions based on an Overlays Capture Architecture (OCA) Bundle as defined in Overlays Capture Architecture Specification . OCA provides a standardized way to define schemas with semantic overlays that enable multi-language support, data entry formats, sensitive data flagging, and rich metadata for rendering verifiable credentials in a consistent and interoperable manner.
An OCA Bundle consists of a capture base that defines the core structure and data types of the credential attributes, along with various overlays that provide additional context such as labels, character encoding, format specifications, entry codes, and information overlays. This layered approach enables flexible and culturally-aware rendering of credentials while maintaining data integrity.
When
OCA
is
used
as
a
render
method
for
verifiable
credentials
,
the
capture
base
in
the
OCA
Bundle
uses
JSON
paths
(as
defined
in
JavaScript
Object
Notation
(JSON)
Pointer
)
as
attribute
names
to
reference
properties
from
the
root
of
the
verifiable
credential
document,
and
defines
the
data
type
for
each
attribute.
For
example,
an
attribute
named
/credentialSubject/degree/name
would
reference
the
name
property
within
the
nested
degree
object
of
the
credential's
credentialSubject
.
The
overlays
then
provide
presentation
metadata
such
as
human-readable
labels
in
multiple
languages,
formatting
rules
for
dates
and
numbers,
constraints
for
data
entry,
and
descriptive
information
about
each
attribute.
This
separation
allows
the
same
credential
data
to
be
rendered
differently
based
on
context,
locale,
or
user
preferences
while
maintaining
a
consistent
semantic
foundation.
When
an
issuer
desires
to
specify
OCA-based
rendering
instructions
for
a
verifiable
credential
,
they
MAY
add
a
renderMethod
property
that
uses
the
data
model
described
below.
Property | Description |
---|---|
id | A REQUIRED string that follows the URL Standard specification and, when fetched, dereferences to an OCA Bundle in JSON format. The OCA Bundle contains the capture base and associated overlays needed for rendering the credential. |
type |
A
REQUIRED
string
that
MUST
be
the
value
OCABundle
. |
name | An OPTIONAL human-readable string that can be displayed to provide a hint to the type of rendering that will be performed. This property might be used in a graphical interface that enables an individual to select between multiple presentation modes. |
description | An OPTIONAL human-readable string that provides a more detailed description of the OCA-based rendering method and when it might be useful. |
digestMultibase |
An
OPTIONAL
multibase-encoded
Multihash
of
the
OCA
Bundle.
The
multibase
value
MUST
be
u
(base64url-nopad)
and
the
multihash
value
MUST
be
SHA-2
with
256
bits
of
output
(0x12
in
the
multicodec
table).
This
property
can
be
used
by
verifiers
to
ensure
the
integrity
of
the
fetched
OCA
Bundle.
|
version | An OPTIONAL string that specifies the OCA specification version that the referenced OCA Bundle conforms to (e.g., "v2.0.0-rc1", "v2.0.0", "v1.0"). This property helps renderers determine compatibility and select appropriate processing logic for the OCA Bundle format. |
The data model shown above is expressed in a verifiable credential in the example below.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"type": ["VerifiableCredential", "UniversityDegreeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"name": "Example University"
},
"validFrom": "2024-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "BachelorDegree",
"name": "Bachelor of Science and Arts",
"degreeType": "Undergraduate",
"major": "Computer Science"
}
},
"renderMethod": [{
"id": "https://example.edu/oca-bundles/degree-2024.json",
"type": "OCABundle",
"name": "University Degree Display",
"description": "Renders the degree credential with multi-language support",
"digestMultibase": "uEiC96D8xPcVfm...WNcMF4Kc-Yw",
"version": "v2.0.0-rc1"
}]
}
In
this
example,
the
OCA
Bundle
located
at
https://example.edu/oca-bundles/degree-2024.json
contains
the
capture
base
and
overlays
necessary
to
render
the
credential.
The
bundle
might
include
label
overlays
for
multiple
languages,
format
overlays
for
date
and
number
formatting,
and
information
overlays
with
descriptions
of
each
attribute.
An example OCA Bundle structure for this credential might look like:
{ "bundle": { "v": "OCAS11JSON000646_", "digest": "EBfdlu8R27Fbx-ehrqwIxQ-na4B7A4LqidzXqj8gkzHp", "capture_base": { "digest": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "type": "spec/capture_base/2.0.0", "attributes": { "/credentialSubject/degree/type": "Text", "/credentialSubject/degree/name": "Text", "/credentialSubject/degree/degreeType": "Text", "/credentialSubject/degree/major": "Text" }, "classification": "" }, "overlays": [ { "digest": "EMzAk6N2iI1K5EpS9YqU7WxTc8BvPq1RgFn0D4XyJwLz", "type": "spec/overlays/meta/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "name": "University Degree Credential", "description": "Academic degree credential issued by universities" }, { "digest": "EJqWh3K9fF8H2BmP6VnR4TxQz5YsLm8NcDk7A1UvGtIw", "type": "spec/overlays/label/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "language": "en", "attribute_labels": { "/credentialSubject/degree/type": "Degree Type", "/credentialSubject/degree/name": "Degree Name", "/credentialSubject/degree/degreeType": "Degree Classification", "/credentialSubject/degree/major": "Major" } }, { "digest": "EKpXi4L0gG9I3CnQ7WoS5UyRa6ZtNo9OdEl8B2VwHuJx", "type": "spec/overlays/label/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "language": "fr", "attribute_labels": { "/credentialSubject/degree/type": "Type de diplôme", "/credentialSubject/degree/name": "Nom du diplôme", "/credentialSubject/degree/degreeType": "Classification du diplôme", "/credentialSubject/degree/major": "Spécialisation" } }, { "digest": "ELrYj5M1hH0J4DoR8XpT6VzSb7AuOp0QeFm9C3WxIvKy", "type": "spec/overlays/information/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "language": "en", "attribute_information": { "/credentialSubject/degree/type": "The type of academic degree awarded", "/credentialSubject/degree/name": "The full official name of the degree", "/credentialSubject/degree/degreeType": "Classification level (e.g., Undergraduate, Graduate)", "/credentialSubject/degree/major": "The primary field of study" } }, { "digest": "ENaZl7O3jJ2L6FqT0ZrV8XyUd9CwRs2ShGo1E5YzKxMa", "type": "spec/overlays/sensitive/2.0.0", "capture_base": "ECui6bAv2zzW2gMVQbKT3M7g2q4r6yWKf2Y2k9CDa8Nq", "attributes": [ "/credentialSubject/degree/name" ] } ] } }
Implementers can use the OCA Bundle to generate appropriate user interfaces, select language-specific labels, apply format specifications, and ensure consistent rendering across different applications and platforms.
The following sections outline the algorithms that is used by this specification for rendering methods.
The
following
algorithm
is
used
to
transform
the
SVG
image
template
into
the
final
SVG
image
that
is
displayed.
The
inputs
to
the
algorithm
are
the
verifiable
credential
(
verifiableCredential
)
and
the
SVG
image
source
code
(
svgImage
).
The
output
is
a
SVG
image.
replacementMap
,
by
finding
all
strings
in
svgImage
that
start
with
{{
(double
open
braces)
and
end
with
}}
(double
close
braces).
For
each
string,
templateKey
,
that
is
found:
templateValue
,
by
evaluating
the
value
of
templateKey
(without
the
opening
or
closing
braces)
using
the
JSON
Pointer
[
RFC6901
]
algorithm
with
the
verifiableCredential
as
input
to
the
algorithm.
If
the
evaluation
is
null
,
set
templateValue
to
the
empty
string.
replacementMap
by
using
templateKey
and
associate
it
with
templateValue
.
replacementMap
,
replace
each
corresponding
string
in
svgImage
that
matches
the
key
with
the
associated
value
in
the
replacementMap
.
The list of security considerations listed below need to be converted into sections:
The list of privacy considerations listed below need to be converted into sections:
id
to
track
individuals.
These
values
should
be
aggressively
cached
client-side,
or
looked
up
using
a
mixnet
or
proxy
service.
The list of internationalization considerations listed below need to be converted into sections:
Referenced in:
Referenced in: