SD-JWT VC or ISO mdoc: Which Do You Build First?

Avatar
Author

You do not choose one. The EUDI framework requires support for both, and the Architecture and Reference Framework already assigns them: proximity presentation follows ISO/IEC 18013-5, and remote presentation goes through OpenID for Verifiable Presentations, where both formats are profiled.

So the real decision is sequencing. If your users present remotely, in a browser or an app, build SD-JWT VC first. If they present in person, at a counter or a gate, build ISO mdoc first.

The dated fact that settles most of the argument is a Commission Implementing Regulation. The OpenID4VC High Assurance Interoperability Profile, version 1.0, is referenced in CIR (EU) 2026/1731, and that profile covers OpenID for Verifiable Credential Issuance, OpenID for Verifiable Presentations, IETF SD-JWT VC and ISO mdoc together, in one document. That is the answer to which format is the European one. Both.

RFC 9901
SD-JWT, the underlying mechanism, is a published RFC
ISO 18013-5:2021
mdoc and mDL published, with a second edition referenced for revocation
Draft 18
SD-JWT VC is still an Internet-Draft, dated 3 August 2026
21 Dec 2026
Target tracked for SD-JWT VC v1.0 and for HAIP v1.1
You do not choose the issuer’s format. Which is why the elegant JSON-first design usually has a CBOR parser in its future.

What are the concrete differences you will hit in implementation?

Encoding
Binary against text
mdoc is CBOR, binary. SD-JWT VC is JSON, text with a tilde-separated structure. The parsers have nothing in common.
Signatures
COSE against JWS
mdoc uses COSE_Sign1 with a Mobile Security Object. SD-JWT VC uses JWS, as in any signed JWT, typically with the issuer certificate from x5c.
Identifiers
mso_mdoc and dc+sd-jwt
The format identifiers in OpenID4VP. They are not interchangeable strings you can normalise away. A verifier has to branch on them.
Revocation
Two different models
For mdoc, the issuer may include the MSO revocation mechanism defined in ISO/IEC 18013-5. For SD-JWT VC, revocation information can optionally be retrieved from a Status Provider, which may be the issuer or a fourth party.
One detail that catches teams out: when multiple mdocs come back in one response, each must be returned in a separate DeviceResponse, so a single vp_token can contain several DeviceResponse instances. If your parser assumes one response object, multi-credential requests break.

Does the ARF actually let you choose?

Not on the presentation mode, which is the part most people think is a choice. The Architecture and Reference Framework is explicit. For remote presentation flows, the wallet implements OpenID for Verifiable Presentations. For proximity presentation flows, it adheres to ISO/IEC 18013-5. That decision is already made, and it maps almost exactly onto the two formats, because ISO 18013-5 is both a format and a proximity protocol.

Where you do have latitude is on remote flows. In OpenID4VP, both mso_mdoc and dc+sd-jwt are valid, and the high assurance profile covers combined issuance of both. So a remote-only service can reasonably start with SD-JWT VC alone and add mdoc later. Whether the obligation applies to you at all is a separate question, covered in which sectors must accept the EUDI Wallet. The surrounding engineering work is in our relying party integration guide.

Scoping wallet acceptance and unsure which format to build first?
Talk to our team

What does the draft status of SD-JWT VC mean for a project starting now?

It means version pinning is a real task, not a formality. SD-JWT is RFC 9901 and stable. SD-JWT VC is draft-ietf-oauth-sd-jwt-vc-18, dated 3 August 2026, on the standards track and not yet an RFC. The European Commission assessed draft 11 from October 2025 and identified no gaps, while noting the specification was still evolving and would need reassessment once final.

The ecosystem responded to exactly this problem. In October 2025 both OpenID4VCI and OpenID4VP froze the version of SD-JWT VC they reference, and the high assurance profile followed. So the practical answer is not to track the latest draft. It is to track whichever draft the profile you are conforming to has frozen, and to record that version number in your own documentation.

Pin the draft version in your dependency management and in your architecture decision record. "We support SD-JWT VC" is not a specification.
Expect one migration. Between draft 18 and the eventual RFC there will be changes, and something in your validation path will need revisiting.
Do not build against a newer draft than your counterparties. Being ahead of the profile is the same problem as being behind it.

What do you actually have to build on the verifier side?

