

<!DOCTYPE html>

<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">

  <link rel="stylesheet" href="/assets/css/just-the-docs-default.css">

  <link rel="stylesheet" href="/assets/css/just-the-docs-head-nav.css" id="jtd-head-nav-stylesheet">

  <style id="jtd-nav-activation">
  
    .site-nav ul li a {
      background-image: none;
    }

  </style>

  

  
    <script src="/assets/js/vendor/lunr.min.js"></script>
  

  <script src="/assets/js/just-the-docs.js"></script>

  <meta name="viewport" content="width=device-width, initial-scale=1">

  



  <!-- Begin Jekyll SEO tag v2.8.0 -->
<title>TrustWeave Developer Documentation | Comprehensive developer documentation for TrustWeave - A neutral, reusable trust and identity core library for Kotlin</title>
<meta name="generator" content="Jekyll v4.4.1" />
<meta property="og:title" content="TrustWeave Developer Documentation" />
<meta name="author" content="GeoKnoesis" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Comprehensive developer documentation for TrustWeave - A neutral, reusable trust and identity core library for Kotlin" />
<meta property="og:description" content="Comprehensive developer documentation for TrustWeave - A neutral, reusable trust and identity core library for Kotlin" />
<link rel="canonical" href="https://geoknoesis.github.io/assets/css/just-the-docs-head-nav.css" />
<meta property="og:url" content="https://geoknoesis.github.io/assets/css/just-the-docs-head-nav.css" />
<meta property="og:site_name" content="TrustWeave Developer Documentation" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="TrustWeave Developer Documentation" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"GeoKnoesis"},"description":"Comprehensive developer documentation for TrustWeave - A neutral, reusable trust and identity core library for Kotlin","headline":"TrustWeave Developer Documentation","url":"https://geoknoesis.github.io/assets/css/just-the-docs-head-nav.css"}</script>
<!-- End Jekyll SEO tag -->


  <!-- Main Navigation Styles - Consistent across all pages -->
