<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Managing database versions effectively is critical for maintaining stable, secure, and performant systems. Geode provides comprehensive version management capabilities including explicit version tracking, compatibility matrices, automated upgrade paths, and multi-version deployment support for enterprise environments.</p>
<p>As an ISO/IEC 39075:2024 GQL-compliant graph database, Geode follows semantic versioning with clear compatibility guarantees, enabling predictable upgrade strategies and safe dependency management across complex deployment environments.</p>
<h3 id="version-numbering-scheme" class="position-relative d-flex align-items-center group">
<span>Version Numbering Scheme</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="version-numbering-scheme"
aria-haspopup="dialog"
aria-label="Share link: Version Numbering Scheme">
<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 2.0.0):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Current Version: 0.2.18
</span></span><span class="line"><span class="cl">Next Minor: 0.3.0
</span></span><span class="line"><span class="cl">Next Major: 1.0.0
</span></span></code></pre></div><p><strong>Version Components Explained</strong>:</p>
<p><strong>MAJOR Version</strong> (0.x.x → 1.x.x):</p>
<ul>
<li>Breaking API changes</li>
<li>Protocol incompatibilities</li>
<li>Database format changes requiring migration</li>
<li>Removal of deprecated features</li>
<li>Example: 0.2.15 → 1.0.0</li>
</ul>
<p><strong>MINOR Version</strong> (0.2.x → 0.3.x):</p>
<ul>
<li>New backward-compatible features</li>
<li>New GQL functions or operators</li>
<li>Performance improvements</li>
<li>Enhanced client capabilities</li>
<li>Example: 0.2.15 → 0.3.0</li>
</ul>
<p><strong>PATCH Version</strong> (0.2.14 → 0.2.15):</p>
<ul>
<li>Bug fixes</li>
<li>Security patches</li>
<li>Documentation corrections</li>
<li>Minor optimizations</li>
<li>Example: 0.2.14 → 0.2.15</li>
</ul>
<h3 id="current-version-geode_version" class="position-relative d-flex align-items-center group">
<span>Current Version: <strong>0.2.18</strong></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="current-version-geode_version"
aria-haspopup="dialog"
aria-label="Share link: Current Version: GEODE_">
<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><strong>Server Version</strong>:</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">Geode v0.2.18
</span></span><span class="line"><span class="cl">Build: 20260329-<release-sha>
</span></span><span class="line"><span class="cl">Zig: 0.1.0
</span></span><span class="line"><span class="cl">Protocol: QUIC v1
</span></span><span class="line"><span class="cl">GQL: ISO/IEC 39075:2024
</span></span></code></pre></div><p><strong>Client Library Versions</strong>:</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"># Go</span>
</span></span><span class="line"><span class="cl">geodedb.com/geode v0.2.18
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Python</span>
</span></span><span class="line"><span class="cl">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"># Rust</span>
</span></span><span class="line"><span class="cl">geode-client <span class="o">=</span> <span class="s2">"0.1.1-alpha.8"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Zig</span>
</span></span><span class="line"><span class="cl">geode-client v0.1.0
</span></span></code></pre></div>
<h3 id="version-compatibility-matrix" class="position-relative d-flex align-items-center group">
<span>Version 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="version-compatibility-matrix"
aria-haspopup="dialog"
aria-label="Share link: Version 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>
<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>
<th>Protocol</th>
</tr>
</thead>
<tbody>
<tr>
<td>0.2.x</td>
<td>rolling</td>
<td>0.3.19+</td>
<td>0.1.1-alpha.8+</td>
<td>0.1.0+</td>
<td>QUIC v1</td>
</tr>
<tr>
<td>0.1.28-0.1.39</td>
<td>rolling</td>
<td>0.3.19+</td>
<td>0.1.1-alpha.8+</td>
<td>0.1.0+</td>
<td>QUIC v1</td>
</tr>
<tr>
<td>0.1.3-0.1.27</td>
<td>validate in staging</td>
<td>0.3.x</td>
<td>0.1.x</td>
<td>0.1.x</td>
<td>QUIC v1</td>
</tr>
</tbody>
</table>
<p><strong>Compatibility Rules</strong>:</p>
<ul>
<li><strong>Prefer Current Stable Line</strong>: Match the current stable server line with the latest published client for that language</li>
<li><strong>Patch Flexibility</strong>: Any patch version within the same minor version is compatible</li>
<li><strong>Major Boundaries</strong>: Crossing major versions requires explicit migration</li>
<li><strong>Forward Compatibility</strong>: Clients may connect to newer server patch versions</li>
<li><strong>Backward Compatibility</strong>: Servers support clients from the same minor version</li>
</ul>
<h4 id="protocol-version-compatibility" class="position-relative d-flex align-items-center group">
<span>Protocol Version 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-version-compatibility"
aria-haspopup="dialog"
aria-label="Share link: Protocol Version 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>Version</th>
<th>Protocol</th>
<th>Transport Notes</th>
<th>TLS</th>
<th>Port</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>0.2.x</td>
<td>QUIC v1</td>
<td>Multiplexed streams</td>
<td>TLS 1.3</td>
<td>3141</td>
<td>Current</td>
</tr>
<tr>
<td>0.1.28-0.1.39</td>
<td>QUIC v1</td>
<td>March 2026 storage transition line</td>
<td>TLS 1.3</td>
<td>3141</td>
<td>Upgrade planned</td>
</tr>
<tr>
<td>0.1.3-0.1.27</td>
<td>QUIC v1</td>
<td>Early production-ready line</td>
<td>TLS 1.3</td>
<td>3141</td>
<td>Legacy</td>
</tr>
</tbody>
</table>
<p><strong>Migration Path</strong>: Early <code>v0.1.x</code> stable line → March 2026 storage transition line → current <code>v0.2.x</code> stable line</p>
<h3 id="checking-versions" class="position-relative d-flex align-items-center group">
<span>Checking Versions</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-versions"
aria-haspopup="dialog"
aria-label="Share link: Checking Versions">
<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><strong>Server Version Check</strong>:</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"># Version command</span>
</span></span><span class="line"><span class="cl">geode version
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Detailed version information</span>
</span></span><span class="line"><span class="cl">geode version --verbose
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># JSON output for parsing</span>
</span></span><span class="line"><span class="cl">geode version --json
</span></span></code></pre></div><p><strong>Client Version Check</strong>:</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"># Go</span>
</span></span><span class="line"><span class="cl">go list -m geodedb.com/geode
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Python</span>
</span></span><span class="line"><span class="cl">pip show geode-client
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Rust</span>
</span></span><span class="line"><span class="cl">cargo tree <span class="p">|</span> grep geode-client
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Zig</span>
</span></span><span class="line"><span class="cl">zig build --version
</span></span></code></pre></div><p><strong>Runtime Version Negotiation</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">server</span><span class="w"> </span><span class="py">version</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">client</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">VERSION</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Returns</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">version</span><span class="p">:</span><span class="w"> </span><span class="s">"0.2.18"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">build</span><span class="p">:</span><span class="w"> </span><span class="s">"20240124-1a2b3c4"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">protocol</span><span class="p">:</span><span class="w"> </span><span class="s">"QUIC v1"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">gql_version</span><span class="p">:</span><span class="w"> </span><span class="s">"ISO/IEC 39075:2024"</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="version-pinning" class="position-relative d-flex align-items-center group">
<span>Version Pinning</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="version-pinning"
aria-haspopup="dialog"
aria-label="Share link: Version Pinning">
<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><strong>Package Manager Pinning</strong>:</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"># Go - go.mod</span>
</span></span><span class="line"><span class="cl">module myapp
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">go 1.24
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">require <span class="o">(</span>
</span></span><span class="line"><span class="cl"> geodedb.com/geode v0.2.18 // Exact version
</span></span><span class="line"><span class="cl"><span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Python - requirements.txt</span>
</span></span><span class="line"><span class="cl">geode-client<span class="o">==</span>0.3.19 <span class="c1"># Exact version</span>
</span></span><span class="line"><span class="cl">geode-client><span class="o">=</span>0.3.19,<0.4.0 <span class="c1"># Version range</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Rust - 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">"=0.1.1-alpha.8"</span> <span class="c1"># Exact version</span>
</span></span><span class="line"><span class="cl"><span class="c1"># OR</span>
</span></span><span class="line"><span class="cl">geode-client <span class="o">=</span> <span class="s2">"~0.1"</span> <span class="c1"># Same minor version</span>
</span></span><span class="line"><span class="cl"><span class="c1"># OR</span>
</span></span><span class="line"><span class="cl">geode-client <span class="o">=</span> <span class="s2">"^0.1"</span> <span class="c1"># Compatible versions</span>
</span></span></code></pre></div><p><strong>Container Version Pinning</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-dockerfile" data-lang="dockerfile"><span class="line"><span class="cl"><span class="c"># Exact version</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">FROM</span><span class="s"> geodedb/geode:0.2.18</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># Minor version (latest patch)</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">FROM</span><span class="s"> geodedb/geode:0.2</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># Major version (latest minor)</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">FROM</span><span class="s"> geodedb/geode:0</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># Latest (not recommended for production)</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">FROM</span><span class="s"> geodedb/geode:latest</span><span class="err">
</span></span></span></code></pre></div><p><strong>Configuration Version Lock</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># config.yaml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">server</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">version_check</span><span class="p">:</span><span class="w"> </span><span class="l">strict </span><span class="w"> </span><span class="c"># Enforce exact version match</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">min_client_version</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.0.0"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">max_client_version</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.0.99"</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="upgrade-strategies" class="position-relative d-flex align-items-center group">
<span>Upgrade 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="upgrade-strategies"
aria-haspopup="dialog"
aria-label="Share link: Upgrade 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>
<h4 id="rolling-upgrades-zero-downtime" class="position-relative d-flex align-items-center group">
<span>Rolling Upgrades (Zero-Downtime)</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-upgrades-zero-downtime"
aria-haspopup="dialog"
aria-label="Share link: Rolling Upgrades (Zero-Downtime)">
<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 clustered deployments:</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. Upgrade standby nodes first</span>
</span></span><span class="line"><span class="cl">ssh replica-1 <span class="s2">"sudo apt-get install geode=0.2.18"</span>
</span></span><span class="line"><span class="cl">ssh replica-2 <span class="s2">"sudo apt-get install geode=0.2.18"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 2. Wait for replication sync</span>
</span></span><span class="line"><span class="cl">geode cluster status
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3. Promote replica to primary</span>
</span></span><span class="line"><span class="cl">geode cluster promote replica-1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 4. Upgrade old primary</span>
</span></span><span class="line"><span class="cl">ssh primary <span class="s2">"sudo apt-get install geode=0.2.18"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 5. Rebalance cluster</span>
</span></span><span class="line"><span class="cl">geode cluster rebalance
</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><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-compose -f docker-compose.green.yml up -d
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 2. Replicate data from blue to green</span>
</span></span><span class="line"><span class="cl">geode replicate --from blue:3141 --to green:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3. Test green environment</span>
</span></span><span class="line"><span class="cl">./run-integration-tests.sh --host green:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 4. Switch traffic to green</span>
</span></span><span class="line"><span class="cl">kubectl patch service geode -p <span class="s1">'{"spec":{"selector":{"version":"0.2.18"}}}'</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 5. Decommission blue environment after validation</span>
</span></span><span class="line"><span class="cl">docker-compose -f docker-compose.blue.yml down
</span></span></code></pre></div>
<h4 id="canary-deployment" class="position-relative d-flex align-items-center group">
<span>Canary 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="canary-deployment"
aria-haspopup="dialog"
aria-label="Share link: Canary 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><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. Route 10% of traffic to new version</span>
</span></span><span class="line"><span class="cl">kubectl apply -f canary-10percent.yaml
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 2. Monitor metrics and errors</span>
</span></span><span class="line"><span class="cl">kubectl logs -l <span class="nv">version</span><span class="o">=</span>0.2.18 --tail<span class="o">=</span><span class="m">100</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3. Gradually increase traffic: 25% → 50% → 100%</span>
</span></span><span class="line"><span class="cl">kubectl apply -f canary-25percent.yaml
</span></span><span class="line"><span class="cl">kubectl apply -f canary-50percent.yaml
</span></span><span class="line"><span class="cl">kubectl apply -f canary-100percent.yaml
</span></span></code></pre></div>
<h3 id="multi-version-support" class="position-relative d-flex align-items-center group">
<span>Multi-Version 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="multi-version-support"
aria-haspopup="dialog"
aria-label="Share link: Multi-Version 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><strong>Running Multiple Versions</strong>:</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"># Different versions on different ports</span>
</span></span><span class="line"><span class="cl">/opt/geode-0.1.2/bin/geode serve --listen :8443
</span></span><span class="line"><span class="cl">/opt/geode-0.2.18/bin/geode serve --listen :3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Docker containers</span>
</span></span><span class="line"><span class="cl">docker run -p 8443:8443 geodedb/geode:0.1.2
</span></span><span class="line"><span class="cl">docker run -p 3141:3141 geodedb/geode:0.2.18
</span></span></code></pre></div><p><strong>Client Version Selection</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="c1">// Go - include client version in HELLO
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">db</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Open</span><span class="p">(</span><span class="s">"geode"</span><span class="p">,</span> <span class="s">"localhost:3141?hello_ver=0.2.18"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Python - include client version in HELLO
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">client</span> <span class="p">=</span> <span class="nf">Client</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">host</span><span class="p">=</span><span class="s">"localhost"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">port</span><span class="p">=</span><span class="mi">3141</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">hello_ver</span><span class="p">=</span><span class="s">"0.2.18"</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Rust - include client version in HELLO
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">let</span> <span class="nx">client</span> <span class="p">=</span> <span class="nx">Client</span><span class="p">::</span><span class="nb">new</span><span class="p">(</span><span class="s">"localhost"</span><span class="p">,</span> <span class="mi">3141</span><span class="p">).</span><span class="nf">hello_ver</span><span class="p">(</span><span class="s">"0.2.18"</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">let</span> <span class="nx">mut</span> <span class="nx">conn</span> <span class="p">=</span> <span class="nx">client</span><span class="p">.</span><span class="nf">connect</span><span class="p">().</span><span class="nx">await</span><span class="err">?</span><span class="p">;</span>
</span></span></code></pre></div>
<h3 id="version-metadata" class="position-relative d-flex align-items-center group">
<span>Version Metadata</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="version-metadata"
aria-haspopup="dialog"
aria-label="Share link: Version Metadata">
<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><strong>Query Runtime Version Information</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Server</span><span class="w"> </span><span class="py">version</span><span class="w"> </span><span class="py">details</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">VERSION</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Protocol</span><span class="w"> </span><span class="py">capabilities</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">PROTOCOL</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Feature</span><span class="w"> </span><span class="py">support</span><span class="w"> </span><span class="py">matrix</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">FEATURES</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Client</span><span class="w"> </span><span class="py">library</span><span class="w"> </span><span class="py">version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">CLIENT_VERSION</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>Programmatic Version Access</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="c1">// Go
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">version</span> <span class="o">:=</span> <span class="nx">conn</span><span class="p">.</span><span class="nf">ServerVersion</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">"Server: %s\n"</span><span class="p">,</span> <span class="nx">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">"Client: %s\n"</span><span class="p">,</span> <span class="nx">geode</span><span class="p">.</span><span class="nx">ClientVersion</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Python
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">version</span> <span class="p">=</span> <span class="nx">await</span> <span class="nx">client</span><span class="p">.</span><span class="nf">get_server_version</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nx">f</span><span class="s">"Server: {version}"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nx">f</span><span class="s">"Client: {geode_client.__version__}"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Rust
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">let</span> <span class="nx">version</span> <span class="p">=</span> <span class="nx">client</span><span class="p">.</span><span class="nf">server_version</span><span class="p">().</span><span class="nx">await</span><span class="err">?</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nx">println</span><span class="p">!(</span><span class="s">"Server: {}"</span><span class="p">,</span> <span class="nx">version</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">println</span><span class="p">!(</span><span class="s">"Client: {}"</span><span class="p">,</span> <span class="nx">geode_client</span><span class="p">::</span><span class="nx">VERSION</span><span class="p">);</span>
</span></span></code></pre></div>
<h3 id="dependency-management" class="position-relative d-flex align-items-center group">
<span>Dependency Management</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="dependency-management"
aria-haspopup="dialog"
aria-label="Share link: Dependency Management">
<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><strong>Transitive Dependencies</strong>:</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"># Go - view dependency tree</span>
</span></span><span class="line"><span class="cl">go mod graph <span class="p">|</span> grep geode
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Python - view dependencies</span>
</span></span><span class="line"><span class="cl">pip show geode-client
</span></span><span class="line"><span class="cl">pipdeptree -p geode-client
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Rust - dependency tree</span>
</span></span><span class="line"><span class="cl">cargo tree -p geode-client
</span></span></code></pre></div><p><strong>Lock Files</strong>:</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"># Go - go.sum</span>
</span></span><span class="line"><span class="cl">geodedb.com/geode v0.2.18 h1:abc123...
</span></span><span class="line"><span class="cl">geodedb.com/geode v0.2.18/go.mod h1:def456...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Python - poetry.lock or Pipfile.lock</span>
</span></span><span class="line"><span class="cl"><span class="o">[[</span>package<span class="o">]]</span>
</span></span><span class="line"><span class="cl"><span class="nv">name</span> <span class="o">=</span> <span class="s2">"geode-client"</span>
</span></span><span class="line"><span class="cl"><span class="nv">version</span> <span class="o">=</span> <span class="s2">"0.3.19"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Rust - Cargo.lock</span>
</span></span><span class="line"><span class="cl"><span class="o">[[</span>package<span class="o">]]</span>
</span></span><span class="line"><span class="cl"><span class="nv">name</span> <span class="o">=</span> <span class="s2">"geode-client"</span>
</span></span><span class="line"><span class="cl"><span class="nv">version</span> <span class="o">=</span> <span class="s2">"0.1.1-alpha.8"</span>
</span></span></code></pre></div>
<h3 id="version-constraints-in-cicd" class="position-relative d-flex align-items-center group">
<span>Version Constraints in CI/CD</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="version-constraints-in-cicd"
aria-haspopup="dialog"
aria-label="Share link: Version Constraints in CI/CD">
<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><strong>GitHub Actions</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Test</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">on</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">push, pull_request]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">jobs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">test</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geodedb/geode:0.2.18 </span><span class="w"> </span><span class="c"># Pin exact version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">3141</span><span class="p">:</span><span class="m">3141</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/checkout@v3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Install Client</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l">pip install geode-client==0.3.19 </span><span class="w"> </span><span class="c"># Pin exact version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Run Tests</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l">pytest tests/</span><span class="w">
</span></span></span></code></pre></div><p><strong>GitLab CI</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">test</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">python:3.11</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geodedb/geode:0.2.18</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">alias</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">before_script</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">pip install geode-client==0.3.19</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">script</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">pytest tests/</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="breaking-change-migration" class="position-relative d-flex align-items-center group">
<span>Breaking Change Migration</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="breaking-change-migration"
aria-haspopup="dialog"
aria-label="Share link: Breaking Change Migration">
<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>When crossing major version boundaries:</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. Review breaking changes</span>
</span></span><span class="line"><span class="cl">geode changelog --breaking --since v0.2.18
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 2. Run migration checker</span>
</span></span><span class="line"><span class="cl">geode migrate check --from 0.2.18 --to 1.0.0
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3. Generate migration plan</span>
</span></span><span class="line"><span class="cl">geode migrate plan --from 0.2.18 --to 1.0.0 --output plan.yaml
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 4. Execute migration</span>
</span></span><span class="line"><span class="cl">geode migrate execute --plan plan.yaml
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 5. Validate migration</span>
</span></span><span class="line"><span class="cl">geode migrate validate
</span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</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"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<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><ol>
<li><strong>Pin Production Versions</strong>: Always use exact version constraints in production</li>
<li><strong>Test Upgrades</strong>: Validate new versions in staging before production</li>
<li><strong>Monitor Version Skew</strong>: Ensure client and server versions remain compatible</li>
<li><strong>Document Dependencies</strong>: Maintain clear documentation of version requirements</li>
<li><strong>Automate Checks</strong>: Use CI/CD to enforce version compatibility</li>
<li><strong>Plan Migrations</strong>: Schedule maintenance windows for major version upgrades</li>
<li><strong>Keep Current</strong>: Stay within supported version ranges (latest 2 minor versions)</li>
</ol>
<h3 id="troubleshooting-version-issues" class="position-relative d-flex align-items-center group">
<span>Troubleshooting Version Issues</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="troubleshooting-version-issues"
aria-haspopup="dialog"
aria-label="Share link: Troubleshooting Version Issues">
<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><strong>Version Mismatch Errors</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Error: Client version 0.2.0 incompatible with server 0.2.18
</span></span><span class="line"><span class="cl">Solution: Upgrade client to the current published line for your language
</span></span></code></pre></div><p><strong>Protocol Incompatibility</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Error: Protocol QUIC v1 required, but client uses TCP
</span></span><span class="line"><span class="cl">Solution: Upgrade to client library version 1.0.0+
</span></span></code></pre></div><p><strong>Feature Not Available</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Error: CTE support not available in server version 0.2.13
</span></span><span class="line"><span class="cl">Solution: Upgrade server to 0.2.18+
</span></span></code></pre></div>
<h3 id="related-topics" class="position-relative d-flex align-items-center group">
<span>Related Topics</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="related-topics"
aria-haspopup="dialog"
aria-label="Share link: Related Topics">
<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><ul>
<li>Release Notes and Versioning</li>
<li>Version Changelog</li>
<li>Migration Guides</li>
<li>Compatibility Matrix</li>
<li>Dependency Management</li>
<li>Upgrade Procedures</li>
<li>Standards Compliance</li>
</ul>
<h3 id="further-reading" class="position-relative d-flex align-items-center group">
<span>Further Reading</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="further-reading"
aria-haspopup="dialog"
aria-label="Share link: Further Reading">
<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><ul>
<li>Semantic Versioning Specification</li>
<li>Version Compatibility Testing</li>
<li>Database Migration Strategies</li>
<li>Dependency Management Best Practices</li>
<li>CI/CD Version Pinning</li>
<li>Multi-Version Deployment</li>
<li>Upgrade Planning Guide</li>
</ul>
Tag
1 article
Version Management & Compatibility
Comprehensive guide to Geode version management including version compatibility, dependency tracking, client-server versioning, upgrade paths, and multi-version deployment strategies.