<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>qredential releases</title>
  <link>https://qredential.js.org/</link>
  <description>Offline credential verification from a QR code. New versions, and every change to the error codes.</description>
  <language>en</language>
  <atom:link href="https://qredential.js.org/feed.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>qredential 0.3.1</title>
    <link>https://qredential.js.org/</link>
    <guid isPermaLink="false">qredential-0.3.1</guid>
    <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
    <description><![CDATA[0.3.0 was tagged and released on GitHub but never reached npm: the publish workflow had no credential. 0.3.1 is the first of the 0.3 line on the registry, so everything under 0.3.0 below arrives with it. No API changes since 0.3.0. Changed The package declares "sideEffects": false, so bundlers can drop the parts an app does not import. Published from GitHub Actions through npm trusted publishing, with a provenance attestation tying the tarball to the commit and workflow that built it. No long lived npm token exists. Documentation The README explains in plain language what a digital credential is and what verifying one offline means. npm renders the README from the published tarball, so this is the first version where the package page carries it. The README's age verification example presented without key binding, so pasted as written it returned holder_proof_missing. It now shows the ful

Full changelog: https://github.com/george-veras/qredential/blob/main/CHANGELOG.md]]></description>
  </item>
  <item>
    <title>qredential 0.3.0</title>
    <link>https://qredential.js.org/</link>
    <guid isPermaLink="false">qredential-0.3.0</guid>
    <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
    <description><![CDATA[Added sha-384 and sha-512 as _sd_alg values, per RFC 9901 section 4.1.1 and the IANA Named Information Hash Algorithm Registry. issue() takes an sdAlg option; the verifier reads the algorithm the credential declares and uses the same one for the key binding sd_hash. Anything outside those three is still refused by name. Contributed by @DYNOSuprovo in #19 and @vjymisal0 in #18, who reached the same issue on the same day. The public option, the WebCrypto cross checks and the interoperability tests against @sd-jwt/core are #19. The resolveSdAlg() helper, which is what keeps the digest map, the claim reconstruction and the path resolver from disagreeing about a credential's hash, is #18. Fixed present() could not narrow a credential whose _sd_alg was not sha-256: the path resolver hashed with sha-256 regardless, matched nothing, and reported every claim as not disclosable. Found by the inter

Full changelog: https://github.com/george-veras/qredential/blob/main/CHANGELOG.md]]></description>
  </item>
  <item>
    <title>qredential 0.2.0</title>
    <link>https://qredential.js.org/</link>
    <guid isPermaLink="false">qredential-0.2.0</guid>
    <pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate>
    <description><![CDATA[First release intended for publication. 0.1.0 was tagged in development and never published, so nothing here breaks anybody. Added Key binding, per RFC 9901 section 4.3. The issuer binds the holder's public key, the wallet signs the verifier's challenge at scan time, and the proof commits to the nonce, the audience, the bound key and the exact disclosure set. Nested, array element and recursive selective disclosure, resolved at any depth following the processing model in RFC 9901 section 7.1. createStatusList(), so an issuer can publish revocation rather than hand rolling a bitstring. assertVerified() for callers who prefer try/catch over branching on the result. QredentialError with stable code values, and isQredentialError(). holderVerified and revocationChecked on a successful result, so a caller always knows which checks actually ran. Changed Key binding is required by default. A pre

Full changelog: https://github.com/george-veras/qredential/blob/main/CHANGELOG.md]]></description>
  </item>
</channel>
</rss>