<style>
  :root {
    --primary: #2563eb;
    --primary-dark: #1e40af;
    --secondary: #7c3aed;
    --accent: #10b981;
    --text: #1f2937;
    --text-light: #6b7280;
    --bg: #ffffff;
    --bg-light: #f9fafb;
    --border: #e5e7eb;
    --gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  }

  .main-nav {
    position: fixed;
    top: 0;
    width: 100%;
    background: rgba(255, 255, 255, 0.95);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--border);
    z-index: 1000;
    padding: 0.5rem 0;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  }

  .main-nav .nav-container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 2rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }

  .main-nav .logo {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    text-decoration: none;
    transition: opacity 0.3s;
  }

  .main-nav .logo-img {
    height: 120px;
    width: auto;
    transition: opacity 0.3s;
    display: block;
  }

  .main-nav .logo-img:not([src]),
  .main-nav .logo-img[src=""],
  .main-nav .logo-img[src*="undefined"] {
    display: none;
  }


  .main-nav .logo:hover {
    opacity: 0.8;
  }

  .main-nav .logo:hover .logo-img {
    opacity: 0.8;
  }

  .main-nav .nav-links {
    display: flex;
    gap: 1.5rem;
    align-items: center;
  }

  .main-nav .nav-links .nav-link {
    text-decoration: none;
    color: var(--text);
    font-weight: 500;
    font-size: 0.95rem;
    padding: 0.5rem 0;
    transition: color 0.3s;
    position: relative;
    white-space: nowrap;
  }

  .main-nav .nav-links .nav-link:hover {
    color: var(--primary);
  }

  .main-nav .nav-links .nav-link::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 0;
    height: 2px;
    background: var(--primary);
    transition: width 0.3s ease;
  }

  .main-nav .nav-links .nav-link:hover::after,
  .main-nav .nav-links .nav-link.active::after {
    width: 100%;
  }

  .main-nav .nav-links .nav-link.active {
    color: var(--primary);
    font-weight: 600;
  }

  /* GitHub icon button */
  .main-nav .nav-links .github-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    border-radius: 0.5rem;
    transition: all 0.3s;
    padding: 0.5rem;
    color: var(--text);
    text-decoration: none;
    margin-left: 0.5rem;
  }

  .main-nav .nav-links .github-icon:hover {
    background: var(--bg-light);
    transform: translateY(-2px);
    color: var(--primary);
  }

  .main-nav .nav-links .github-icon svg {
    width: 32px;
    height: 32px;
  }

  /* Mobile menu toggle */
  .menu-toggle {
    display: none;
    flex-direction: column;
    cursor: pointer;
    gap: 5px;
    padding: 0.5rem;
    z-index: 1001;
  }

  .menu-toggle span {
    width: 25px;
    height: 3px;
    background: var(--text);
    transition: all 0.3s;
    border-radius: 2px;
  }

  .menu-toggle.active span:nth-child(1) {
    transform: rotate(45deg) translate(8px, 8px);
  }

  .menu-toggle.active span:nth-child(2) {
    opacity: 0;
  }

  .menu-toggle.active span:nth-child(3) {
    transform: rotate(-45deg) translate(7px, -7px);
  }

  /* Footer styles */
  .site-footer {
    background: var(--text);
    color: white;
    padding: 3rem 2rem;
    text-align: center;
    margin-top: 4rem;
  }

  .site-footer .footer-content {
    max-width: 1200px;
    margin: 0 auto;
  }

  .site-footer .footer-links {
    display: flex;
    justify-content: center;
    gap: 2rem;
    margin-bottom: 2rem;
    flex-wrap: wrap;
  }

  .site-footer .footer-links a {
    color: rgba(255, 255, 255, 0.8);
    text-decoration: none;
    transition: color 0.3s;
  }

  .site-footer .footer-links a:hover {
    color: white;
  }

  .site-footer .footer-text {
    color: rgba(255, 255, 255, 0.6);
    font-size: 0.875rem;
  }

  /* Adjust content for fixed nav */
  body {
    padding-top: 160px;
  }

  /* Just the Docs theme adjustments */
  .site-header {
    margin-top: 0 !important;
  }

  /* Mobile responsive */
  @media (max-width: 968px) {
    .menu-toggle {
      display: flex;
    }

    .main-nav .nav-links {
      position: fixed;
      top: 160px;
      left: 0;
      right: 0;
      background: white;
      flex-direction: column;
      padding: 2rem;
      border-bottom: 1px solid var(--border);
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
      transform: translateY(-100%);
      opacity: 0;
      visibility: hidden;
      transition: all 0.3s ease;
      gap: 1.5rem;
      align-items: flex-start;
      max-height: calc(100vh - 160px);
      overflow-y: auto;
    }

    .main-nav .nav-links.active {
      transform: translateY(0);
      opacity: 1;
      visibility: visible;
    }

    .main-nav .nav-links .nav-link {
      width: 100%;
      padding: 0.75rem 0;
      border-bottom: 1px solid var(--border);
    }

    .main-nav .nav-links .nav-link::after {
      display: none;
    }

    .main-nav .nav-links .github-icon {
      width: 100%;
      justify-content: flex-start;
      margin-left: 0;
      padding: 0.75rem 0;
      border-bottom: 1px solid var(--border);
    }

    .main-nav .logo-img {
      height: 120px;
    }

    .site-footer .footer-links {
      flex-direction: column;
      gap: 1rem;
    }
  }

  /* Tablet adjustments */
  @media (max-width: 968px) and (min-width: 769px) {
    .main-nav .nav-links {
      gap: 1rem;
    }

    .main-nav .nav-links .nav-link {
      font-size: 0.9rem;
    }
  }
</style>

<style>
  body { padding-top: 160px !important; }
  .main-nav { z-index: 1000; position: fixed; top: 0; width: 100%; }
  #header-template { display: none; }

  /* Ensure footer spans full width and breaks out of containers */
  .site-footer {
    position: relative !important;
    width: 100vw !important;
    max-width: 100vw !important;
    margin-left: calc(-50vw + 50%) !important;
    margin-right: calc(-50vw + 50%) !important;
    left: 0 !important;
    right: 0 !important;
    clear: both !important;
    z-index: 100 !important;
    box-sizing: border-box !important;
  }
</style>
<!-- Hidden template for header injection -->
<div id="header-template" style="display: none;">
  <!-- Site Header - Consistent across all pages -->
