<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <p>Keeping your Geode database deployment current ensures you benefit from the latest features, performance improvements, security patches, and bug fixes. Geode follows semantic versioning and provides clear upgrade paths with comprehensive release documentation.</p> <h3 id="release-cycle-and-versioning" class="position-relative d-flex align-items-center group"> <span>Release Cycle and Versioning</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="release-cycle-and-versioning" aria-haspopup="dialog" aria-label="Share link: Release Cycle and Versioning"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>Geode uses semantic versioning (SemVer) to communicate the nature and impact of changes across releases.</p> <h4 id="semantic-versioning-schema" class="position-relative d-flex align-items-center group"> <span>Semantic Versioning Schema</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="semantic-versioning-schema" aria-haspopup="dialog" aria-label="Share link: Semantic Versioning Schema"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Geode version numbers follow the format <code>MAJOR.MINOR.PATCH</code>:</p> <ul> <li><strong>MAJOR</strong> (e.g., 1.0.0 → 2.0.0): Breaking changes requiring migration</li> <li><strong>MINOR</strong> (e.g., 0.2.15 → 0.3.0): New features, backward compatible</li> <li><strong>PATCH</strong> (e.g., 0.2.14 → 0.2.15): Bug fixes, security patches</li> </ul> <p><strong>Current Version:</strong> <strong>v0.2.18</strong> (Current stable release, <strong>March 30, 2026</strong>)</p> <h4 id="release-types" class="position-relative d-flex align-items-center group"> <span>Release Types</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="release-types" aria-haspopup="dialog" aria-label="Share link: Release Types"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Production Releases</strong></p> <ul> <li>Full feature set with comprehensive testing</li> <li>97.4% test coverage (1644/1688 tests passing)</li> <li>100% GQL compliance (see conformance profile)</li> <li>Suitable for enterprise production environments</li> </ul> <p><strong>Release Candidates (RC)</strong></p> <ul> <li>Feature-complete pre-release versions</li> <li>Beta testing phase for community validation</li> <li>Typically released 2-4 weeks before production release</li> </ul> <p><strong>Patch Releases</strong></p> <ul> <li>Critical bug fixes and security updates</li> <li>Released as needed, typically within 1-2 weeks of issue discovery</li> <li>Minimal risk, recommended for immediate deployment</li> </ul> <h4 id="release-frequency" class="position-relative d-flex align-items-center group"> <span>Release Frequency</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="release-frequency" aria-haspopup="dialog" aria-label="Share link: Release Frequency"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Minor releases:</strong> Quarterly (approximately every 3 months)</li> <li><strong>Patch releases:</strong> As needed for critical issues</li> <li><strong>Major releases:</strong> Annually or when significant architectural changes are introduced</li> </ul> <h3 id="checking-current-version" class="position-relative d-flex align-items-center group"> <span>Checking Current Version</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="checking-current-version" aria-haspopup="dialog" aria-label="Share link: Checking Current Version"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Verify your installed Geode version using the CLI:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./geode --version </span></span><span class="line"><span class="cl"><span class="c1"># Output: Geode v0.2.18 (2026-03-30)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check detailed build information</span> </span></span><span class="line"><span class="cl">./geode version --verbose </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Geode Graph Database</span> </span></span><span class="line"><span class="cl"><span class="c1"># Version: 0.2.18</span> </span></span><span class="line"><span class="cl"><span class="c1"># Build Date: 2026-03-30</span> </span></span><span class="line"><span class="cl"><span class="c1"># Git Commit: &lt;release-sha&gt;</span> </span></span><span class="line"><span class="cl"><span class="c1"># GQL Standard: ISO/IEC 39075:2024</span> </span></span><span class="line"><span class="cl"><span class="c1"># Zig Version: 0.1.0</span> </span></span></code></pre></div><p>Check version from client libraries:</p> <p><strong>Go:</strong></p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;geodedb.com/geode&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nx">version</span> <span class="o">:=</span> <span class="nx">geode</span><span class="p">.</span><span class="nf">Version</span><span class="p">()</span> </span></span><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Client version: %s\n&#34;</span><span class="p">,</span> <span class="nx">version</span><span class="p">)</span> </span></span></code></pre></div><p><strong>Python:</strong></p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">geode_client</span> </span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Client version: </span><span class="si">{</span><span class="n">geode_client</span><span class="o">.</span><span class="n">__version__</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span> </span></span></code></pre></div><p><strong>Rust:</strong></p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">use</span><span class="w"> </span><span class="n">geode_client</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;Client version: </span><span class="si">{}</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">geode_client</span>::<span class="no">VERSION</span><span class="p">);</span><span class="w"> </span></span></span></code></pre></div> <h3 id="update-strategies" class="position-relative d-flex align-items-center group"> <span>Update Strategies</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="update-strategies" aria-haspopup="dialog" aria-label="Share link: Update Strategies"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Choose an update strategy that balances risk mitigation with access to new capabilities.</p> <h4 id="conservative-strategy" class="position-relative d-flex align-items-center group"> <span>Conservative Strategy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="conservative-strategy" aria-haspopup="dialog" aria-label="Share link: Conservative Strategy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Recommended for critical production environments:</p> <ol> <li>Wait 2-4 weeks after minor release announcement</li> <li>Review release notes and breaking changes</li> <li>Test in staging environment</li> <li>Monitor community feedback</li> <li>Deploy to production during maintenance window</li> </ol> <p><strong>Advantages:</strong></p> <ul> <li>Minimizes exposure to undiscovered issues</li> <li>Community identifies edge cases first</li> <li>More time for internal testing</li> </ul> <p><strong>Update frequency:</strong> Quarterly for minor releases, immediate for critical patches</p> <h4 id="balanced-strategy" class="position-relative d-flex align-items-center group"> <span>Balanced Strategy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="balanced-strategy" aria-haspopup="dialog" aria-label="Share link: Balanced Strategy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Recommended for most production environments:</p> <ol> <li>Update to patch releases within 1 week</li> <li>Update to minor releases within 2 weeks</li> <li>Test in staging before production deployment</li> <li>Follow documented upgrade procedures</li> </ol> <p><strong>Advantages:</strong></p> <ul> <li>Access to new features relatively quickly</li> <li>Reduced accumulation of technical debt</li> <li>Security patches applied promptly</li> </ul> <p><strong>Update frequency:</strong> Monthly review cycle with selective updates</p> <h4 id="aggressive-strategy" class="position-relative d-flex align-items-center group"> <span>Aggressive Strategy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="aggressive-strategy" aria-haspopup="dialog" aria-label="Share link: Aggressive Strategy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Recommended for development environments and early adopters:</p> <ol> <li>Update to latest release within days</li> <li>Participate in release candidate testing</li> <li>Provide community feedback</li> <li>Accept higher risk for access to cutting-edge features</li> </ol> <p><strong>Advantages:</strong></p> <ul> <li>Immediate access to new capabilities</li> <li>Contribute to community testing</li> <li>Influence future development</li> </ul> <p><strong>Update frequency:</strong> Continuous updates as releases become available</p> <h3 id="upgrade-procedures" class="position-relative d-flex align-items-center group"> <span>Upgrade Procedures</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="upgrade-procedures" aria-haspopup="dialog" aria-label="Share link: Upgrade Procedures"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Geode supports both in-place upgrades and blue-green deployment strategies.</p> <h4 id="in-place-upgrade" class="position-relative d-flex align-items-center group"> <span>In-Place Upgrade</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="in-place-upgrade" aria-haspopup="dialog" aria-label="Share link: In-Place Upgrade"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>For single-instance deployments or small clusters:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 1. Backup current database</span> </span></span><span class="line"><span class="cl">./geode backup --output /backup/geode-<span class="k">$(</span>date +%Y%m%d<span class="k">)</span>.db </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 2. Stop Geode server gracefully</span> </span></span><span class="line"><span class="cl">./geode shutdown --wait </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 3. Replace binary</span> </span></span><span class="line"><span class="cl">mv geode geode.old </span></span><span class="line"><span class="cl">wget https://geodedb.com/releases/geode-v0.2.18-linux-amd64 </span></span><span class="line"><span class="cl">mv geode-v0.2.18-linux-amd64 geode </span></span><span class="line"><span class="cl">chmod +x geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 4. Run migration (if needed)</span> </span></span><span class="line"><span class="cl">./geode migrate --check </span></span><span class="line"><span class="cl">./geode migrate --apply </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 5. Start server</span> </span></span><span class="line"><span class="cl">./geode serve --listen 0.0.0.0:3141 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 6. Verify version</span> </span></span><span class="line"><span class="cl">./geode --version </span></span></code></pre></div> <h4 id="blue-green-deployment" class="position-relative d-flex align-items-center group"> <span>Blue-Green Deployment</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="blue-green-deployment" aria-haspopup="dialog" aria-label="Share link: Blue-Green Deployment"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>For high-availability clusters with zero downtime:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 1. Deploy new version to green environment</span> </span></span><span class="line"><span class="cl">docker run -d --name geode-green <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -v /data/geode:/data <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -p 3142:3141 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> geodedb/geode:0.2.18 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 2. Verify green environment health</span> </span></span><span class="line"><span class="cl">curl http://localhost:3142/health </span></span><span class="line"><span class="cl"><span class="c1"># {&#34;status&#34;: &#34;healthy&#34;, &#34;version&#34;: &#34;0.2.18&#34;}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 3. Run smoke tests against green</span> </span></span><span class="line"><span class="cl">./test-harness --target localhost:3142 --suite smoke </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 4. Switch traffic from blue to green (load balancer)</span> </span></span><span class="line"><span class="cl"><span class="c1"># Update load balancer configuration</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 5. Monitor green environment</span> </span></span><span class="line"><span class="cl"><span class="c1"># Watch logs, metrics, error rates</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 6. Decommission blue after stability confirmed</span> </span></span><span class="line"><span class="cl">docker stop geode-blue </span></span><span class="line"><span class="cl">docker rm geode-blue </span></span></code></pre></div> <h4 id="rolling-upgrade-for-clusters" class="position-relative d-flex align-items-center group"> <span>Rolling Upgrade for Clusters</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="rolling-upgrade-for-clusters" aria-haspopup="dialog" aria-label="Share link: Rolling Upgrade for Clusters"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>For distributed deployments maintaining quorum:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Upgrade one node at a time</span> </span></span><span class="line"><span class="cl"><span class="k">for</span> node in node1 node2 node3<span class="p">;</span> <span class="k">do</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Drain node</span> </span></span><span class="line"><span class="cl"> ssh <span class="nv">$node</span> <span class="s2">&#34;./geode admin drain --wait&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Stop node</span> </span></span><span class="line"><span class="cl"> ssh <span class="nv">$node</span> <span class="s2">&#34;systemctl stop geode&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Replace binary</span> </span></span><span class="line"><span class="cl"> scp geode-v0.2.18 <span class="nv">$node</span>:/usr/local/bin/geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Migrate (if needed)</span> </span></span><span class="line"><span class="cl"> ssh <span class="nv">$node</span> <span class="s2">&#34;./geode migrate --apply&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Start node</span> </span></span><span class="line"><span class="cl"> ssh <span class="nv">$node</span> <span class="s2">&#34;systemctl start geode&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Wait for node to rejoin cluster</span> </span></span><span class="line"><span class="cl"> ssh <span class="nv">$node</span> <span class="s2">&#34;./geode admin wait-ready --timeout 120s&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Verify version</span> </span></span><span class="line"><span class="cl"> ssh <span class="nv">$node</span> <span class="s2">&#34;./geode --version&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Proceed to next node</span> </span></span><span class="line"><span class="cl"><span class="k">done</span> </span></span></code></pre></div> <h3 id="database-migrations" class="position-relative d-flex align-items-center group"> <span>Database Migrations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="database-migrations" aria-haspopup="dialog" aria-label="Share link: Database Migrations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Geode handles schema migrations automatically for most updates.</p> <h4 id="migration-process" class="position-relative d-flex align-items-center group"> <span>Migration Process</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="migration-process" aria-haspopup="dialog" aria-label="Share link: Migration Process"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Check if migration is required:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./geode migrate --check </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Migration required: YES</span> </span></span><span class="line"><span class="cl"><span class="c1"># Current schema version: 17</span> </span></span><span class="line"><span class="cl"><span class="c1"># Target schema version: 18</span> </span></span><span class="line"><span class="cl"><span class="c1"># Estimated duration: ~30 seconds</span> </span></span><span class="line"><span class="cl"><span class="c1"># Backup recommended: YES</span> </span></span></code></pre></div><p>Preview migration steps:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./geode migrate --dry-run </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Migration plan for v0.2.14 → v0.2.15:</span> </span></span><span class="line"><span class="cl"><span class="c1"># 1. Validate graph metadata and name-to-UUID mappings</span> </span></span><span class="line"><span class="cl"><span class="c1"># 2. Rebuild storage free-space bookkeeping if required</span> </span></span><span class="line"><span class="cl"><span class="c1"># 3. Refresh query and catalog statistics</span> </span></span><span class="line"><span class="cl"><span class="c1"># 4. Re-open graph stores and verify restart behavior</span> </span></span><span class="line"><span class="cl"><span class="c1"># No data loss expected</span> </span></span></code></pre></div><p>Apply migration:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./geode migrate --apply </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># [1/4] Adding vector_embeddings table... done (2s)</span> </span></span><span class="line"><span class="cl"><span class="c1"># [2/4] Creating property index... done (15s)</span> </span></span><span class="line"><span class="cl"><span class="c1"># [3/4] Updating statistics... done (5s)</span> </span></span><span class="line"><span class="cl"><span class="c1"># [4/4] Rebuilding label indexes... done (8s)</span> </span></span><span class="line"><span class="cl"><span class="c1"># Migration completed successfully in 30s</span> </span></span></code></pre></div> <h4 id="rollback-capability" class="position-relative d-flex align-items-center group"> <span>Rollback Capability</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="rollback-capability" aria-haspopup="dialog" aria-label="Share link: Rollback Capability"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Geode supports rollback for most migrations:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check if rollback is available</span> </span></span><span class="line"><span class="cl">./geode migrate --rollback --check </span></span><span class="line"><span class="cl"><span class="c1"># Output: Rollback available: YES (safe)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Execute rollback</span> </span></span><span class="line"><span class="cl">./geode migrate --rollback </span></span><span class="line"><span class="cl"><span class="c1"># Output: Rolled back to schema version 17</span> </span></span></code></pre></div><p><strong>Note:</strong> Some migrations involving data transformations may not support rollback. Always backup before migrating.</p> <h3 id="compatibility-matrix" class="position-relative d-flex align-items-center group"> <span>Compatibility Matrix</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="compatibility-matrix" aria-haspopup="dialog" aria-label="Share link: Compatibility Matrix"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Understand compatibility between server and client library versions.</p> <h4 id="server-client-compatibility" class="position-relative d-flex align-items-center group"> <span>Server-Client Compatibility</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="server-client-compatibility" aria-haspopup="dialog" aria-label="Share link: Server-Client Compatibility"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><table> <thead> <tr> <th>Server Version</th> <th>Go Client</th> <th>Python Client</th> <th>Rust Client</th> <th>Zig Client</th> </tr> </thead> <tbody> <tr> <td>v0.2.15</td> <td>rolling</td> <td>0.3.19</td> <td>0.1.1-alpha.8</td> <td>0.1.0</td> </tr> <tr> <td>v0.1.28-v0.1.39</td> <td>rolling</td> <td>0.3.19+</td> <td>0.1.1-alpha.8+</td> <td>0.1.0+</td> </tr> <tr> <td>v0.1.3-v0.1.27</td> <td>validate in staging</td> <td>0.3.x</td> <td>0.1.x</td> <td>0.1.x</td> </tr> </tbody> </table> <p><strong>General Rule:</strong> Match minor versions between server and clients for guaranteed compatibility.</p> <h4 id="protocol-compatibility" class="position-relative d-flex align-items-center group"> <span>Protocol Compatibility</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="protocol-compatibility" aria-haspopup="dialog" aria-label="Share link: Protocol Compatibility"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Geode&rsquo;s Protobuf wire protocol maintains backward compatibility within major versions:</p> <ul> <li><strong>Wire Protocol:</strong> v1.x compatible across all v0.x releases</li> <li><strong>QUIC/TLS:</strong> TLS 1.3 required (consistent across versions)</li> <li><strong>Message Types:</strong> Additive only (new types added, old types maintained)</li> </ul> <h4 id="gql-standard-compliance" class="position-relative d-flex align-items-center group"> <span>GQL Standard Compliance</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="gql-standard-compliance" aria-haspopup="dialog" aria-label="Share link: GQL Standard Compliance"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Geode tracks GQL standard evolution:</p> <ul> <li><strong>v0.2.15:</strong> Stable 100% ISO/IEC 39075:2024 compliance with CTE and DOT fixes</li> <li><strong>v0.2.14:</strong> CTE execution and DOT support landed in the release train</li> <li><strong>v0.2.12-v0.2.13:</strong> security hardening, per-graph storage, and QUIC stream multiplexing</li> </ul> <p>Queries written for v0.1.1+ remain valid in newer versions unless they rely on deprecated features.</p> <h3 id="release-notes-and-changelogs" class="position-relative d-flex align-items-center group"> <span>Release Notes and Changelogs</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="release-notes-and-changelogs" aria-haspopup="dialog" aria-label="Share link: Release Notes and Changelogs"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Each release includes comprehensive documentation of changes.</p> <h4 id="release-notes-contents" class="position-relative d-flex align-items-center group"> <span>Release Notes Contents</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="release-notes-contents" aria-haspopup="dialog" aria-label="Share link: Release Notes Contents"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Release notes for each version include:</p> <ol> <li><strong>Breaking Changes:</strong> Required migration steps, deprecated feature removal</li> <li><strong>New Features:</strong> Major capabilities, API additions</li> <li><strong>Enhancements:</strong> Performance improvements, usability updates</li> <li><strong>Bug Fixes:</strong> Issues resolved with reference numbers</li> <li><strong>Security Updates:</strong> CVEs addressed, security improvements</li> <li><strong>Deprecations:</strong> Features marked for future removal with migration guidance</li> </ol> <h4 id="example-release-note-v0215" class="position-relative d-flex align-items-center group"> <span>Example Release Note (v0.2.15)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="example-release-note-v0215" aria-haspopup="dialog" aria-label="Share link: Example Release Note (v0.2.15)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gu">## Geode v0.2.15 - March 2026 </span></span></span><span class="line"><span class="cl"><span class="gu"></span> </span></span><span class="line"><span class="cl"><span class="gu">### Breaking Changes </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> None </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="gu">### New Features </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> CTE execution in the stable release line </span></span><span class="line"><span class="cl"><span class="k">-</span> DOT graph output fixes </span></span><span class="line"><span class="cl"><span class="k">-</span> 32-bit ARM UUIDv7 fix </span></span><span class="line"><span class="cl"><span class="k">-</span> Current release-line docs and upgrade guidance </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="gu">### Enhancements </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> QUIC stream multiplexing for better concurrency </span></span><span class="line"><span class="cl"><span class="k">-</span> Poll-loop tuning for accepted-connection handling </span></span><span class="line"><span class="cl"><span class="k">-</span> Storage fixes for graph metadata and adapter label dictionaries </span></span><span class="line"><span class="cl"><span class="k">-</span> Release process now distinguishes stable <span class="sb">`v0.2.15`</span> from unreleased <span class="sb">`main`</span> fixes </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="gu">### Bug Fixes </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> Fixed 32-bit ARM UUIDv7 generation </span></span><span class="line"><span class="cl"><span class="k">-</span> Corrected DOT output regressions carried through the March release train </span></span><span class="line"><span class="cl"><span class="k">-</span> Stabilized graph-storage restart behavior in post-tag <span class="sb">`main`</span> work </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="gu">### Security Updates </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> Continued QUIC library maintenance and accepted-connection handling updates </span></span><span class="line"><span class="cl"><span class="k">-</span> Documentation now reflects current auth, API key, and mTLS support </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="gu">### Deprecations </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> None in the tagged <span class="sb">`v0.2.18`</span> release; see unreleased <span class="sb">`main`</span> notes for open follow-up work </span></span></code></pre></div> <h4 id="accessing-release-notes" class="position-relative d-flex align-items-center group"> <span>Accessing Release Notes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="accessing-release-notes" aria-haspopup="dialog" aria-label="Share link: Accessing Release Notes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Release notes are available through multiple channels:</p> <ul> <li><strong>Website:</strong> <a href="https://geodedb.com/releases/" >https://geodedb.com/releases/</a> </li> <li><strong>GitHub:</strong> <a href="https://github.com/geodedb/geode/releases" aria-label="https://github.com/geodedb/geode/releases – opens in new window" target="_blank" rel="noopener noreferrer" >https://github.com/geodedb/geode/releases <span aria-hidden="true" class="external-icon">↗</span> </a> </li> <li><strong>CLI:</strong> <code>./geode release-notes --version 0.2.18</code></li> <li><strong>API:</strong> <code>curl https://geodedb.com/api/v1/releases/0.2.18</code></li> </ul> <h3 id="update-notifications" class="position-relative d-flex align-items-center group"> <span>Update Notifications</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="update-notifications" aria-haspopup="dialog" aria-label="Share link: Update Notifications"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Stay informed about new releases through multiple channels.</p> <h4 id="rss-feed" class="position-relative d-flex align-items-center group"> <span>RSS Feed</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="rss-feed" aria-haspopup="dialog" aria-label="Share link: RSS Feed"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Subscribe to release announcements:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">https://geodedb.com/releases/feed.xml </span></span></code></pre></div> <h4 id="email-notifications" class="position-relative d-flex align-items-center group"> <span>Email Notifications</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="email-notifications" aria-haspopup="dialog" aria-label="Share link: Email Notifications"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Register for email alerts:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -X POST https://geodedb.com/api/v1/notify/subscribe <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -H <span class="s2">&#34;Content-Type: application/json&#34;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -d <span class="s1">&#39;{&#34;email&#34;: &#34;[email protected]&#34;, &#34;topics&#34;: [&#34;releases&#34;, &#34;security&#34;]}&#39;</span> </span></span></code></pre></div> <h4 id="automated-update-checking" class="position-relative d-flex align-items-center group"> <span>Automated Update Checking</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="automated-update-checking" aria-haspopup="dialog" aria-label="Share link: Automated Update Checking"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Configure Geode to check for updates:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Enable update checking</span> </span></span><span class="line"><span class="cl">./geode config <span class="nb">set</span> update_check.enabled <span class="nb">true</span> </span></span><span class="line"><span class="cl">./geode config <span class="nb">set</span> update_check.frequency daily </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check for updates manually</span> </span></span><span class="line"><span class="cl">./geode check-update </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Current version: v0.2.14</span> </span></span><span class="line"><span class="cl"><span class="c1"># Latest version: v0.2.18</span> </span></span><span class="line"><span class="cl"><span class="c1"># Update available: YES</span> </span></span><span class="line"><span class="cl"><span class="c1"># Release notes: https://gitlab.com/devnw/codepros/geode/geode/-/releases/v0.2.18</span> </span></span></code></pre></div> <h4 id="security-advisories" class="position-relative d-flex align-items-center group"> <span>Security Advisories</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="security-advisories" aria-haspopup="dialog" aria-label="Share link: Security Advisories"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Critical security updates are announced via:</p> <ul> <li>Security mailing list (<a href="mailto:[email protected]" >[email protected]</a> )</li> <li>GitHub Security Advisories</li> <li>CVE database entries</li> <li>In-product security alerts</li> </ul> <h3 id="testing-updates" class="position-relative d-flex align-items-center group"> <span>Testing Updates</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="testing-updates" aria-haspopup="dialog" aria-label="Share link: Testing Updates"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Validate updates thoroughly before production deployment.</p> <h4 id="staging-environment-testing" class="position-relative d-flex align-items-center group"> <span>Staging Environment Testing</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="staging-environment-testing" aria-haspopup="dialog" aria-label="Share link: Staging Environment Testing"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Create a staging environment mirroring production:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Clone production data to staging</span> </span></span><span class="line"><span class="cl">./geode backup --output /backup/prod.db </span></span><span class="line"><span class="cl">./geode restore --input /backup/prod.db --target staging:3141 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Deploy new version to staging</span> </span></span><span class="line"><span class="cl">ssh staging <span class="s2">&#34;docker pull geodedb/geode:0.2.18&#34;</span> </span></span><span class="line"><span class="cl">ssh staging <span class="s2">&#34;docker-compose up -d&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Run test suite</span> </span></span><span class="line"><span class="cl">./test-harness --target staging:3141 --suite full </span></span></code></pre></div> <h4 id="regression-testing" class="position-relative d-flex align-items-center group"> <span>Regression Testing</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="regression-testing" aria-haspopup="dialog" aria-label="Share link: Regression Testing"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Automated regression test suite:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> geode-test-harness </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Run comprehensive test suite</span> </span></span><span class="line"><span class="cl">make test-all-html </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check specific regression tests</span> </span></span><span class="line"><span class="cl">pytest tests/regression/ -v --html<span class="o">=</span>report.html </span></span></code></pre></div> <h4 id="performance-testing" class="position-relative d-flex align-items-center group"> <span>Performance Testing</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-testing" aria-haspopup="dialog" aria-label="Share link: Performance Testing"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Benchmark performance before and after updates:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Baseline before update</span> </span></span><span class="line"><span class="cl">./geode benchmark --suite standard --output baseline.json </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># After update</span> </span></span><span class="line"><span class="cl">./geode benchmark --suite standard --output updated.json </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Compare results</span> </span></span><span class="line"><span class="cl">./geode benchmark --compare baseline.json updated.json </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Query performance: +12% faster</span> </span></span><span class="line"><span class="cl"><span class="c1"># Memory usage: -8% reduction</span> </span></span><span class="line"><span class="cl"><span class="c1"># Throughput: +15% increase</span> </span></span></code></pre></div> <h3 id="client-library-updates" class="position-relative d-flex align-items-center group"> <span>Client Library Updates</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="client-library-updates" aria-haspopup="dialog" aria-label="Share link: Client Library Updates"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Keep client libraries synchronized with server versions.</p> <h4 id="updating-go-client" class="position-relative d-flex align-items-center group"> <span>Updating Go Client</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="updating-go-client" aria-haspopup="dialog" aria-label="Share link: Updating Go Client"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Update to specific version</span> </span></span><span class="line"><span class="cl">go get geodedb.com/[email protected] </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Update to latest</span> </span></span><span class="line"><span class="cl">go get -u geodedb.com/geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify version</span> </span></span><span class="line"><span class="cl">go list -m geodedb.com/geode </span></span></code></pre></div> <h4 id="updating-python-client" class="position-relative d-flex align-items-center group"> <span>Updating Python Client</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="updating-python-client" aria-haspopup="dialog" aria-label="Share link: Updating Python Client"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Update to specific version</span> </span></span><span class="line"><span class="cl">pip install geode-client<span class="o">==</span>0.3.19 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Update to latest</span> </span></span><span class="line"><span class="cl">pip install --upgrade geode-client </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify version</span> </span></span><span class="line"><span class="cl">pip show geode-client </span></span></code></pre></div> <h4 id="updating-rust-client" class="position-relative d-flex align-items-center group"> <span>Updating Rust Client</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="updating-rust-client" aria-haspopup="dialog" aria-label="Share link: Updating Rust Client"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Update Cargo.toml</span> </span></span><span class="line"><span class="cl"><span class="o">[</span>dependencies<span class="o">]</span> </span></span><span class="line"><span class="cl">geode-client <span class="o">=</span> <span class="s2">&#34;0.1.1-alpha.8&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Update dependencies</span> </span></span><span class="line"><span class="cl">cargo update </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify version</span> </span></span><span class="line"><span class="cl">cargo tree <span class="p">|</span> grep geode-client </span></span></code></pre></div> <h4 id="updating-zig-client" class="position-relative d-flex align-items-center group"> <span>Updating Zig Client</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="updating-zig-client" aria-haspopup="dialog" aria-label="Share link: Updating Zig Client"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Update build.zig.zon</span> </span></span><span class="line"><span class="cl">.dependencies.geode_client.url <span class="o">=</span> <span class="s2">&#34;https://geodedb.com/zig/geode-client-0.1.0.tar.gz&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Fetch updated dependency</span> </span></span><span class="line"><span class="cl">zig build --fetch </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify version</span> </span></span><span class="line"><span class="cl">zig build version </span></span></code></pre></div> <h3 id="best-practices-for-updates" class="position-relative d-flex align-items-center group"> <span>Best Practices for Updates</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="best-practices-for-updates" aria-haspopup="dialog" aria-label="Share link: Best Practices for Updates"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="always-backup-before-updating" class="position-relative d-flex align-items-center group"> <span>Always Backup Before Updating</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="always-backup-before-updating" aria-haspopup="dialog" aria-label="Share link: Always Backup Before Updating"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create timestamped backup</span> </span></span><span class="line"><span class="cl">./geode backup --output /backup/geode-<span class="k">$(</span>date +%Y%m%d-%H%M%S<span class="k">)</span>.db </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify backup integrity</span> </span></span><span class="line"><span class="cl">./geode backup --verify /backup/geode-20260124-143000.db </span></span></code></pre></div> <h4 id="review-breaking-changes" class="position-relative d-flex align-items-center group"> <span>Review Breaking Changes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="review-breaking-changes" aria-haspopup="dialog" aria-label="Share link: Review Breaking Changes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Read release notes carefully, focusing on breaking changes section:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Display breaking changes only</span> </span></span><span class="line"><span class="cl">./geode release-notes --version 0.2.18 --filter breaking </span></span></code></pre></div> <h4 id="test-in-non-production-first" class="position-relative d-flex align-items-center group"> <span>Test in Non-Production First</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="test-in-non-production-first" aria-haspopup="dialog" aria-label="Share link: Test in Non-Production First"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Never update production directly:</p> <ol> <li>Test in development environment</li> <li>Validate in staging environment</li> <li>Deploy to production during maintenance window</li> </ol> <h4 id="monitor-after-updates" class="position-relative d-flex align-items-center group"> <span>Monitor After Updates</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="monitor-after-updates" aria-haspopup="dialog" aria-label="Share link: Monitor After Updates"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Increase monitoring for 24-48 hours after updates:</p> <ul> <li>Query performance metrics</li> <li>Error rates and types</li> <li>Memory and CPU utilization</li> <li>Connection pool statistics</li> <li>Transaction success rates</li> </ul> <h4 id="document-update-process" class="position-relative d-flex align-items-center group"> <span>Document Update Process</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="document-update-process" aria-haspopup="dialog" aria-label="Share link: Document Update Process"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Maintain runbook for updates:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gu">## Geode Update Runbook </span></span></span><span class="line"><span class="cl"><span class="gu"></span> </span></span><span class="line"><span class="cl"><span class="gu">### Pre-Update Checklist </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">- [ ]</span> Review release notes </span></span><span class="line"><span class="cl"><span class="k">- [ ]</span> Create backup </span></span><span class="line"><span class="cl"><span class="k">- [ ]</span> Notify team of maintenance window </span></span><span class="line"><span class="cl"><span class="k">- [ ]</span> Prepare rollback plan </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="gu">### Update Steps </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">1.</span> Stop application traffic </span></span><span class="line"><span class="cl"><span class="k">2.</span> Backup database </span></span><span class="line"><span class="cl"><span class="k">3.</span> Deploy new version </span></span><span class="line"><span class="cl"><span class="k">4.</span> Run migrations </span></span><span class="line"><span class="cl"><span class="k">5.</span> Verify health checks </span></span><span class="line"><span class="cl"><span class="k">6.</span> Resume traffic </span></span><span class="line"><span class="cl"><span class="k">7.</span> Monitor metrics </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="gu">### Rollback Steps </span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">1.</span> Stop new version </span></span><span class="line"><span class="cl"><span class="k">2.</span> Restore from backup </span></span><span class="line"><span class="cl"><span class="k">3.</span> Start previous version </span></span><span class="line"><span class="cl"><span class="k">4.</span> Verify functionality </span></span></code></pre></div> <h3 id="deprecation-policy" class="position-relative d-flex align-items-center group"> <span>Deprecation Policy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="deprecation-policy" aria-haspopup="dialog" aria-label="Share link: Deprecation Policy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Geode follows a clear deprecation timeline to maintain stability while evolving features.</p> <h4 id="deprecation-process" class="position-relative d-flex align-items-center group"> <span>Deprecation Process</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="deprecation-process" aria-haspopup="dialog" aria-label="Share link: Deprecation Process"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Announcement:</strong> Feature marked as deprecated in release notes</li> <li><strong>Warning Period:</strong> Feature remains functional but logs warnings (2+ minor versions)</li> <li><strong>Removal:</strong> Feature removed in major version increment</li> </ol> <h4 id="migration-support" class="position-relative d-flex align-items-center group"> <span>Migration Support</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="migration-support" aria-haspopup="dialog" aria-label="Share link: Migration Support"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Deprecated features include migration guidance:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check for deprecated feature usage</span> </span></span><span class="line"><span class="cl">./geode audit --check-deprecated </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># WARNING: Using deprecated transaction API</span> </span></span><span class="line"><span class="cl"><span class="c1"># Affected queries: 12</span> </span></span><span class="line"><span class="cl"><span class="c1"># Migration guide: https://geodedb.com/migration/transaction-api</span> </span></span><span class="line"><span class="cl"><span class="c1"># Removal planned: v0.2.0</span> </span></span></code></pre></div> <h3 id="community-and-support" class="position-relative d-flex align-items-center group"> <span>Community and Support</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="community-and-support" aria-haspopup="dialog" aria-label="Share link: Community and Support"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Engage with the Geode community for update assistance.</p> <h4 id="update-assistance-channels" class="position-relative d-flex align-items-center group"> <span>Update Assistance Channels</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="update-assistance-channels" aria-haspopup="dialog" aria-label="Share link: Update Assistance Channels"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Documentation:</strong> /docs/releases/</li> <li><strong>Community Forum:</strong> <a href="https://community.geodedb.com" aria-label="https://community.geodedb.com – opens in new window" target="_blank" rel="noopener noreferrer" >https://community.geodedb.com <span aria-hidden="true" class="external-icon">↗</span> </a> </li> <li><strong>GitHub Issues:</strong> <a href="https://github.com/geodedb/geode/issues" aria-label="https://github.com/geodedb/geode/issues – opens in new window" target="_blank" rel="noopener noreferrer" >https://github.com/geodedb/geode/issues <span aria-hidden="true" class="external-icon">↗</span> </a> </li> <li><strong>Discord:</strong> <a href="https://discord.gg/geodedb" aria-label="https://discord.gg/geodedb – opens in new window" target="_blank" rel="noopener noreferrer" >https://discord.gg/geodedb <span aria-hidden="true" class="external-icon">↗</span> </a> </li> <li><strong>Enterprise Support:</strong> <a href="mailto:[email protected]" >[email protected]</a> </li> </ul> <h4 id="contributing-to-updates" class="position-relative d-flex align-items-center group"> <span>Contributing to Updates</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="contributing-to-updates" aria-haspopup="dialog" aria-label="Share link: Contributing to Updates"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Participate in the development process:</p> <ul> <li>Test release candidates and provide feedback</li> <li>Report bugs discovered in new versions</li> <li>Suggest features for future releases</li> <li>Contribute pull requests for fixes and enhancements</li> </ul> <p>Keeping Geode updated ensures your graph database deployment benefits from continuous improvements in performance, security, and functionality while maintaining compatibility with the evolving GQL standard.</p>

Related Articles