The formats differ, and the surrounding work is largely the same, which means the format decision is smaller than it looks. Common to both: building the presentation request, where recent OpenID4VP work uses DCQL rather than earlier presentation definition approaches. Resolving trust, which in the EU context means ETSI trusted list resolution and the List of Trusted Lists, a different model from the certificate chain validation used with the Portuguese Citizen Card. Verifying holder binding where enforced. Checking status. And deciding what to keep, which is a record that a verification happened rather than a copy of the credential.

Where the formats diverge
Decode
CBOR decoding of a binary token, or splitting a tilde-separated token into the JWT and its disclosures
›
Verify signature
COSE_Sign1 verification, or JWS verification with the issuer certificate from x5c
›
Validate integrity
MobileSecurityObject validity per ISO 18013-5, or disclosure hash verification against the payload digests
Open-source verifier implementations for both exist and are worth reading before committing to a design. Read the "not yet implemented" section of any of them first, because the honest ones list certificate chain building and trusted list resolution as pending, and those two are where production verification actually gets hard.

So which do you build first?

Four questions, in order. The first one that gives a clear answer decides it. Do users ever present in person, at a counter, gate or device, in which case ISO mdoc first, because proximity is 18013-5 and there is no alternative path. Is every interaction remote, in which case SD-JWT VC first, for the lower integration cost. Do you already know which format your first live counterparty issues, in which case match it, because testing against something real beats architectural preference. And are you building for a sector where mDL is the primary credential, such as transport or vehicle rental, in which case mdoc first and expect it to stay primary.

And one architectural instruction that survives whichever answer you got. Keep the format handling behind an interface, and make your application logic ask what was verified and to what assurance level, never what the credential contained structurally. The second format is coming. Whether it arrives in six months or two years, the cost of adding it is set by a decision you make now.

Frequently asked questions

The two formats

What is the difference between SD-JWT VC and ISO mdoc?
ISO/IEC 18013-5 mdoc is a CBOR-based binary format from the mobile driving licence work, with COSE_Sign1 signatures and a Mobile Security Object, designed for proximity presentation including offline use. SD-JWT VC is a JSON and JWT-based format from the IETF, built on SD-JWT, and fits a web stack with much less translation.
Does the EUDI Wallet require both credential formats?
Yes. The framework requires support for both, and the OpenID4VC High Assurance Interoperability Profile version 1.0 profiles SD-JWT VC and ISO mdoc together. That profile is referenced in Commission Implementing Regulation (EU) 2026/1731. The Architecture and Reference Framework assigns proximity presentation to ISO/IEC 18013-5 and remote presentation to OpenID for Verifiable Presentations.

Standards status and identifiers

Is SD-JWT VC a finished standard?
Not yet. SD-JWT, the underlying mechanism, is published as RFC 9901. SD-JWT VC itself is an Internet-Draft on the standards track, at draft 18 dated 3 August 2026. OpenID4VCI and OpenID4VP froze the draft version they reference in October 2025, so conforming implementations should pin that version rather than track the latest draft.
What are the credential format identifiers in OpenID4VP?
ISO mdoc uses mso_mdoc and SD-JWT VC uses dc+sd-jwt. They are not interchangeable and a verifier has to branch on them, because one yields a binary CBOR structure and the other a tilde-separated text token.

Sequencing

Which format should a remote-only service implement first?
SD-JWT VC, in most cases. Remote presentation runs over OpenID for Verifiable Presentations where both formats are valid, and SD-JWT VC costs less to integrate into a stack that already handles JWTs. Add mdoc when a counterparty issuing it appears, which for most services eventually happens.
Can you avoid supporting CBOR?
Only for as long as no credential you have to accept arrives as an mdoc, and only if you never verify in person. Because you do not choose the issuer’s format, most verifiers reach a CBOR parser eventually. Designing the format handling behind an interface from the start is what makes that addition cheap.
Caixa Mágica Software
Caixa Mágica Team
Caixa Mágica Software is a Portuguese software company with 20+ years of experience delivering custom software, AI solutions and nearshore development teams for European businesses. We have worked on Portuguese national eID middleware for over a decade.
eID Box · Caixa Mágica Software
Tell us where your users present and we will tell you which format to build first
In person or remotely, and which counterparties you have to accept. We have built and maintained national digital identity infrastructure for over a decade, and eID Box exists for organisations adding identity verification to their own products.