<nav class="main-nav">
    <div class="nav-container">
        <a href="/" class="logo">
            <img src="/assets/images/trustweave-logo.jpg" alt="TrustWeave Logo" class="logo-img">
        </a>
        <div class="menu-toggle" id="menuToggle" aria-label="Toggle menu">
            <span></span>
            <span></span>
            <span></span>
        </div>
        <div class="nav-links" id="navLinks">
            <a href="/" class="nav-link">Home</a>
            <a href="/#features" class="nav-link">Features</a>
            <a href="/use-scenarios/" class="nav-link">Use Scenarios</a>
            <a href="/getting-started/README/" class="nav-link">Docs</a>
            <a href="/partnership/" class="nav-link">Partners</a>
            <a href="/about/" class="nav-link">About</a>
            <a href="https://github.com/geoknoesis/TrustWeave" target="_blank" rel="noopener noreferrer" class="github-icon" title="View on GitHub" aria-label="GitHub Repository">
                <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                    <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
                </svg>
            </a>
        </div>
    </div>
</nav>
<script>
    // Mobile menu toggle and active page highlighting
    (function() {
        const menuToggle = document.getElementById('menuToggle');
        const navLinks = document.getElementById('navLinks');

        // Mobile menu toggle
        if (menuToggle && navLinks) {
            menuToggle.addEventListener('click', () => {
                navLinks.classList.toggle('active');
                menuToggle.classList.toggle('active');
            });

            // Close menu when clicking on a link
            document.querySelectorAll('.nav-links a').forEach(link => {
                link.addEventListener('click', () => {
                    navLinks.classList.remove('active');
                    menuToggle.classList.remove('active');
                });
            });

            // Close menu when clicking outside
            document.addEventListener('click', (e) => {
                if (!menuToggle.contains(e.target) && !navLinks.contains(e.target)) {
                    navLinks.classList.remove('active');
                    menuToggle.classList.remove('active');
                }
            });
        }

        // Highlight active page
        const currentPath = window.location.pathname;
        const navLinksList = document.querySelectorAll('.nav-links .nav-link');

        navLinksList.forEach(link => {
            try {
                const linkUrl = new URL(link.href, window.location.origin);
                const linkPath = linkUrl.pathname;
                const baseUrl = '' || '';

                // Normalize paths
                let cleanCurrentPath = currentPath.replace(baseUrl, '').replace(/\/$/, '') || '/';
                let cleanLinkPath = linkPath.replace(baseUrl, '').replace(/\/$/, '') || '/';

                // Handle index pages
                if (cleanCurrentPath === '' || cleanCurrentPath === '/index.html') cleanCurrentPath = '/';
                if (cleanLinkPath === '' || cleanLinkPath === '/index.html') cleanLinkPath = '/';

                // Check if current path matches link path
                if (cleanCurrentPath === cleanLinkPath) {
                    link.classList.add('active');
                } else if (cleanLinkPath !== '/' && cleanCurrentPath.startsWith(cleanLinkPath + '/')) {
                    // Handle sub-pages (e.g., /introduction/ matches /introduction/README/)
                    link.classList.add('active');
                }
            } catch (e) {
                // Fallback for relative URLs or errors
                const href = link.getAttribute('href');
                if (href && (currentPath.includes(href) || (href === '/' && currentPath.endsWith('index.html')))) {
                    link.classList.add('active');
                }
            }
        });
    })();
</script>


</div>
<script>
  // Move header from template to body top
  document.addEventListener('DOMContentLoaded', function() {
    const template = document.getElementById('header-template');
    if (template) {
      const header = template.querySelector('.main-nav');
      if (header) {
        document.body.insertBefore(header, document.body.firstChild);
        template.remove();
      }
    }
  });
</script>


</head>

<body>
  <a class="skip-to-main" href="#main-content">Skip to main content</a>
  <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
  <symbol id="svg-link" viewBox="0 0 24 24">
  <title>Link</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
    <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
  </svg>
</symbol>

  <symbol id="svg-menu" viewBox="0 0 24 24">
  <title>Menu</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
    <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
  </svg>
</symbol>

  <symbol id="svg-arrow-right" viewBox="0 0 24 24">
  <title>Expand</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
    <polyline points="9 18 15 12 9 6"></polyline>
  </svg>
</symbol>

  <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
  <title id="svg-external-link-title">(external link)</title>
  <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
</symbol>

  
    <symbol id="svg-doc" viewBox="0 0 24 24">
  <title>Document</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
    <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
  </svg>
</symbol>

    <symbol id="svg-search" viewBox="0 0 24 24">
  <title>Search</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
    <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
  </svg>
