Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.
Frontend SDKs run on the user’s device — browser, mobile app, or hybrid framework. They handle passkey-based signing so users can authorize actions using biometrics or security keys, without your backend ever touching their private credentials.
Frontend SDKs are designed for delegated signing. They do not make API calls directly — they sign challenges that your backend initiates. You need a backend SDK (or direct API integration) to complete the flow.
Your backend uses a DfnsDelegatedApiClient (or equivalent) to initiate operations and receive challenges. See the delegated signing guide for the backend side, and implementing delegated wallets for a full end-to-end tutorial.
Last modified on July 7, 2026
Was this page helpful?
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"DFNS documentation","description":"DFNS documentation","colors":{"primary":"#442599","light":"#AA8BFF","dark":"#170C33"},"logo":{"light":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/images/logo/dfnsdocs-light.svg?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=3dc89a5cca38026355ba1f7435c733d4","dark":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/images/logo/dfnsdocs-dark.svg?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=3a8ce8faa31e336af786238250ba6645"},"favicon":{"light":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/favicon.png?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=baf24d895161cf680f52d298fc95eaee","dark":"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/favicon.png?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=baf24d895161cf680f52d298fc95eaee"},"appearance":{"default":"system","strict":false},"navbar":{"links":[{"icon":"newspaper","href":"https://www.dfns.co/blog","label":"Blog"},{"icon":"life-ring","href":"https://support.dfns.co","label":"Support"},{"icon":"house","href":"https://app.dfns.io","label":"Dashboard"}],"primary":{"type":"button","label":"Get started","href":"https://app.dfns.io/get-started"}},"footer":{"socials":{"x":"https://x.com/dfnsHQ","github":"https://github.com/dfns","linkedin":"https://linkedin.com/company/dfnshq"}},"fonts":{"family":"SuisseIntl","source":"fonts/SuisseIntl-Regular.woff2","format":"woff2"},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","mcp","cursor","vscode","claude","chatgpt"],"display":"header"},"thumbnails":{"appearance":"light","background":"https://mintlify.s3.us-west-1.amazonaws.com/dfns-6d8c7466/%23F0F1F4"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dfns-6d8c7466","hasAudioNarration":false,"actualSubdomain":"dfns-6d8c7466","customDomains":["docs.dfns.co"],"gitSource":{"type":"github","owner":"dfns","repo":"docs","deployBranch":"m","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af1e35277b2275ecbcd5127","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API reference","count":375},{"language":"default","tag":"Wallets \u0026 Transactions","count":215},{"language":"default","tag":"Documentation","count":143},{"language":"default","tag":"Identity \u0026 Access Management","count":89},{"language":"default","tag":"Guides","count":61},{"language":"default","tag":"Webhooks","count":54},{"language":"default","tag":"Wallets","count":38},{"language":"default","tag":"Examples per chain","count":33},{"language":"default","tag":"Management","count":33},{"language":"default","tag":"Networks","count":32}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"SuisseIntl\";src:url(\"/fonts/SuisseIntl-Regular.woff2\") format(\"woff2\");font-weight:400;font-display:swap}@font-face{font-family:\"SuisseIntl\";src:url(\"/fonts/SuisseIntl-Medium.woff2\") format(\"woff2\");font-weight:500;font-display:swap}@font-face{font-family:\"SuisseIntl\";src:url(\"/fonts/SuisseIntl-Semibold.woff2\") format(\"woff2\");font-weight:600;font-display:swap}@font-face{font-family:\"SuisseIntl\";src:url(\"/fonts/SuisseIntl-Bold.woff2\") format(\"woff2\");font-weight:700;font-display:swap}@property --text-size{syntax:\"\u003clength>\";inherits:false;initial-value:1rem}html{scroll-behavior:smooth}body{font-size:var(--text-size);letter-spacing:-0.01rem}#banner{background-color:#e0e3f0}#banner *{color:#1e202e}#table-of-contents-layout:has(div){border:1px solid rgb(var(--gray-200));background-color:#f0f1f4;padding-top:1rem;padding-bottom:1rem;padding-left:2rem}#table-of-contents-layout:has(div):is(.dark *){border:1px solid rgb(var(--gray-600));background-color:rgb(var(--gray-800))}#table-of-contents-layout:has(div)>#table-of-contents.-mt-10{margin-top:0}#table-of-contents-layout:has(div)>#table-of-contents.pt-10{padding-top:1rem}#table-of-contents-layout:has(div)>#table-of-contents>div{padding-top:1rem;padding-bottom:1rem}h1,h2,h3,h4,h5,h6{letter-spacing:-0.01rem!important;font-weight:bold}#content-container{scroll-margin-top:5rem}#content-area table:not(.token-kinds-allowed){display:table;border-collapse:collapse;width:100%;border-top-left-radius:0.5rem;border-top-right-radius:0.5rem;overflow:hidden}#content-area table:not(.token-kinds-allowed) a{overflow-wrap:anywhere}#content-area table:not(.token-kinds-allowed) tr:nth-child(even){background-color:#f0f1f4}#content-area table:not(.token-kinds-allowed) tr:nth-child(even):is(.dark *){background-color:rgb(var(--gray-900))}#content-area table:not(.token-kinds-allowed) th{background-color:rgb(var(--gray-200));font-weight:bold;vertical-align:middle}#content-area table:not(.token-kinds-allowed) th:is(.dark *){background-color:rgb(var(--gray-600))}#content-area table:not(.token-kinds-allowed) th,#content-area table:not(.token-kinds-allowed) td{border:1px solid rgb(var(--gray-200));padding:0.5rem 1rem;min-width:0}#content-area table:not(.token-kinds-allowed) th:is(.dark *),#content-area table:not(.token-kinds-allowed) td:is(.dark *){border:1px solid rgb(var(--gray-600))}#content-area table.token-kinds-allowed td:nth-child(1){line-height:2.5em;white-space:nowrap;width:1%;padding-right:1rem}#content-area table.token-kinds-allowed td:nth-child(2){border-left:3px solid rgb(var(--gray-200));padding-left:1rem}#content-area table.token-kinds-allowed td:nth-child(2):is(.dark *){border-left:3px solid rgb(var(--gray-600))}#endpoint-token-kinds-allowed{display:flex;flex-direction:row;flex-wrap:wrap;line-height:2.5em}#endpoint-token-kinds-allowed #endpoint-user-tokens{padding-right:1.5rem;flex:initial}#endpoint-token-kinds-allowed #endpoint-user-kinds{padding-left:1rem;flex:auto;display:flex;flex-direction:column;align-content:flex-start;border-left:3px solid rgb(var(--gray-200));flex-wrap:wrap;justify-content:space-around;align-items:flex-start;line-height:normal}#endpoint-token-kinds-allowed #endpoint-user-kinds *{color:rgb(var(--gray-600))}#endpoint-token-kinds-allowed #endpoint-user-kinds:is(.dark *){border-left:3px solid rgb(var(--gray-600))}#endpoint-token-kinds-allowed #endpoint-other-tokens{flex-basis:100%}.api-section .tabs>ul{width:1px;max-width:100%}#navbar:is(.dark *){--background-dark: var(--gray-800)}#sidebar-content,#mobile-nav{background-color:#f0f1f4}#sidebar-content:is(.dark *),#mobile-nav:is(.dark *){background-color:rgb(var(--gray-800))}#navigation-items li>a:has(:nth-child(2))>:first-child{mask-size:contain!important;flex-basis:2rem}#navigation-items div.sidebar-group-header:has(svg){margin-left:-1.5rem;font-weight:600}#navigation-items .sidebar-group-header+ul>li[data-group-tag]>button,#navigation-items .sidebar-group-header+ul>li[data-group-tag]>div{margin-left:-18px;padding-left:16px!important}#navigation-items .sidebar-group-header+ul>li>ul>li{margin-left:1.5px}#navigation-items .sidebar-group-header+ul>li>ul>li>a{padding-left:13.5px!important}#navigation-items .sidebar-group-header+ul>li>ul>li[data-group-tag]>button,#navigation-items .sidebar-group-header+ul>li>ul>li[data-group-tag]>div{padding-left:13.5px!important}#navigation-items .sidebar-group-header+ul>li>ul>li ul>li{margin-left:17.5px}#navigation-items .sidebar-group-header+ul>li>ul>li ul>li>a{padding-left:13.5px!important}#navigation-items .sidebar-group-header+ul>li>ul>li ul>li[data-group-tag]>button,#navigation-items .sidebar-group-header+ul>li>ul>li ul>li[data-group-tag]>div{padding-left:13.5px!important}#navigation-items .sidebar-group-header+ul>li li{border-left:1px solid rgb(var(--gray-300))}#navigation-items .sidebar-group-header+ul>li li:is(.dark *){border-color:rgb(var(--gray-600))}#navigation-items .sidebar-group-header+ul>li li:has(>a.font-semibold){border-color:rgb(var(--primary))}#navigation-items .sidebar-group-header+ul>li li:has(>a.font-semibold):is(.dark *){border-color:rgb(var(--primary-light))}#navigation-items a:hover,#navigation-items [data-group-tag]>div:hover{background-color:#e8eaf0;border-radius:0.25rem}#navigation-items a:hover:is(.dark *),#navigation-items [data-group-tag]>div:hover:is(.dark *){background-color:rgb(var(--gray-700))}#navigation-items [data-group-tag]>button[aria-expanded=\"true\"]>.flex-1{font-weight:600}#navigation-items a.font-semibold{font-weight:500}.nav-tag-pill>.nav-tag-pill-text[data-nav-tag=\"Deprecated\"]{background-color:#fffaeb;color:#b45309;border:1px solid #fcd34d;font-weight:normal}.deprecated{opacity:0.75}.callout strong{color:inherit}#content-area header>.text-lg{font-size:var(--text-size);line-height:1.5rem}.prose{font-size:var(--text-size);line-height:1.5}.callout div[data-component-part=\"callout-content\"]{line-height:1.5}.prose .callout div[data-component-part=\"callout-content\"] a,.callout div[data-component-part=\"callout-content\"] a{border-bottom:0;text-decoration:underline;text-decoration-color:rgb(var(--primary));text-underline-offset:2px;text-decoration-thickness:1px}.prose .callout div[data-component-part=\"callout-content\"] a:is(.dark *),.callout div[data-component-part=\"callout-content\"] a:is(.dark *){text-decoration-color:rgb(var(--primary-light))}.prose .callout div[data-component-part=\"callout-content\"] a:hover,.callout div[data-component-part=\"callout-content\"] a:hover{color:rgb(var(--primary))!important}.prose .callout div[data-component-part=\"callout-content\"] a:hover:is(.dark *),.callout div[data-component-part=\"callout-content\"] a:hover:is(.dark *){color:rgb(var(--primary-light))!important}a.link:not(.nav-tabs-item),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]),#banner a{color:rgb(var(--primary))}a.link:not(.nav-tabs-item):is(.dark *),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):is(.dark *),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):is(.dark *),#banner a:is(.dark *){color:rgb(var(--primary-light))}a.link:not(.nav-tabs-item),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]),#banner a{font-weight:var(--font-weight-body-custom);border-bottom:0;text-decoration:none;padding-right:1px}a.link:not(.nav-tabs-item) code,.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item) code,.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]) code,#banner a code{text-decoration:none}a.link:not(.nav-tabs-item):hover:not(:has(img:only-child)),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):hover:not(:has(img:only-child)),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):hover:not(:has(img:only-child)),#banner a:hover:not(:has(img:only-child)){text-decoration:underline;text-decoration-color:rgb(var(--primary));text-underline-offset:2px;text-decoration-thickness:1px}a.link:not(.nav-tabs-item):hover:not(:has(img:only-child)):is(.dark *),.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):hover:not(:has(img:only-child)):is(.dark *),.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):hover:not(:has(img:only-child)):is(.dark *),#banner a:hover:not(:has(img:only-child)):is(.dark *){text-decoration-color:rgb(var(--primary-light))}a.link:not(.nav-tabs-item):is([target=\"_blank\"]:not(:has(img:only-child)),.api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before,.prose a:not([aria-label=\"Navigate to header\"]):not(.nav-tabs-item):is([target=\"_blank\"]:not(:has(img:only-child)),.api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before,.api-section>div:not(.api-section-heading) a:not([aria-label=\"Navigate to header\"]):is([target=\"_blank\"]:not(:has(img:only-child)),.api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before,#banner a:is([target=\"_blank\"]:not(:has(img:only-child)),.api-section>div:not(.api-section-heading) a:not([href^=\"https://docs.dfns.co\"]))::before{content:\"\\29C9 \";padding-right:2px;padding-left:1px}#content-area ul>li li:before{background-color:rgb(var(--background-light));border-color:#1e202e;border-width:1px;border-style:solid}#content-area ul>li li:is(.dark *):before{background-color:rgb(var(--background-dark));border-color:rgb(var(--gray-400))}div:has(>select[aria-label=\"Select base URL\"]):not([data-testid=\"api-playground-modal\"] *){display:none}div:has(+.tryit-button) [data-component-part=\"scroll-area-content\"]>div:last-child{display:block;white-space:nowrap}div:has(+.tryit-button) [data-component-part=\"scroll-area-content\"]>div:last-child>div:not(.absolute){display:inline-block;vertical-align:middle}.card>.flex>div[data-component-part=\"card-icon\"]{align-self:start}.card div[data-component-part=\"card-icon\"]>svg{background-color:rgb(var(--gray-600))}.nav-logo{height:2rem}.steps div[data-component-part=\"step-number\"]>div{background-color:#1e202e;color:white;font-size:large}.steps div[data-component-part=\"step-number\"]>div:is(.dark *){background-color:rgb(var(--gray-600))}h4#authentication,h4#required-permissions,h4#token-kinds-allowed,h4#user-kinds-allowed{row-gap:1rem;padding-bottom:0.625rem;border-color:rgb(var(--gray-100));border-bottom-width:1px;align-items:baseline;width:100%}h4#authentication:is(.dark *),h4#required-permissions:is(.dark *),h4#token-kinds-allowed:is(.dark *),h4#user-kinds-allowed:is(.dark *){border-color:rgb(var(--gray-800))}h4#authentication+span,h4#required-permissions+span,h4#token-kinds-allowed+span,h4#user-kinds-allowed+span{padding-top:1.5rem;padding-bottom:1.5rem}div[data-testid=\"code-group-select\"]>div.flex{flex-direction:column-reverse}div[data-testid=\"code-group-select\"] button.group[aria-haspopup=\"menu\"]:has(+div[data-testid=\"code-group-select-copy-button\"])::before{content:\"Example: \"}div[data-testid=\"code-group-select\"] button.group[aria-haspopup=\"menu\"]::before{content:\"Language:\"}div[data-component-part=\"code-group-tab-bar\"] button.group[aria-haspopup=\"menu\"]::before{content:\"Language:\"}.footnotes [id^=\"user-content-fn-\"]{display:list-item;font-size:0.875rem;line-height:1.25rem;color:rgb(var(--gray-600))}.footnotes [id^=\"user-content-fn-\"]:is(.dark *){color:rgb(var(--gray-400))}#navigation-items+div:has(button[aria-label=\"Toggle dark mode\"])::before{content:\"Powered by Mintlify\";font-size:x-small;color:rgb(var(--gray-300))}#navigation-items+div:has(button[aria-label=\"Toggle dark mode\"]):is(.dark *)::before{color:rgb(var(--gray-600))}#content-area #pagination,#content-area footer{display:none}.primitive-param-field .py-6,.object-param-field .py-6{padding-top:1rem;padding-bottom:1rem}.primitive-param-field .mt-4,.object-param-field .mt-4{margin-top:0.75rem}.primitive-param-field .mt-6,.object-param-field .mt-6{margin-top:0.75rem}.primitive-param-field>.py-6>:last-child>:not(:first-child),.object-param-field>.py-6>:last-child>:not(:first-child){font-size:13px}.primitive-param-field>.py-6>:last-child>:not(:first-child) code,.primitive-param-field>.py-6>:last-child>:not(:first-child) code>span,.object-param-field>.py-6>:last-child>:not(:first-child) code,.object-param-field>.py-6>:last-child>:not(:first-child) code>span{font-size:12px;font-weight:normal}.api-section>div.api-section-heading~div div:has(>div.tabs)+div:has(>details.expandable:only-child)>details.expandable{margin-bottom:-1rem;margin-left:-1rem;margin-right:-1rem;width:calc(100% + 2rem);border:none;border-radius:0}.api-section>div.api-section-heading~div div:has(>div.tabs)+div:has(>details.expandable:only-child)>details.expandable summary{border-top-left-radius:0;border-top-right-radius:0}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container{display:flex;align-items:center;width:calc(100% + 2rem);min-height:2.5rem;margin-top:-1rem;margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem;background-color:rgb(var(--gray-50));color:rgb(var(--primary))}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container:is(.dark *){background-color:rgb(var(--gray-800));color:rgb(var(--primary-light))}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container label.dropdown-from-tabs-label{font-size:0.75rem;line-height:0.75rem;align-self:center}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container select.dropdown-from-tabs{appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:right center;margin-left:0.5rem;font-weight:bold;flex-grow:1;width:100%;text-overflow:ellipsis;font-size:14px;font-family:var(--font-jetbrains-mono), ui-monospace, SFMono-Regular, Menlo,\n Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23170C33' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\")}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container select.dropdown-from-tabs:is(.dark *){background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23AA8BFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\")}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]>*{margin-bottom:0.5rem}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div{}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div:not(.mt-4),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div.mt-4>.mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div:not(.mt-4),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div.mt-4>.mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div:not(.mt-4),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div.mt-4>.mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div:not(.mt-4),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div.mt-4>.mt-6{font-size:small}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div:not(.mt-4) code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div.mt-4>.mt-6 code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div:not(.mt-4) code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div.mt-4>.mt-6 code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div:not(.mt-4) code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div.mt-4>.mt-6 code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div:not(.mt-4) code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div:not(.mt-4) code>*,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div.mt-4>.mt-6 code,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div.mt-4>.mt-6 code>*{font-size:x-small}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div .mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div.mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div .mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div.mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div .mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div.mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div .mt-6,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div .mt-4,.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div.mt-4{margin-top:0}.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div .mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"parameter-\"]~div.mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div .mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"body-\"]~div.mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div .mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"response-\"]~div.mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div .mt-6 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div.mt-6 .api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div .mt-4 .prose:not(.flex),.api-section>div.api-section-heading~div div.dropdown-from-tabs-container div[id^=\"authorization-\"]~div.mt-4 .prose:not(.flex){margin-bottom:0.5rem}#content-area:has(#homepage){background-image:url(/images/GridHome.svg);background-position:top center;background-size:68rem;background-repeat:no-repeat}#content-area:has(#homepage) #homepage{max-width:48rem;margin:0 auto}#content-area:has(#homepage) #homepage h1{display:flex;align-items:center;justify-content:center;margin-top:6rem;margin-bottom:4rem;font-size:xxx-large}#content-area:has(#homepage) #homepage .card-group{margin:4rem auto}#content-area:has(#homepage) #homepage .card-group.gap-x-4{column-gap:3rem;row-gap:2rem}#content-area:has(#homepage) #homepage .card{border:none;margin:0}#content-area:has(#homepage) #homepage .card:hover img[data-component-part=\"card-image\"]{border-color:rgb(var(--primary))}#content-area:has(#homepage) #homepage .card:hover img[data-component-part=\"card-image\"]:is(.dark *){border-color:rgb(var(--primary-light))}#content-area:has(#homepage) #homepage .card:hover div[data-component-part=\"card-cta\"] button{color:rgb(var(--primary))}#content-area:has(#homepage) #homepage .card:hover div[data-component-part=\"card-cta\"] button:is(.dark *){color:rgb(var(--primary-light))}#content-area:has(#homepage) #homepage .card img[data-component-part=\"card-image\"]{border-radius:1rem;border-width:1px;border-color:rgb(var(--gray-300))}#content-area:has(#homepage) #homepage .card img[data-component-part=\"card-image\"]:is(.dark *){border-color:rgb(var(--gray-600))}#content-area:has(#homepage) #homepage .card div[data-component-part=\"card-content-container\"]{padding-top:0;padding-bottom:0}#content-area:has(#homepage) #homepage .card div[data-component-part=\"card-cta\"]{margin-top:0}#content-area:has(#homepage) #homepage .card div[data-component-part=\"card-cta\"] button{color:rgb(var(--gray-600))}#content-area:has(#homepage) #homepage .card div[data-component-part=\"card-cta\"] button:is(.dark *){color:rgb(var(--gray-300))}#content-area:has(#homepage) #homepage img#signature{margin:0 auto;max-width:30%}#content-area:has(#homepage) #homepage{text-align:center}"}],"page":{"pagePath":"sdks/frontend","slug":"/sdks/frontend","pageMetadata":{"title":"Frontend SDKs","sidebarTitle":"Overview","description":"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.","href":"/sdks/frontend/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Frontend SDKs run on the user’s device — browser, mobile app, or hybrid framework. They handle passkey-based signing so users can authorize actions using biometrics or security keys, without your backend ever touching their private credentials.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Frontend SDKs are designed for `,_jsx(_components.a,{href:`/sdks/backend#delegated-signing`,children:`delegated signing`}),`. They do not make API calls directly — they sign challenges that your backend initiates. You need a `,_jsx(_components.a,{href:`/sdks/backend`,children:`backend SDK`}),` (or direct API integration) to complete the flow.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsx(_components.p,{children:`Frontend SDKs implement the signing side of the delegated flow:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Your `,_jsx(_components.strong,{children:`backend`}),` initiates a state-changing operation and receives a challenge from DFNS`]}),`\n`,_jsxs(_components.li,{children:[`Your backend sends the challenge to the `,_jsx(_components.strong,{children:`frontend`})]}),`\n`,_jsx(_components.li,{children:`The frontend SDK signs the challenge using the user’s passkey (biometrics, security key, etc.)`}),`\n`,_jsxs(_components.li,{children:[`The frontend sends the signed challenge back to your `,_jsx(_components.strong,{children:`backend`})]}),`\n`,_jsx(_components.li,{children:`Your backend completes the operation with the signed challenge`}),`\n`]}),`\n`,_jsx(_components.p,{children:`This ensures that private key material never leaves the user’s authenticator, and your backend never has access to user credentials.`}),`\n`,_jsx(Heading,{level:`2`,id:`passkeys`,children:`Passkeys`}),`\n`,_jsxs(_components.p,{children:[`All frontend SDKs use `,_jsx(_components.a,{href:`https://webauthn.io/`,children:`WebAuthn / passkeys`}),` for signing. This means:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The user’s private key is stored securely in their authenticator (Touch ID, Face ID, YubiKey, etc.)`}),`\n`,_jsx(_components.li,{children:`Signing is triggered by a biometric prompt — no passwords involved`}),`\n`,_jsx(_components.li,{children:`The private key never leaves the device`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Each SDK provides a `,_jsx(_components.code,{children:`PasskeysSigner`}),` (or equivalent) that handles the register and sign operations:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Register`}),`: creates a new credential (passkey) for the user during onboarding`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sign`}),`: signs a User Action Challenge when the user authorizes an operation`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`integration-with-backend`,children:`Integration with backend`}),`\n`,_jsxs(_components.p,{children:[`Your backend uses a `,_jsx(_components.code,{children:`DfnsDelegatedApiClient`}),` (or equivalent) to initiate operations and receive challenges. See the `,_jsx(_components.a,{href:`/sdks/backend#delegated-signing`,children:`delegated signing guide`}),` for the backend side, and `,_jsx(_components.a,{href:`/guides/developers/delegated-wallets`,children:`implementing delegated wallets`}),` for a full end-to-end tutorial.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Frontend SDKs","sidebarTitle":"Overview","description":"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.","href":"/sdks/frontend/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"Passkeys","slug":"passkeys","depth":2,"children":[]},{"title":"Integration with backend","slug":"integration-with-backend","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dfns-6d8c7466/2a48cccc2e1fe877/script.js"],"subdomain":"dfns-6d8c7466","siteName":"DFNS documentation","title":"Frontend SDKs - DFNS documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-07T21:55:38.645Z","gitLastModified":"2026-07-07T21:55:06.000Z","originalFileLocation":"sdks/frontend/index.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.\">\u003cmeta data-mint-head name=\"application-name\" content=\"DFNS documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Frontend SDKs - DFNS documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"DFNS documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dfns.co/sdks/frontend\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dfns-6d8c7466.mintlify.site/_mintlify/api/og/v2?division=Frontend+SDKs\u0026amp;title=Frontend+SDKs\u0026amp;description=Shared+concepts+for+client-side+DFNS+SDKs%2C+including+passkey+signing%2C+authentication+flows%2C+and+platform-specific+guidance+for+web+and+mobile.\u0026amp;theme=3429bb334412c105ab97e23b\u0026amp;signature=8dd6cbe84a6f2992d25deeda4e6d1312ee39f57ed7bf5d45fdaf66612c29dc48\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Frontend SDKs - DFNS documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dfns-6d8c7466.mintlify.site/_mintlify/api/og/v2?division=Frontend+SDKs\u0026amp;title=Frontend+SDKs\u0026amp;description=Shared+concepts+for+client-side+DFNS+SDKs%2C+including+passkey+signing%2C+authentication+flows%2C+and+platform-specific+guidance+for+web+and+mobile.\u0026amp;theme=3429bb334412c105ab97e23b\u0026amp;signature=8dd6cbe84a6f2992d25deeda4e6d1312ee39f57ed7bf5d45fdaf66612c29dc48\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dfns-6d8c7466/hYb5TZBVjwDMqDeA/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"DFNS documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#442599\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dfns.co/sdks/frontend\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/sdks/frontend.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dfns.co/#organization\",\"name\":\"DFNS documentation\",\"url\":\"https://docs.dfns.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dfns-6d8c7466/nK-LFGxQwVjg0flm/images/logo/dfnsdocs-light.svg?fit=max\u0026auto=format\u0026n=nK-LFGxQwVjg0flm\u0026q=85\u0026s=3dc89a5cca38026355ba1f7435c733d4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dfns.co#website\",\"name\":\"DFNS documentation\",\"url\":\"https://docs.dfns.co\",\"publisher\":{\"@id\":\"https://docs.dfns.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dfns.co/sdks/frontend#webpage\",\"url\":\"https://docs.dfns.co/sdks/frontend\",\"name\":\"Frontend SDKs\",\"description\":\"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.\",\"dateModified\":\"2026-07-07T21:55:06.000Z\",\"isPartOf\":{\"@id\":\"https://docs.dfns.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dfns.co/sdks/frontend#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dfns.co/sdks/frontend#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Frontend SDKs\",\"item\":\"https://docs.dfns.co/sdks/frontend/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend SDKs\",\"item\":\"https://docs.dfns.co/sdks/frontend\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dfns.co/sdks/frontend#article\",\"headline\":\"Frontend SDKs\",\"name\":\"Frontend SDKs\",\"description\":\"Shared concepts for client-side DFNS SDKs, including passkey signing, authentication flows, and platform-specific guidance for web and mobile.\",\"url\":\"https://docs.dfns.co/sdks/frontend\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dfns.co/sdks/frontend#webpage\"},\"dateModified\":\"2026-07-07T21:55:06.000Z\",\"publisher\":{\"@id\":\"https://docs.dfns.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dfns.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"DFNS documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"DFNS documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","icon":"code","pages":[{"title":"API reference","href":"/api-reference"}]},{"tab":"SDK reference","icon":"square-terminal","pages":[{"title":"SDKs","href":"/sdks"},{"title":"TLS trust store updates","href":"/sdks/tls-trust-store"},{"group":"Backend SDKs","icon":"server","pages":[{"title":"Backend SDKs","sidebarTitle":"Overview","href":"/sdks/backend/index"},{"group":"TypeScript","root":{"title":"TypeScript SDK (server)","href":"/sdks/backend/typescript/index"},"pages":[{"title":"TypeScript SDK (server) development","sidebarTitle":"Development","href":"/sdks/backend/typescript/development"},{"title":"TypeScript SDK (server) examples","sidebarTitle":"Examples","href":"/sdks/backend/typescript/examples"}]},{"group":"Go","root":{"title":"Go SDK","href":"/sdks/backend/go/index"},"pages":[{"title":"Go SDK development","sidebarTitle":"Development","href":"/sdks/backend/go/development"},{"title":"Go SDK examples","sidebarTitle":"Examples","href":"/sdks/backend/go/examples"}]},{"group":"Python","root":{"title":"Python SDK","href":"/sdks/backend/python/index"},"pages":[{"title":"Python SDK development","sidebarTitle":"Development","href":"/sdks/backend/python/development"}]},{"group":"Java","root":{"title":"Java SDK","href":"/sdks/backend/java/index"},"pages":[{"title":"Java SDK development","sidebarTitle":"Development","href":"/sdks/backend/java/development"}]},{"group":"Rust","root":{"title":"Rust SDK","href":"/sdks/backend/rust/index"},"pages":[{"title":"Rust SDK development","sidebarTitle":"Development","description":"Architecture and usage patterns for the DFNS Rust SDK, including client configuration, user action signing, API domains, delegated signing, and error handling.","href":"/sdks/backend/rust/development"}]}]},{"group":"Frontend SDKs","icon":"browser","pages":[{"title":"Frontend SDKs","sidebarTitle":"Overview","href":"/sdks/frontend/index"},{"group":"TypeScript","root":{"title":"TypeScript SDK (browser)","description":"Client-side DFNS SDK for passkey signing in web applications, with login, registration, request signing, and delegated wallet support.","href":"/sdks/frontend/typescript/index"},"pages":[{"title":"TypeScript SDK (browser) development","sidebarTitle":"Development","href":"/sdks/frontend/typescript/development"}]},{"title":"React Native SDK","href":"/sdks/frontend/react-native/index"},{"group":"Flutter","root":{"title":"Flutter SDK","href":"/sdks/frontend/flutter/index"},"tag":"Beta","pages":[{"title":"Flutter SDK development","sidebarTitle":"Development","href":"/sdks/frontend/flutter/development"},{"title":"Flutter SDK examples","sidebarTitle":"Examples","href":"/sdks/frontend/flutter/examples"}]},{"group":"Kotlin","root":{"title":"Kotlin SDK","href":"/sdks/frontend/kotlin/index"},"tag":"Beta","pages":[{"title":"Kotlin SDK development","sidebarTitle":"Development","href":"/sdks/frontend/kotlin/development"},{"title":"Kotlin SDK examples","sidebarTitle":"Examples","href":"/sdks/frontend/kotlin/examples"}]},{"group":"Swift","root":{"title":"Swift SDK","href":"/sdks/frontend/swift/index"},"tag":"Beta","pages":[{"title":"Swift SDK development","sidebarTitle":"Development","href":"/sdks/frontend/swift/development"},{"title":"Swift SDK examples","sidebarTitle":"Examples","href":"/sdks/frontend/swift/examples"}]}]}]},{"tab":"Change Log","icon":"newspaper","pages":[{"title":"Change Log","href":"/changelog"}]}]},"basePath":"","title":"Frontend SDKs - DFNS documentation","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":[],"chunks":[]}