[{"data":1,"prerenderedAt":615},["ShallowReactive",2],{"navigation":3,"-getting-started-installation":167,"-getting-started-installation-surround":612},[4,22,78,106,141,148],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","0.Getting-Started\u002F0.index",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","0.Getting-Started\u002F1.installation",{"title":15,"path":16,"stem":17},"Quickstart","\u002Fgetting-started\u002Fquickstart","0.Getting-Started\u002F2.quickstart",{"title":19,"path":20,"stem":21},"Core concepts","\u002Fgetting-started\u002Fcore-concepts","0.Getting-Started\u002F3.core-concepts",{"title":23,"path":24,"stem":25,"children":26,"icon":28},"JWT","\u002Fjwt","1.JWT\u002F0.index",[27,29,52],{"title":23,"path":24,"stem":25,"icon":28},"i-carbon-certificate",{"title":30,"path":31,"stem":32,"children":33,"icon":35},"JWS","\u002Fjwt\u002Fjws","1.JWT\u002F1.JWS\u002F0.index",[34,36,40,44,48],{"title":30,"path":31,"stem":32,"icon":35},"i-carbon-document-signed",{"title":37,"path":38,"stem":39},"Signing","\u002Fjwt\u002Fjws\u002Fsigning","1.JWT\u002F1.JWS\u002F1.signing",{"title":41,"path":42,"stem":43},"Verifying","\u002Fjwt\u002Fjws\u002Fverifying","1.JWT\u002F1.JWS\u002F2.verifying",{"title":45,"path":46,"stem":47},"Multi-signature","\u002Fjwt\u002Fjws\u002Fmulti-signature","1.JWT\u002F1.JWS\u002F3.multi-signature",{"title":49,"path":50,"stem":51},"Algorithms","\u002Fjwt\u002Fjws\u002Falgorithms","1.JWT\u002F1.JWS\u002F4.algorithms",{"title":53,"path":54,"stem":55,"children":56,"icon":58},"JWE","\u002Fjwt\u002Fjwe","1.JWT\u002F2.JWE\u002F0.index",[57,59,63,67,71,75],{"title":53,"path":54,"stem":55,"icon":58},"i-carbon-locked",{"title":60,"path":61,"stem":62},"Encrypting","\u002Fjwt\u002Fjwe\u002Fencrypting","1.JWT\u002F2.JWE\u002F1.encrypting",{"title":64,"path":65,"stem":66},"Decrypting","\u002Fjwt\u002Fjwe\u002Fdecrypting","1.JWT\u002F2.JWE\u002F2.decrypting",{"title":68,"path":69,"stem":70},"Multi-recipient","\u002Fjwt\u002Fjwe\u002Fmulti-recipient","1.JWT\u002F2.JWE\u002F3.multi-recipient",{"title":72,"path":73,"stem":74},"ECDH-ES and end-to-end encryption","\u002Fjwt\u002Fjwe\u002Fecdh-es","1.JWT\u002F2.JWE\u002F4.ecdh-es",{"title":49,"path":76,"stem":77},"\u002Fjwt\u002Fjwe\u002Falgorithms","1.JWT\u002F2.JWE\u002F5.algorithms",{"title":79,"path":80,"stem":81,"children":82,"icon":84},"Examples","\u002Fexamples","10.Examples\u002F0.index",[83,85,90,94,98,102],{"title":79,"path":80,"stem":81,"icon":84},"i-carbon-code-reference",{"title":86,"path":87,"stem":88,"icon":89},"Authentication basics","\u002Fexamples\u002Fauthentication-basics","10.Examples\u002F1.authentication-basics","i-lucide-code",{"title":91,"path":92,"stem":93,"icon":89},"Consuming a JWKS endpoint","\u002Fexamples\u002Fjwks-endpoint","10.Examples\u002F2.jwks-endpoint",{"title":95,"path":96,"stem":97,"icon":89},"Refresh token pattern","\u002Fexamples\u002Frefresh-token-pattern","10.Examples\u002F3.refresh-token-pattern",{"title":99,"path":100,"stem":101,"icon":89},"End-to-end encryption","\u002Fexamples\u002Fend-to-end-encryption","10.Examples\u002F4.end-to-end-encryption",{"title":103,"path":104,"stem":105,"icon":89},"Signed receipts","\u002Fexamples\u002Fsigned-receipts","10.Examples\u002F5.signed-receipts",{"title":107,"path":108,"stem":109,"children":110,"icon":112},"JWK","\u002Fjwk","2.JWK\u002F0.index",[111,113,117,121,125,129,133,137],{"title":107,"path":108,"stem":109,"icon":112},"i-carbon-two-factor-authentication",{"title":114,"path":115,"stem":116},"Generating keys","\u002Fjwk\u002Fgenerating","2.JWK\u002F1.generating",{"title":118,"path":119,"stem":120},"Importing and exporting","\u002Fjwk\u002Fimport-export","2.JWK\u002F2.import-export",{"title":122,"path":123,"stem":124},"PEM conversion","\u002Fjwk\u002Fpem","2.JWK\u002F3.pem",{"title":126,"path":127,"stem":128},"Key wrapping","\u002Fjwk\u002Fwrapping","2.JWK\u002F4.wrapping",{"title":130,"path":131,"stem":132},"Password derivation","\u002Fjwk\u002Fpassword-derivation","2.JWK\u002F5.password-derivation",{"title":134,"path":135,"stem":136},"JWK Sets","\u002Fjwk\u002Fjwk-sets","2.JWK\u002F6.jwk-sets",{"title":138,"path":139,"stem":140},"JWK cache","\u002Fjwk\u002Fcache","2.JWK\u002F7.cache",{"title":142,"path":143,"stem":144,"children":145,"icon":147},"Utilities","\u002Futilities","3.Utilities\u002F0.index",[146],{"title":142,"path":143,"stem":144,"icon":147},"i-carbon-tool-box",{"title":149,"path":150,"stem":151,"children":152,"icon":154},"Adapters","\u002Fadapters","99.Adapters\u002F0.index",[153,155,159,163],{"title":149,"path":150,"stem":151,"icon":154},"i-carbon-plug",{"title":156,"path":157,"stem":158},"H3 sessions","\u002Fadapters\u002Fh3-sessions","99.Adapters\u002F1.h3-sessions",{"title":160,"path":161,"stem":162},"Lifecycle hooks","\u002Fadapters\u002Fhooks","99.Adapters\u002F2.hooks",{"title":164,"path":165,"stem":166},"Lower-level functions","\u002Fadapters\u002Flower-level","99.Adapters\u002F3.lower-level",{"id":168,"title":11,"body":169,"description":202,"extension":607,"meta":608,"navigation":609,"path":12,"seo":610,"stem":13,"__hash__":611},"content\u002F0.Getting-Started\u002F1.installation.md",{"type":170,"value":171,"toc":600},"minimark",[172,187,192,277,288,305,309,332,358,362,365,477,480,541,545,560,577,587,591,596],[173,174,175,176,186],"p",{},"unjwt is published to npm as ",[177,178,182],"a",{"href":179,"rel":180},"https:\u002F\u002Fnpmx.dev\u002Fpackage\u002Funjwt",[181],"nofollow",[183,184,185],"code",{},"unjwt",".",[188,189,191],"h2",{"id":190},"install","Install",[193,194,195,220,235,249,263],"code-group",{},[196,197,203],"pre",{"className":198,"code":199,"filename":200,"language":201,"meta":202,"style":202},"language-sh shiki shiki-themes github-light github-dark github-dark","npm install unjwt\n","npm","sh","",[183,204,205],{"__ignoreMap":202},[206,207,210,213,217],"span",{"class":208,"line":209},"line",1,[206,211,200],{"class":212},"shcOC",[206,214,216],{"class":215},"sfrk1"," install",[206,218,219],{"class":215}," unjwt\n",[196,221,224],{"className":198,"code":222,"filename":223,"language":201,"meta":202,"style":202},"pnpm add unjwt\n","pnpm",[183,225,226],{"__ignoreMap":202},[206,227,228,230,233],{"class":208,"line":209},[206,229,223],{"class":212},[206,231,232],{"class":215}," add",[206,234,219],{"class":215},[196,236,239],{"className":198,"code":237,"filename":238,"language":201,"meta":202,"style":202},"yarn add unjwt\n","yarn",[183,240,241],{"__ignoreMap":202},[206,242,243,245,247],{"class":208,"line":209},[206,244,238],{"class":212},[206,246,232],{"class":215},[206,248,219],{"class":215},[196,250,253],{"className":198,"code":251,"filename":252,"language":201,"meta":202,"style":202},"bun add unjwt\n","bun",[183,254,255],{"__ignoreMap":202},[206,256,257,259,261],{"class":208,"line":209},[206,258,252],{"class":212},[206,260,232],{"class":215},[206,262,219],{"class":215},[196,264,267],{"className":198,"code":265,"filename":266,"language":201,"meta":202,"style":202},"deno add unjwt\n","deno",[183,268,269],{"__ignoreMap":202},[206,270,271,273,275],{"class":208,"line":209},[206,272,266],{"class":212},[206,274,232],{"class":215},[206,276,219],{"class":215},[173,278,279,280,287],{},"Or use ",[177,281,284],{"href":282,"rel":283},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fnypm",[181],[183,285,286],{},"nypm"," to auto-detect the package manager:",[196,289,291],{"className":198,"code":290,"language":201,"meta":202,"style":202},"npx nypm install unjwt\n",[183,292,293],{"__ignoreMap":202},[206,294,295,298,301,303],{"class":208,"line":209},[206,296,297],{"class":212},"npx",[206,299,300],{"class":215}," nypm",[206,302,216],{"class":215},[206,304,219],{"class":215},[188,306,308],{"id":307},"requirements","Requirements",[310,311,312,326],"ul",{},[313,314,315,319,320,325],"li",{},[316,317,318],"strong",{},"Node.js 22+",", or any runtime with the ",[177,321,324],{"href":322,"rel":323},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FWeb_Crypto_API",[181],"Web Crypto API"," globally available (Deno, Bun, Cloudflare Workers, browsers).",[313,327,328,331],{},[316,329,330],{},"ESM only."," unjwt is shipped as pure ECMAScript modules.",[173,333,334,335,338,339,344,345,350,351,344,354,357],{},"The core package has ",[316,336,337],{},"zero runtime dependencies",". The H3 session adapters (",[177,340,341],{"href":150},[183,342,343],{},"unjwt\u002Fadapters\u002Fh3v1",", ",[177,346,347],{"href":150},[183,348,349],{},"unjwt\u002Fadapters\u002Fh3v2",") use optional peer dependencies (",[183,352,353],{},"h3",[183,355,356],{},"cookie-es",") which you install alongside your framework.",[188,359,361],{"id":360},"import-paths","Import paths",[173,363,364],{},"unjwt is split across several named entry points so bundlers can tree-shake aggressively:",[366,367,368,381],"table",{},[369,370,371],"thead",{},[372,373,374,378],"tr",{},[375,376,377],"th",{},"Import from",[375,379,380],{},"What it gives you",[382,383,384,394,418,439,449,459,468],"tbody",{},[372,385,386,391],{},[387,388,389],"td",{},[183,390,185],{},[387,392,393],{},"Everything — a flat barrel suitable for bundlers.",[372,395,396,401],{},[387,397,398],{},[183,399,400],{},"unjwt\u002Fjws",[387,402,403,344,406,344,409,344,412,344,415,186],{},[183,404,405],{},"sign",[183,407,408],{},"verify",[183,410,411],{},"signMulti",[183,413,414],{},"verifyMulti",[183,416,417],{},"verifyMultiAll",[372,419,420,425],{},[387,421,422],{},[183,423,424],{},"unjwt\u002Fjwe",[387,426,427,344,430,344,433,344,436,186],{},[183,428,429],{},"encrypt",[183,431,432],{},"decrypt",[183,434,435],{},"encryptMulti",[183,437,438],{},"decryptMulti",[372,440,441,446],{},[387,442,443],{},[183,444,445],{},"unjwt\u002Fjwk",[387,447,448],{},"Key generation, import\u002Fexport, wrapping, PEM conversion, PBES2 derivation, cache control.",[372,450,451,456],{},[387,452,453],{},[183,454,455],{},"unjwt\u002Futils",[387,457,458],{},"Base64URL, type guards, claim validation, random bytes.",[372,460,461,465],{},[387,462,463],{},[183,464,343],{},[387,466,467],{},"H3 v1 session adapter (Nuxt v4, Nitro v2).",[372,469,470,474],{},[387,471,472],{},[183,473,349],{},[387,475,476],{},"H3 v2 session adapter (Nuxt v5, Nitro v3).",[173,478,479],{},"Both patterns work:",[196,481,485],{"className":482,"code":483,"language":484,"meta":202,"style":202},"language-ts shiki shiki-themes github-light github-dark github-dark","\u002F\u002F Namespaced — smallest bundle if you only use one module\nimport { sign, verify } from \"unjwt\u002Fjws\";\n\n\u002F\u002F Flat — convenient for bundlers\nimport { sign, encrypt, generateJWK } from \"unjwt\";\n","ts",[183,486,487,493,513,520,526],{"__ignoreMap":202},[206,488,489],{"class":208,"line":209},[206,490,492],{"class":491},"sCsY4","\u002F\u002F Namespaced — smallest bundle if you only use one module\n",[206,494,496,500,504,507,510],{"class":208,"line":495},2,[206,497,499],{"class":498},"so5gQ","import",[206,501,503],{"class":502},"slsVL"," { sign, verify } ",[206,505,506],{"class":498},"from",[206,508,509],{"class":215}," \"unjwt\u002Fjws\"",[206,511,512],{"class":502},";\n",[206,514,516],{"class":208,"line":515},3,[206,517,519],{"emptyLinePlaceholder":518},true,"\n",[206,521,523],{"class":208,"line":522},4,[206,524,525],{"class":491},"\u002F\u002F Flat — convenient for bundlers\n",[206,527,529,531,534,536,539],{"class":208,"line":528},5,[206,530,499],{"class":498},[206,532,533],{"class":502}," { sign, encrypt, generateJWK } ",[206,535,506],{"class":498},[206,537,538],{"class":215}," \"unjwt\"",[206,540,512],{"class":502},[188,542,544],{"id":543},"ai-assistant-skill","AI-assistant skill",[173,546,547,548,553,554,559],{},"A pre-built ",[177,549,552],{"href":550,"rel":551},"https:\u002F\u002Fclaude.com\u002Fblog\u002Fskills",[181],"Agent Skill"," is available for ",[177,555,558],{"href":556,"rel":557},"https:\u002F\u002Fclaude.com\u002Fclaude-code",[181],"Claude Code"," (and compatible harnesses) covering unjwt's public API:",[196,561,563],{"className":198,"code":562,"language":201,"meta":202,"style":202},"npx skills add sandros94\u002Funjwt\n",[183,564,565],{"__ignoreMap":202},[206,566,567,569,572,574],{"class":208,"line":209},[206,568,297],{"class":212},[206,570,571],{"class":215}," skills",[206,573,232],{"class":215},[206,575,576],{"class":215}," sandros94\u002Funjwt\n",[173,578,579,580,186],{},"Once installed, asking your agent about unjwt, JWS, JWE, or JWK will trigger the skill and load the reference files from ",[177,581,584],{"href":582,"rel":583},"https:\u002F\u002Fgithub.com\u002Fsandros94\u002Funjwt\u002Ftree\u002Fmain\u002Fskills\u002Funjwt",[181],[183,585,586],{},"\u002Funjwt",[188,588,590],{"id":589},"next","Next",[173,592,593],{},[177,594,595],{"href":16},"Create your first signed token →",[597,598,599],"style",{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}",{"title":202,"searchDepth":495,"depth":495,"links":601},[602,603,604,605,606],{"id":190,"depth":495,"text":191},{"id":307,"depth":495,"text":308},{"id":360,"depth":495,"text":361},{"id":543,"depth":495,"text":544},{"id":589,"depth":495,"text":590},"md",{},{},{"title":11,"description":202},"xqyjDCt3O-DwonNPomMZlqze0o27xb6WiUU7q44ImAU",[613,614],{"title":5,"path":6,"stem":7,"description":202,"children":-1},{"title":15,"path":16,"stem":17,"description":202,"children":-1},1776888560028]