</symbol>

  
  
    <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
<symbol id="svg-copy" viewBox="0 0 16 16">
  <title>Copy</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
    <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
    <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
  </svg>
</symbol>
<symbol id="svg-copied" viewBox="0 0 16 16">
  <title>Copied</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
    <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
    <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
  </svg>
</symbol>

  
</svg>

  
    <div class="side-bar">
  <div class="site-header" role="banner">
    <a href="/" class="site-title lh-tight">
  TrustWeave Developer Documentation

</a>
    <button id="menu-button" class="site-button btn-reset" aria-label="Toggle menu" aria-pressed="false">
      <svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg>
    </button>
  </div>

  <nav aria-label="Main" id="site-nav" class="site-nav">
  
  
    <ul class="nav-list"><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in Introduction category" aria-pressed="false">
        <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
      </button><a href="/introduction/README/" class="nav-list-link">Introduction</a><ul class="nav-list"><li class="nav-list-item"><a href="/introduction/what-is-trustweave/" class="nav-list-link">What is TrustWeave?</a></li><li class="nav-list-item"><a href="/introduction/executive-overview/" class="nav-list-link">Executive Overview: TrustWeave</a></li><li class="nav-list-item"><a href="/introduction/key-features/" class="nav-list-link">Key Features</a></li><li class="nav-list-item"><a href="/introduction/use-cases/" class="nav-list-link">Use Cases</a></li><li class="nav-list-item"><a href="/introduction/architecture-overview/" class="nav-list-link">Architecture Overview</a></li><li class="nav-list-item"><a href="/introduction/mental-model/" class="nav-list-link">TrustWeave Mental Model</a></li><li class="nav-list-item"><a href="/introduction/web-of-trust/" class="nav-list-link">The Web of Trust: Foundation for Decentralized Trust</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in Getting Started category" aria-pressed="false">
        <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
      </button><a href="/getting-started/README/" class="nav-list-link">Getting Started</a><ul class="nav-list"><li class="nav-list-item"><a href="/getting-started/installation/" class="nav-list-link">Installation</a></li><li class="nav-list-item"><a href="/getting-started/quick-start/" class="nav-list-link">Quick Start</a></li><li class="nav-list-item"><a href="/getting-started/your-first-application/" class="nav-list-link">Your First Application</a></li><li class="nav-list-item"><a href="/getting-started/project-setup/" class="nav-list-link">Project Setup</a></li><li class="nav-list-item"><a href="/getting-started/ide-setup/" class="nav-list-link">IDE Setup Guide</a></li><li class="nav-list-item"><a href="/getting-started/common-patterns/" class="nav-list-link">Common Patterns</a></li><li class="nav-list-item"><a href="/getting-started/api-patterns/" class="nav-list-link">API Patterns and Best Practices</a></li><li class="nav-list-item"><a href="/getting-started/workflows/" class="nav-list-link">Common Workflows</a></li><li class="nav-list-item"><a href="/getting-started/dsl-guide/" class="nav-list-link">TrustWeave DSL Guide</a></li><li class="nav-list-item"><a href="/getting-started/troubleshooting/" class="nav-list-link">Troubleshooting Guide</a></li><li class="nav-list-item"><a href="/getting-started/production-deployment/" class="nav-list-link">Production Deployment Guide</a></li></ul></li><li class="nav-list-item"><a href="/tutorials/README/" class="nav-list-link">Tutorials</a></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in How-To Guides category" aria-pressed="false">
        <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
      </button><a href="/how-to/README/" class="nav-list-link">How-To Guides</a><ul class="nav-list"><li class="nav-list-item"><a href="/how-to/use-trustweave-facade/" class="nav-list-link">Use TrustWeave Facade for Quick Setup</a></li><li class="nav-list-item"><a href="/how-to/configure-trustlayer/" class="nav-list-link">Configure TrustWeave</a></li><li class="nav-list-item"><a href="/how-to/create-dids/" class="nav-list-link">Create and Manage DIDs</a></li><li class="nav-list-item"><a href="/how-to/issue-credentials/" class="nav-list-link">Issue Credentials</a></li><li class="nav-list-item"><a href="/how-to/verify-credentials/" class="nav-list-link">Verify Credentials</a></li><li class="nav-list-item"><a href="/how-to/manage-wallets/" class="nav-list-link">Manage Wallets</a></li><li class="nav-list-item"><a href="/how-to/blockchain-anchoring/" class="nav-list-link">Anchor to Blockchain</a></li><li class="nav-list-item"><a href="/how-to/multi-chain-anchoring/" class="nav-list-link">Multi-Chain Anchoring Patterns</a></li><li class="nav-list-item"><a href="/how-to/exchange-credentials/" class="nav-list-link">Exchange Credentials with Multiple Protocols</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in Core Concepts category" aria-pressed="false">
        <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
      </button><a href="/core-concepts/README/" class="nav-list-link">Core Concepts</a><ul class="nav-list"><li class="nav-list-item"><a href="/core-concepts/dids/" class="nav-list-link">Decentralized Identifiers (DIDs)</a></li><li class="nav-list-item"><a href="/core-concepts/verifiable-credentials/" class="nav-list-link">Verifiable Credentials (VCs)</a></li><li class="nav-list-item"><a href="/core-concepts/blockchain-anchoring/" class="nav-list-link">Blockchain Anchoring</a></li><li class="nav-list-item"><a href="/core-concepts/wallets/" class="nav-list-link">Wallets</a></li><li class="nav-list-item"><a href="/core-concepts/smart-contracts/" class="nav-list-link">Smart Contracts</a></li><li class="nav-list-item"><a href="/core-concepts/key-management/" class="nav-list-link">Key Management</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in API Reference category" aria-pressed="false">
        <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
      </button><a href="/api-reference/README/" class="nav-list-link">API Reference</a><ul class="nav-list"><li class="nav-list-item"><a href="/api-reference/quick-reference/" class="nav-list-link">Quick Reference</a></li><li class="nav-list-item"><a href="/api-reference/error-types/" class="nav-list-link">Error Types</a></li><li class="nav-list-item"><a href="/api-reference/data-types/" class="nav-list-link">Data Types</a></li><li class="nav-list-item"><a href="/api-reference/core-api/" class="nav-list-link">Core API Reference</a></li><li class="nav-list-item"><a href="/api-reference/wallet-api/" class="nav-list-link">Wallet API Reference</a></li><li class="nav-list-item"><a href="/api-reference/credential-service-api/" class="nav-list-link">Credential Service API Reference</a></li><li class="nav-list-item"><a href="/api-reference/smart-contract-api/" class="nav-list-link">Smart Contract API Reference</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in Reference category" aria-pressed="false">
        <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
      </button><a href="/reference/README/" class="nav-list-link">Reference</a><ul class="nav-list"><li class="nav-list-item"><a href="/modules/core-modules/" class="nav-list-link">Core Modules</a></li><li class="nav-list-item"><a href="/faq/" class="nav-list-link">Frequently Asked Questions</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="toggle items in Advanced Topics category" aria-pressed="false">
        <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg>
      </button><a href="/advanced/README/" class="nav-list-link">Advanced Topics</a><ul class="nav-list"><li class="nav-list-item"><a href="/advanced/error-handling/" class="nav-list-link">Error Handling</a></li></ul></li><li class="nav-list-item"><a href="/integrations/README/" class="nav-list-link">Integration Modules</a></li><li class="nav-list-item"><a href="/contributing/README/" class="nav-list-link">Contributing to TrustWeave</a></li><li class="nav-list-item"><a href="/integrations/aws-kms/" class="nav-list-link">AWS KMS Integration</a></li><li class="nav-list-item"><a href="/integrations/azure-kms/" class="nav-list-link">Azure Key Vault Integration</a></li><li class="nav-list-item"><a href="/integrations/google-kms/" class="nav-list-link">Google Cloud KMS Integration</a></li><li class="nav-list-item"><a href="/integrations/hashicorp-vault-kms/" class="nav-list-link">HashiCorp Vault KMS Integration</a></li></ul>
  
