Polaris GitHub

The identity token system

Identity built to be checked, not trusted.

For the banks, platforms and public services that will accept Europe’s digital identity wallets.

OpenID Certified: polaris-oid4vp 1.0.0rc7, OpenID4VP 1.0 + HAIP 1.0 Verifier profile.

IThe check

One minute, from an empty folder.

Don’t take our word for it. One script runs an outside wallet against the verifier, then sends three controls that must each be refused.

$ mkdir polaris-quick && cd polaris-quick
$ r=https://raw.githubusercontent.com/EgorKhaklin/polaris-id/main
$ curl -fsSLO $r/lab/interop/eudi-dev/run.sh
$ curl -fsSLO $r/lab/interop/waltid/issue_sdjwt_vc.py
$ curl -fsSLO $r/lab/interop/requirements.txt
$ bash run.sh
wallet     ghcr.io/dominikschlosser/eudi-dev:v2.3.7
installed  polaris-oid4vp 1.0.0
== genuine presentation
  ok    the verifier accepted it
          <- 200 authentic
== control (b): the same request again, after it was answered
  ok    refused at the request stage
== control (c): a launch URI whose client_id is not the signed request's
  ok    the wallet refused the request
== control (a): the verifier trusts a different issuer key under the same kid
  ok    the verifier refused the issuer

RESULT: accepted, and all three controls refused

Recorded 15 October 2026, abridged: 16 seconds from an empty folder, with the wallet’s image already pulled.

Run it yourself, step by step Tell us where it broke

IIEvidence

Tested in the open.

Working software on test data, tested against 15 outside projects.

  1. EUDI Wallet OpenID4VP libraryKotlin · European Commission
  2. EUDI Wallet OpenID4VP librarySwift · European Commission
  3. EUDI PID issuerEuropean Commission reference issuer
  4. walt.id Wallet APIKotlin · wallet
  5. CredoTypeScript · wallet · OpenWallet Foundation
  6. eudi-devGo · wallet, OpenID Certified at v2.3.7
  7. OID4VCgoGo · wallet, OpenID Certified at 0.12.0
  8. ProtocolSoupGo · wallet harness
  9. Procivis One CoreRust · wallet
  10. Yivi app (built on irmago)Dart · wallet in developer mode · Yivi
  11. vckKotlin library · A-SIT Plus
  12. MultipazKotlin library · OpenWallet Foundation
  13. AxleKotlin · OpenWallet Foundation Labs · driven by a harness written here
  14. openid4vpRust · SpruceID conformance adapter
  15. ERICATypeScript · verifier testing tool

A project listed here means Polaris was tested with it, not that it endorses Polaris.

OpenID Certified: the polaris-oid4vp 1.0.0rc7 verifier, OpenID4VP 1.0 and HAIP 1.0 Verifier profile

Of Polaris, only polaris-oid4vp version 1.0.0rc7 is OpenID Certified, to the OpenID4VP 1.0 + HAIP 1.0 Verifier profile for SD-JWT VC; the OpenID Foundation lists it. It is not an endorsement and not an audit. The current release is 1.0.0.

First outside operator, in test
OID4VCgo’s CI runs it daily, since 11 October 2026.
Scoreboard
Dated runs are kept in a public scoreboard. Also listed among the IETF SD-JWT implementations.

IIIHow it works

Issue. Hold. Verify.

  1. Issue

    An authority signs the credential with ML-DSA-65. The algorithm is data, so an issuer can switch it; each verifier takes a software update. A wallet's copy is signed with ES256, the algorithm Europe's wallets use today.

  2. Hold

    The person keeps it and shows only what they choose.

    Zero-knowledge mode proves a valid token exists without revealing identity.

  3. Verify

    Anyone checks it offline, against published keys: no server, no network.

A steel die, cut in reverse, as a die must be.
A Cardan grille (Girolamo Cardano, 1550): only what lies under its windows can be read.
A printed table of keys, under a loupe.

Illustrations. No real keys or data are shown.

IVThe rules

The rules live in the database.

Four are held by the database itself; all five are checked on every build.

  1. The audit record is append-only.
  2. A zero-knowledge verification stores no credential identifier.
  3. One active credential per person.
  4. The disclosure level is decided by the server, not the caller.
  5. Identity is not money.

No monetary table or column exists.

VThe hard cases

When it goes wrong.

Duress-aware

What a coercer sees

Code one

Verified

Code two

Verified

Duress recorded, silently.

Illustration.

A second code verifies normally and silently records duress. It works against a coercer who does not know it exists, not one watching the holder, and against lawful or institutional access it is net-negative, because the application cannot change or delete the record it leaves.

Total loss

A position fixed by three lines: a biometric check, a sworn statement and a witness from a second authority.

Lose every device and come back through three channels, one of them a witness from a second authority.

Algorithm migration

Two seals, the outgoing algorithm's and the incoming algorithm's. When the incoming seal is complete, the outgoing one is marked retired.

Two signatures during a move between algorithms; the database never leaves a token without an active one.

VIWhy now

Every EU member state must provide a digital identity wallet.

Regulation (EU) 2024/1183, Article 5a.

More than 800 million

people have no official ID.

2.8 billion

have no digital ID they can use online.

Source: World Bank, Global progress in identification, 2025.

Polaris is built to enrol a person with no documents through a trusted referee.

VIIMission

One person. One token. That is the goal.

A blank, before it is struck.

Proving who you are can take a stack of ID cards and papers. The goal: one token that stands in for all of them, held by you and checked by anyone you show it to.

  1. Today

    Tested in the open

    Working software on test data, tested against 15 outside projects.

  2. Next

    The United States

    The goal: IDs that authorities in the United States issue with Polaris, and a verifier anyone can run to check them. Already built into the software: one active token per person.

  3. Then

    The world

    The goal: one open way to prove who you are, anywhere, with a token from any trusted authority. Checking already works offline, with no call to Polaris.

Our purpose: no one should be forced to give up or hand over their identity.

Fixus inter mutabilia

VIII

Work with us.

Design partners and investors:

egor@polaris-id.org