</nav>




  
  
    <footer class="site-footer">
      This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
    </footer>
  
</div>

  
  <div class="main" id="top">
    <div id="main-header" class="main-header">
  
    

<div class="search" role="search">
  <div class="search-input-wrap">
    <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search TrustWeave Developer Documentation" aria-label="Search TrustWeave Developer Documentation" autocomplete="off">
    <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
  </div>
  <div id="search-results" class="search-results"></div>
</div>

  
  
  
</div>

    <div class="main-content-wrap">
      
      <div id="main-content" class="main-content">
        <main>
          
            <h.site-nav ul li a {
  background-image: linear-gradient(-90deg, rgb(234.8, 236.82, 244.9) 0%, rgba(234.8, 236.82, 244.9, 0.8) 80%, rgba(234.8, 236.82, 244.9, 0) 100%);
}

          

          
            
          
        </main>
        

  <hr>
  <footer>
    

    <!-- Hidden template for footer injection -->
<div id="footer-template" style="display: none;">
  <!-- Site Footer - Consistent across all pages -->
<footer class="site-footer">
    <div class="footer-content">
        <div class="footer-links">
            <a href="/">Home</a>
            <a href="/getting-started/README/">Documentation</a>
            <a href="https://github.com/geoknoesis/TrustWeave" target="_blank">GitHub</a>
            <a href="/partnership/">Partners</a>
            <a href="https://github.com/geoknoesis/TrustWeave/blob/main/docs/README.md" target="_blank">Docs</a>
            <a href="https://github.com/geoknoesis/TrustWeave/blob/main/LICENSE" target="_blank">License</a>
            <a href="https://www.geoknoesis.com" target="_blank">Geoknoesis LLC</a>
        </div>
        <p class="footer-text">Made with ❤️ by Geoknoesis LLC</p>
    </div>
</footer>


</div>
<script>
  // Move footer from template to body bottom and make it full width
  document.addEventListener('DOMContentLoaded', function() {
    const template = document.getElementById('footer-template');
    if (template) {
      const footer = template.querySelector('.site-footer');
      if (footer) {
        // Move footer to body level (outside of any containers)
        document.body.appendChild(footer);
        template.remove();

        // Ensure footer spans full width by removing any parent constraints
        footer.style.position = 'relative';
        footer.style.width = '100vw';
        footer.style.marginLeft = 'calc(-50vw + 50%)';
        footer.style.marginRight = 'calc(-50vw + 50%)';
        footer.style.marginTop = 'auto'; // Push to bottom in flexbox layout
        footer.style.zIndex = '0'; // Below search overlay
      }
    }

    // Function to update footer visibility based on search state
    function updateFooterVisibility() {
      const footer = document.querySelector('.site-footer');
      const htmlElement = document.documentElement;

      if (footer && htmlElement) {
        const isSearchActive = htmlElement.classList.contains('search-active');
        if (isSearchActive) {
          // Hide footer when search is active - use multiple methods to ensure it's hidden
          footer.style.display = 'none';
          footer.style.visibility = 'hidden';
          footer.style.opacity = '0';
          footer.style.zIndex = '-999';
          footer.style.pointerEvents = 'none';
        } else {
          // Show footer when search is not active
          footer.style.display = 'block';
          footer.style.visibility = 'visible';
          footer.style.opacity = '1';
          footer.style.marginTop = 'auto';
          footer.style.position = 'relative';
          footer.style.zIndex = '-1';
          footer.style.pointerEvents = 'auto';
        }
      }
    }

    // Monitor search state and hide/show footer appropriately
    const observer = new MutationObserver(function(mutations) {
      updateFooterVisibility();
    });

    // Also listen for input events on search input as a backup
    // This ensures footer is hidden immediately when user starts typing
    const searchInput = document.getElementById('search-input');
    if (searchInput) {
      // Use requestAnimationFrame for better performance
      const handleSearchChange = function() {
        requestAnimationFrame(updateFooterVisibility);
      };

      searchInput.addEventListener('input', handleSearchChange);
      searchInput.addEventListener('focus', handleSearchChange);
      searchInput.addEventListener('keydown', handleSearchChange);
    }

    // Observe documentElement (html) for class changes (like search-active)
    // The search script adds 'search-active' to documentElement, not body
    if (document.documentElement) {
      observer.observe(document.documentElement, {
        attributes: true,
        attributeFilter: ['class']
      });

      // Initial check
      updateFooterVisibility();
    }
  });
</script>


    
  </footer>


      </div>
    </div>
    
      

<div class="search-overlay"></div>

    
  </div>

  
    





<script type="module">
  
  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.esm.min.mjs';
  

  var config = {}
;
  mermaid.initialize(config);
  mermaid.run({
    querySelector: '.language-mermaid',
  });
</script>



  
</body>
</html>

