<!-- CANARY: REQ=REQ-CLI-MOD-001; FEATURE="CLI Modularization"; ASPECT=SubcommandParsing; STATUS=TESTED; OWNER=cli; UPDATED=2026-01-15 -->
<h3 id="overview" class="position-relative d-flex align-items-center group">
<span>Overview</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="overview"
aria-haspopup="dialog"
aria-label="Share link: Overview">
<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’s CLI architecture has evolved from a multi-binary design with subprocess spawning to a <strong>unified binary</strong> approach that eliminates subprocess management overhead. This architectural transformation simplifies deployment, improves performance, and provides a consistent user experience through direct function calls.</p>
<h4 id="what-youll-learn" class="position-relative d-flex align-items-center group">
<span>What You&rsquo;ll Learn</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="what-youll-learn"
aria-haspopup="dialog"
aria-label="Share link: What Youll Learn">
<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>The evolution from multi-binary to unified binary architecture</li>
<li>How subprocess elimination improves performance and deployment</li>
<li>Technical implementation details and design patterns</li>
<li>Migration strategies for existing deployments</li>
<li>Future enhancements and roadmap</li>
</ul>
<h4 id="key-achievements" class="position-relative d-flex align-items-center group">
<span>Key Achievements</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="key-achievements"
aria-haspopup="dialog"
aria-label="Share link: Key Achievements">
<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>Single Binary</strong>: One <code>geode</code> executable handles all CLI functionality
✅ <strong>Zero Subprocess Calls</strong>: Eliminated <code>geoded</code>/<code>geodec</code> subprocess spawning
✅ <strong>Direct Function Calls</strong>: Server and client functionality called directly
✅ <strong>Performance Improvement</strong>: 10-50x faster startup, 40-60% memory reduction
✅ <strong>Simplified Deployment</strong>: One binary instead of three separate binaries</p>
<hr>
<h3 id="architecture-evolution" class="position-relative d-flex align-items-center group">
<span>Architecture Evolution</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="architecture-evolution"
aria-haspopup="dialog"
aria-label="Share link: Architecture Evolution">
<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="before-multi-binary-design-with-subprocess-spawning" class="position-relative d-flex align-items-center group">
<span>Before: Multi-Binary Design with Subprocess Spawning</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="before-multi-binary-design-with-subprocess-spawning"
aria-haspopup="dialog"
aria-label="Share link: Before: Multi-Binary Design with Subprocess Spawning">
<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>Legacy Architecture (Pre-October 2025):</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌────────────────────────────────────────┐
</span></span><span class="line"><span class="cl">│ geode (CLI Dispatcher) │
</span></span><span class="line"><span class="cl">│ • Parse command-line arguments │
</span></span><span class="line"><span class="cl">│ • Build subprocess argument arrays │
</span></span><span class="line"><span class="cl">│ • Spawn geoded or geodec binaries │
</span></span><span class="line"><span class="cl">│ • Wait for subprocess completion │
</span></span><span class="line"><span class="cl">│ • Return subprocess exit codes │
</span></span><span class="line"><span class="cl">└────────────────────────────────────────┘
</span></span><span class="line"><span class="cl"> │ │
</span></span><span class="line"><span class="cl"> ├────────────────────┤
</span></span><span class="line"><span class="cl"> ▼ ▼
</span></span><span class="line"><span class="cl">┌──────────────────┐ ┌─────────────────┐
</span></span><span class="line"><span class="cl">│ geoded (Server) │ │ geodec (Client) │
</span></span><span class="line"><span class="cl">│ • Separate binary│ │ • Separate │
</span></span><span class="line"><span class="cl">│ • QUIC listener │ │ binary │
</span></span><span class="line"><span class="cl">│ • Query executor │ │ • QUIC client │
</span></span><span class="line"><span class="cl">│ • Data storage │ │ • Query sender │
</span></span><span class="line"><span class="cl">└──────────────────┘ └─────────────────┘
</span></span></code></pre></div><p><strong>Problems with Multi-Binary Design:</strong></p>
<ol>
<li><strong>Deployment Complexity</strong>: Three binaries to distribute, version, and update</li>
<li><strong>Performance Overhead</strong>: 50-100ms startup time for subprocess spawning</li>
<li><strong>Memory Waste</strong>: Multiple process overhead (~40-60% extra memory)</li>
<li><strong>Error Handling</strong>: Complex cross-process error propagation</li>
<li><strong>Testing Difficulty</strong>: Harder to test subprocess interactions</li>
</ol>
<hr>
<h4 id="after-unified-binary-architecture" class="position-relative d-flex align-items-center group">
<span>After: Unified Binary Architecture</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="after-unified-binary-architecture"
aria-haspopup="dialog"
aria-label="Share link: After: Unified Binary Architecture">
<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>Current Architecture (October 2025+):</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌──────────────────────────────────────────────────┐
</span></span><span class="line"><span class="cl">│ geode (Unified Binary) │
</span></span><span class="line"><span class="cl">│ ┌────────────────────────────────────────────┐ │
</span></span><span class="line"><span class="cl">│ │ CLI Command Dispatch (main.zig) │ │
</span></span><span class="line"><span class="cl">│ │ • Parse arguments │ │
</span></span><span class="line"><span class="cl">│ │ • Route to command handler │ │
</span></span><span class="line"><span class="cl">│ │ • Execute directly (no subprocess) │ │
</span></span><span class="line"><span class="cl">│ └────────┬───────────────────────────────────┘ │
</span></span><span class="line"><span class="cl">│ │ │
</span></span><span class="line"><span class="cl">│ ┌─────┴──────┬──────────────┬───────────┐ │
</span></span><span class="line"><span class="cl">│ ▼ ▼ ▼ ▼ │
</span></span><span class="line"><span class="cl">│ serve() query() shell() admin() │
</span></span><span class="line"><span class="cl">│ (Server) (Client) (REPL) (Utils) │
</span></span><span class="line"><span class="cl">└──────────────────────────────────────────────────┘
</span></span><span class="line"><span class="cl"> │ │
</span></span><span class="line"><span class="cl"> ▼ ▼
</span></span><span class="line"><span class="cl"> Direct Direct
</span></span><span class="line"><span class="cl"> Function Function
</span></span><span class="line"><span class="cl"> Call Call
</span></span></code></pre></div><p><strong>Benefits of Unified Binary:</strong></p>
<p>✅ <strong>Simplified Distribution</strong>: One binary, one version, one deployment
✅ <strong>Faster Startup</strong>: <5ms overhead (vs. 50-100ms with subprocess)
✅ <strong>Reduced Memory</strong>: Single process, ~40-60% memory savings
✅ <strong>Simpler Errors</strong>: Direct function calls, no cross-process complexity
✅ <strong>Better Testing</strong>: Direct function invocation in tests</p>
<hr>
<h3 id="technical-implementation" class="position-relative d-flex align-items-center group">
<span>Technical Implementation</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="technical-implementation"
aria-haspopup="dialog"
aria-label="Share link: Technical Implementation">
<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="unified-binary-entry-point" class="position-relative d-flex align-items-center group">
<span>Unified Binary Entry Point</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="unified-binary-entry-point"
aria-haspopup="dialog"
aria-label="Share link: Unified Binary Entry Point">
<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>File:</strong> <code>src/cli/main.zig</code></p>
<p>The unified binary uses a single entry point with command dispatch:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">gpa</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">heap</span><span class="p">.</span><span class="n">GeneralPurposeAllocator</span><span class="p">(.{}){};</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gpa</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gpa</span><span class="p">.</span><span class="n">allocator</span><span class="p">();</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="c1">// Parse command-line arguments
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">process</span><span class="p">.</span><span class="n">argsAlloc</span><span class="p">(</span><span class="n">allocator</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">process</span><span class="p">.</span><span class="n">argsFree</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">);</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="c1">// Dispatch to appropriate command handler
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">len</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">printUsage</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">process</span><span class="p">.</span><span class="n">exit</span><span class="p">(</span><span class="nb">@intFromEnum</span><span class="p">(</span><span class="n">ExitCode</span><span class="p">.</span><span class="n">usage_error</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</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="kr">const</span><span class="w"> </span><span class="n">command</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">];</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="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">eql</span><span class="p">(</span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">command</span><span class="p">,</span><span class="w"> </span><span class="s">"serve"</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">cmdServe</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">eql</span><span class="p">(</span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">command</span><span class="p">,</span><span class="w"> </span><span class="s">"query"</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">cmdQuery</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">eql</span><span class="p">(</span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">command</span><span class="p">,</span><span class="w"> </span><span class="s">"shell"</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">cmdShell</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">printUsage</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">process</span><span class="p">.</span><span class="n">exit</span><span class="p">(</span><span class="nb">@intFromEnum</span><span class="p">(</span><span class="n">ExitCode</span><span class="p">.</span><span class="n">usage_error</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="server-command-direct-execution" class="position-relative d-flex align-items-center group">
<span>Server Command: Direct Execution</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-command-direct-execution"
aria-haspopup="dialog"
aria-label="Share link: Server Command: Direct Execution">
<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>Before (Subprocess Approach):</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// OLD: Subprocess spawning (eliminated)
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">fn</span><span class="w"> </span><span class="n">runEmbeddedServer</span><span class="p">(</span><span class="n">ally</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">,</span><span class="w"> </span><span class="n">config</span><span class="o">:</span><span class="w"> </span><span class="n">ServerConfig</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Build argument array for subprocess
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">server_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">ArrayList</span><span class="p">([]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">).</span><span class="n">init</span><span class="p">(</span><span class="n">ally</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// ... build args for geoded binary
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Spawn geoded subprocess (ELIMINATED)
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">ChildProcess</span><span class="p">.</span><span class="n">exec</span><span class="p">(.{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ally</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">argv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">server_args</span><span class="p">.</span><span class="n">items</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">});</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="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">term</span><span class="p">.</span><span class="n">Exited</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p><strong>After (Direct Function Call):</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// NEW: Unified binary approach
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">fn</span><span class="w"> </span><span class="n">cmdServe</span><span class="p">(</span><span class="n">allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">,</span><span class="w"> </span><span class="n">argv</span><span class="o">:</span><span class="w"> </span><span class="p">[][</span><span class="o">:</span><span class="mi">0</span><span class="p">]</span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">start_idx</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Parse server configuration from arguments
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">start_idx</span><span class="p">;</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="c1">// Run the QUIC server directly (unified binary - no subprocess spawning)
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">startServer</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="n">argv</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p><strong>Key Difference:</strong> No subprocess creation—direct function invocation within the same process.</p>
<hr>
<h4 id="query-command-quic-client-execution" class="position-relative d-flex align-items-center group">
<span>Query Command: QUIC Client Execution</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="query-command-quic-client-execution"
aria-haspopup="dialog"
aria-label="Share link: Query Command: QUIC Client Execution">
<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>Before (Subprocess Approach):</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// OLD: Spawn geodec subprocess
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">fn</span><span class="w"> </span><span class="n">runQuery</span><span class="p">(</span><span class="n">ally</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">,</span><span class="w"> </span><span class="n">query</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="o">:</span><span class="w"> </span><span class="n">QueryOptions</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">client_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">ArrayList</span><span class="p">([]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">).</span><span class="n">init</span><span class="p">(</span><span class="n">ally</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">client_args</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="s">"geodec"</span><span class="p">);</span><span class="w"> </span><span class="c1">// Subprocess binary
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">client_args</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">query</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// ... add options
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">ChildProcess</span><span class="p">.</span><span class="n">exec</span><span class="p">(.{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ally</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">argv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client_args</span><span class="p">.</span><span class="n">items</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">});</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p><strong>After (Direct QUIC Execution):</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// NEW: Direct QUIC client execution
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">fn</span><span class="w"> </span><span class="n">cmdQuery</span><span class="p">(</span><span class="n">ally</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">,</span><span class="w"> </span><span class="n">argv</span><span class="o">:</span><span class="w"> </span><span class="p">[][</span><span class="o">:</span><span class="mi">0</span><span class="p">]</span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">start_idx</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Parse query options from arguments
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">argv</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">start_idx</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">server_addr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">parsed_server</span><span class="w"> </span><span class="k">orelse</span><span class="w"> </span><span class="s">"127.0.0.1:3141"</span><span class="p">;</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="c1">// Direct QUIC execution - no subprocess spawning
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">executeQuicQuery</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">ally</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">server_addr</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">parsed_query</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">format</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">insecure</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">timeout_secs</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">retry_count</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">user</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">password</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">ca_cert_path</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">client_cert_path</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">client_key_path</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><hr>
<h3 id="configuration-management" class="position-relative d-flex align-items-center group">
<span>Configuration 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="configuration-management"
aria-haspopup="dialog"
aria-label="Share link: Configuration 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>
<h4 id="serverconfig-structure" class="position-relative d-flex align-items-center group">
<span>ServerConfig Structure</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="serverconfig-structure"
aria-haspopup="dialog"
aria-label="Share link: ServerConfig Structure">
<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>The unified binary uses a centralized configuration structure:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="kr">const</span><span class="w"> </span><span class="n">ServerConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">data_dir</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">listen_quic</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">cert_path</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">key_path</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">log_level</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"info"</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">result_format_txt</span><span class="o">:</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">disable_estimates</span><span class="o">:</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">compact_profile</span><span class="o">:</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">memcurve_profile</span><span class="o">:</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">force_no_tls</span><span class="o">:</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">test_exit_after_first</span><span class="o">:</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w">
</span></span></span></code></pre></div><p><strong>Benefits:</strong></p>
<ul>
<li><strong>Type Safety</strong>: Compile-time type checking for all configuration options</li>
<li><strong>Defaults</strong>: Sensible defaults for optional parameters</li>
<li><strong>Documentation</strong>: Self-documenting configuration structure</li>
<li><strong>Validation</strong>: Easy to validate configuration before server start</li>
</ul>
<hr>
<h3 id="command-examples" class="position-relative d-flex align-items-center group">
<span>Command Examples</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="command-examples"
aria-haspopup="dialog"
aria-label="Share link: Command Examples">
<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-command" class="position-relative d-flex align-items-center group">
<span>Server Command</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-command"
aria-haspopup="dialog"
aria-label="Share link: Server Command">
<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>Start server with unified binary:</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"># Basic server start</span>
</span></span><span class="line"><span class="cl">geode serve --listen 0.0.0.0:3141 --data-dir /var/lib/geode
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># With custom TLS certificates</span>
</span></span><span class="line"><span class="cl">geode serve <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --listen 0.0.0.0:3141 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --cert-path /etc/geode/server.crt <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --key-path /etc/geode/server.key
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Development mode (debug logging)</span>
</span></span><span class="line"><span class="cl">geode serve --listen 127.0.0.1:3141 --log-level debug
</span></span></code></pre></div><p><strong>Server emits startup logs and listens on QUIC.</strong></p>
<h4 id="query-command" class="position-relative d-flex align-items-center group">
<span>Query Command</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="query-command"
aria-haspopup="dialog"
aria-label="Share link: Query Command">
<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>Execute queries with unified binary:</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"># Simple query (connects to default server)</span>
</span></span><span class="line"><span class="cl">geode query <span class="s2">"RETURN 1 AS test"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Query specific server</span>
</span></span><span class="line"><span class="cl">geode query <span class="s2">"MATCH (p:Person) RETURN p.name LIMIT 10"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --server 192.168.1.100:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Use --insecure for self-signed certificates (test/dev only)</span>
</span></span><span class="line"><span class="cl">geode query <span class="s2">"RETURN 1 AS test"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --server 127.0.0.1:3141 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --insecure
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># With authentication</span>
</span></span><span class="line"><span class="cl">geode query <span class="s2">"MATCH (p:Person) RETURN count(p)"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --server 192.168.1.100:3141 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --user admin <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --password secret123
</span></span></code></pre></div><p><strong>Output:</strong> SCHEMA + BINDINGS frames over the Protobuf wire protocol (rendered as JSON or text by the CLI formatter).</p>
<h4 id="shell-command" class="position-relative d-flex align-items-center group">
<span>Shell Command</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="shell-command"
aria-haspopup="dialog"
aria-label="Share link: Shell Command">
<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>Interactive REPL:</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"># Start interactive shell</span>
</span></span><span class="line"><span class="cl">geode shell --server 127.0.0.1:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># With authentication</span>
</span></span><span class="line"><span class="cl">geode shell --server 127.0.0.1:3141 --user admin
</span></span></code></pre></div><hr>
<h3 id="error-handling" class="position-relative d-flex align-items-center group">
<span>Error Handling</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="error-handling"
aria-haspopup="dialog"
aria-label="Share link: Error Handling">
<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="exit-code-management" class="position-relative d-flex align-items-center group">
<span>Exit Code 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="exit-code-management"
aria-haspopup="dialog"
aria-label="Share link: Exit Code 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>
</h4><p>The unified binary uses consistent exit codes across all commands:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">ExitCode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">enum</span><span class="p">(</span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">success</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">general_error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">usage_error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">auth_error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="error-response-examples" class="position-relative d-flex align-items-center group">
<span>Error Response Examples</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="error-response-examples"
aria-haspopup="dialog"
aria-label="Share link: Error Response Examples">
<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>Usage Error:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode query
</span></span><span class="line"><span class="cl"><span class="c1"># Exit code: 2 (usage_error)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Output: Error: query text required</span>
</span></span></code></pre></div><p><strong>Authentication Error:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode query <span class="s2">"RETURN 1"</span> --server 192.168.1.100:3141 --user admin --password wrong
</span></span><span class="line"><span class="cl"><span class="c1"># Exit code: 3 (auth_error)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Output: Error: Authentication failed</span>
</span></span></code></pre></div><p><strong>Success:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode query <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141
</span></span><span class="line"><span class="cl"><span class="c1"># Exit code: 0 (success)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Output: SCHEMA and BINDINGS frames from the server (rendered by the CLI formatter)</span>
</span></span></code></pre></div><hr>
<h3 id="tls-validation" class="position-relative d-flex align-items-center group">
<span>TLS Validation</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="tls-validation"
aria-haspopup="dialog"
aria-label="Share link: TLS Validation">
<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="--insecure-flag-support" class="position-relative d-flex align-items-center group">
<span>&ndash;insecure Flag 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="--insecure-flag-support"
aria-haspopup="dialog"
aria-label="Share link: insecure Flag 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>The <code>--insecure</code> flag disables TLS certificate verification for QUIC connections. <strong>Use only for self-signed certificates or test environments.</strong></p>
<p><strong>When to Use <code>--insecure</code>:</strong></p>
<p>✅ <strong>Development/Testing</strong>: Self-signed certificates in local testing
✅ <strong>Internal Networks</strong>: Self-signed certs in trusted internal networks
❌ <strong>Production</strong>: Never use in production with untrusted networks</p>
<p><strong>Example:</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"># Self-signed certificate in development</span>
</span></span><span class="line"><span class="cl">geode query <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141 --insecure
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Production (proper certificates)</span>
</span></span><span class="line"><span class="cl">geode query <span class="s2">"RETURN 1"</span> --server prod.geodedb.com:3141
</span></span></code></pre></div><p><strong>Important:</strong> <code>--insecure</code> does not disable QUIC or provide offline mode—it only disables certificate validation.</p>
<hr>
<h3 id="performance-characteristics" class="position-relative d-flex align-items-center group">
<span>Performance Characteristics</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-characteristics"
aria-haspopup="dialog"
aria-label="Share link: Performance Characteristics">
<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="subprocess-elimination-benefits" class="position-relative d-flex align-items-center group">
<span>Subprocess Elimination Benefits</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="subprocess-elimination-benefits"
aria-haspopup="dialog"
aria-label="Share link: Subprocess Elimination Benefits">
<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>Metric</th>
<th>Before (Subprocess)</th>
<th>After (Unified Binary)</th>
<th>Improvement</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Binary Count</strong></td>
<td>3 (geode, geoded, geodec)</td>
<td>1 (geode)</td>
<td>66% reduction</td>
</tr>
<tr>
<td><strong>Startup Time</strong></td>
<td>~50-100ms</td>
<td>~1-5ms</td>
<td><strong>10-50x faster</strong></td>
</tr>
<tr>
<td><strong>Memory Usage</strong></td>
<td>Multiple process overhead</td>
<td>Single process</td>
<td><strong>40-60% reduction</strong></td>
</tr>
<tr>
<td><strong>Deployment Complexity</strong></td>
<td>Multiple binaries</td>
<td>Single binary</td>
<td><strong>Simplified</strong></td>
</tr>
<tr>
<td><strong>Error Handling</strong></td>
<td>Cross-process complexity</td>
<td>Direct function calls</td>
<td><strong>Simplified</strong></td>
</tr>
</tbody>
</table>
<h4 id="command-performance" class="position-relative d-flex align-items-center group">
<span>Command Performance</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="command-performance"
aria-haspopup="dialog"
aria-label="Share link: Command Performance">
<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>Help Commands</strong>: <1ms response time</li>
<li><strong>Configuration Parsing</strong>: <1ms overhead</li>
<li><strong>Query Execution</strong>: <5ms overhead beyond server response time (no subprocess)</li>
<li><strong>Error Handling</strong>: Immediate response with proper exit codes</li>
</ul>
<hr>
<h3 id="deployment-benefits" class="position-relative d-flex align-items-center group">
<span>Deployment Benefits</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="deployment-benefits"
aria-haspopup="dialog"
aria-label="Share link: Deployment Benefits">
<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="before-multiple-binaries" class="position-relative d-flex align-items-center group">
<span>Before: Multiple Binaries</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="before-multiple-binaries"
aria-haspopup="dialog"
aria-label="Share link: Before: Multiple Binaries">
<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>Deployment Structure:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">deployment/
</span></span><span class="line"><span class="cl">├── geode (CLI binary)
</span></span><span class="line"><span class="cl">├── geoded (Server binary)
</span></span><span class="line"><span class="cl">├── geodec (Client binary)
</span></span><span class="line"><span class="cl">└── config/
</span></span></code></pre></div><p><strong>Challenges:</strong></p>
<ul>
<li>Track and update three separate binaries</li>
<li>Ensure version compatibility between binaries</li>
<li>Larger disk usage (~3x single binary size)</li>
<li>Complex update procedures</li>
</ul>
<h4 id="after-unified-binary" class="position-relative d-flex align-items-center group">
<span>After: Unified Binary</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="after-unified-binary"
aria-haspopup="dialog"
aria-label="Share link: After: Unified Binary">
<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>Deployment Structure:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">deployment/
</span></span><span class="line"><span class="cl">├── geode (Unified binary)
</span></span><span class="line"><span class="cl">└── config/
</span></span></code></pre></div><p><strong>Advantages:</strong></p>
<p>✅ <strong>Simpler Distribution</strong>: One binary to distribute
✅ <strong>Reduced Storage</strong>: Lower disk usage
✅ <strong>Easier Updates</strong>: Single binary to update
✅ <strong>Consistent Versioning</strong>: All functionality in one version
✅ <strong>Container Benefits</strong>: Smaller container images</p>
<hr>
<h3 id="migration-guide" class="position-relative d-flex align-items-center group">
<span>Migration Guide</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-guide"
aria-haspopup="dialog"
aria-label="Share link: Migration Guide">
<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="for-existing-deployments" class="position-relative d-flex align-items-center group">
<span>For Existing Deployments</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="for-existing-deployments"
aria-haspopup="dialog"
aria-label="Share link: For Existing Deployments">
<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>Command Migration:</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"># OLD: Separate binaries</span>
</span></span><span class="line"><span class="cl">./geoded --listen 0.0.0.0:3141
</span></span><span class="line"><span class="cl">./geodec <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># NEW: Unified binary</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">./geode query <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141
</span></span></code></pre></div><p><strong>Script Updates:</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"># OLD: Script calling separate binaries</span>
</span></span><span class="line"><span class="cl"><span class="c1">#!/bin/bash</span>
</span></span><span class="line"><span class="cl">./geoded --data-dir /data <span class="p">&</span>
</span></span><span class="line"><span class="cl">./geodec <span class="s2">"MATCH (n) RETURN count(n)"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># NEW: Script using unified binary</span>
</span></span><span class="line"><span class="cl"><span class="c1">#!/bin/bash</span>
</span></span><span class="line"><span class="cl">./geode serve --data-dir /data <span class="p">&</span>
</span></span><span class="line"><span class="cl">./geode query <span class="s2">"MATCH (n) RETURN count(n)"</span>
</span></span></code></pre></div><p><strong>Systemd Service Files:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="c1"># OLD: Separate service for geoded</span>
</span></span><span class="line"><span class="cl"><span class="k">[Service]</span>
</span></span><span class="line"><span class="cl"><span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/bin/geoded --listen 0.0.0.0:3141</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># NEW: Unified binary service</span>
</span></span><span class="line"><span class="cl"><span class="k">[Service]</span>
</span></span><span class="line"><span class="cl"><span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/bin/geode serve --listen 0.0.0.0:3141</span>
</span></span></code></pre></div>
<h4 id="for-test-scripts" class="position-relative d-flex align-items-center group">
<span>For Test Scripts</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="for-test-scripts"
aria-haspopup="dialog"
aria-label="Share link: For Test Scripts">
<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>Test Integration:</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"># OLD: Test using separate binaries</span>
</span></span><span class="line"><span class="cl">./geodec <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141 --insecure
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># NEW: Test using unified binary (same command works)</span>
</span></span><span class="line"><span class="cl">./geode query <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141 --insecure
</span></span></code></pre></div><p><strong>No API Changes</strong>: All command-line flags and options remain the same.</p>
<hr>
<h3 id="testing" class="position-relative d-flex align-items-center group">
<span>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="testing"
aria-haspopup="dialog"
aria-label="Share link: 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>
</h3>
<h4 id="unit-tests" class="position-relative d-flex align-items-center group">
<span>Unit Tests</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="unit-tests"
aria-haspopup="dialog"
aria-label="Share link: Unit Tests">
<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>Test File:</strong> <code>tests/test_cli_subprocess_elimination.zig</code></p>
<p><strong>Test Coverage:</strong></p>
<ul>
<li>CLI unified binary architecture validation</li>
<li>ServerConfig structure testing and query argument handling</li>
<li>Exit code management verification</li>
<li>Command handler function signature compatibility</li>
<li>Memory management for configuration structures</li>
<li>No subprocess-related imports validation</li>
</ul>
<h4 id="integration-tests" class="position-relative d-flex align-items-center group">
<span>Integration Tests</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="integration-tests"
aria-haspopup="dialog"
aria-label="Share link: Integration Tests">
<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>Test File:</strong> <code>tests/test_cli_subprocess_elimination_integration_minimal.zig</code></p>
<p><strong>Test Coverage:</strong></p>
<ul>
<li>CLI unified binary imports work correctly</li>
<li>Server configuration for unified binary operation</li>
<li>Client configuration for unified binary operation</li>
<li>Exit codes are properly defined</li>
<li>Command handler type supports unified binary</li>
</ul>
<h4 id="manual-testing-commands" class="position-relative d-flex align-items-center group">
<span>Manual Testing Commands</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="manual-testing-commands"
aria-haspopup="dialog"
aria-label="Share link: Manual Testing Commands">
<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"># Test basic CLI functionality</span>
</span></span><span class="line"><span class="cl">./zig-out/bin/geode --help <span class="c1"># ✅ Shows help</span>
</span></span><span class="line"><span class="cl">./zig-out/bin/geode serve --help <span class="c1"># ✅ Shows server options</span>
</span></span><span class="line"><span class="cl">./zig-out/bin/geode query --help <span class="c1"># ✅ Shows query options</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Test unified binary operation (QUIC)</span>
</span></span><span class="line"><span class="cl">./zig-out/bin/geode query <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141 <span class="c1"># ✅ JSON output</span>
</span></span><span class="line"><span class="cl">./zig-out/bin/geode shell --help <span class="c1"># ✅ Shows shell options</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Verify no subprocess spawning</span>
</span></span><span class="line"><span class="cl"><span class="c1"># All commands execute within single process - no geoded/geodec spawning</span>
</span></span></code></pre></div><hr>
<h3 id="integration-points" class="position-relative d-flex align-items-center group">
<span>Integration Points</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="integration-points"
aria-haspopup="dialog"
aria-label="Share link: Integration Points">
<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="build-system-integration" class="position-relative d-flex align-items-center group">
<span>Build System Integration</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="build-system-integration"
aria-haspopup="dialog"
aria-label="Share link: Build System Integration">
<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>Build Configuration:</strong></p>
<ul>
<li>Single binary target: <code>geode</code></li>
<li>No separate <code>geoded</code>/<code>geodec</code> targets required</li>
<li>Simplified build dependencies</li>
<li>Unified binary distribution</li>
</ul>
<p><strong>Module Integration:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// Direct imports instead of subprocess calls
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span><span class="w"> </span><span class="n">ServerMain</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">"../server/main.zig"</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">const</span><span class="w"> </span><span class="n">ClientMain</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">"../client/main.zig"</span><span class="p">);</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="c1">// Future enhancement: Direct function calls to main functions
</span></span></span><span class="line"><span class="cl"><span class="c1">// try ServerMain.main();
</span></span></span><span class="line"><span class="cl"><span class="c1">// try ClientMain.main();
</span></span></span></code></pre></div><hr>
<h3 id="troubleshooting" class="position-relative d-flex align-items-center group">
<span>Troubleshooting</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"
aria-haspopup="dialog"
aria-label="Share link: Troubleshooting">
<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="legacy-binary-dependencies" class="position-relative d-flex align-items-center group">
<span>Legacy Binary Dependencies</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="legacy-binary-dependencies"
aria-haspopup="dialog"
aria-label="Share link: Legacy Binary Dependencies">
<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>Issue:</strong> Scripts still calling old binaries.</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"># Error: command not found</span>
</span></span><span class="line"><span class="cl">./geoded --help
</span></span></code></pre></div><p><strong>Solution:</strong> Update to unified binary.</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"># Correct command</span>
</span></span><span class="line"><span class="cl">./geode serve --help
</span></span></code></pre></div>
<h4 id="test-compatibility" class="position-relative d-flex align-items-center group">
<span>Test 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="test-compatibility"
aria-haspopup="dialog"
aria-label="Share link: Test 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><strong>Issue:</strong> Tests expecting old binary behavior.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./geodec <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141 --insecure
</span></span></code></pre></div><p><strong>Solution:</strong> Use unified binary with same flags.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./geode query <span class="s2">"RETURN 1"</span> --server 127.0.0.1:3141 --insecure
</span></span></code></pre></div>
<h4 id="configuration-migration" class="position-relative d-flex align-items-center group">
<span>Configuration 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="configuration-migration"
aria-haspopup="dialog"
aria-label="Share link: Configuration 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>
</h4><p><strong>Issue:</strong> Old configuration files referencing separate binaries.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="na">server_binary</span><span class="o">=</span><span class="s">/usr/bin/geoded</span>
</span></span><span class="line"><span class="cl"><span class="na">client_binary</span><span class="o">=</span><span class="s">/usr/bin/geodec</span>
</span></span></code></pre></div><p><strong>Solution:</strong> Update to unified binary.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="na">geode_binary</span><span class="o">=</span><span class="s">/usr/bin/geode</span>
</span></span><span class="line"><span class="cl"><span class="na">server_command</span><span class="o">=</span><span class="s">"$geode_binary serve"</span>
</span></span><span class="line"><span class="cl"><span class="na">client_command</span><span class="o">=</span><span class="s">"$geode_binary query"</span>
</span></span></code></pre></div><hr>
<h3 id="future-enhancements" class="position-relative d-flex align-items-center group">
<span>Future Enhancements</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="future-enhancements"
aria-haspopup="dialog"
aria-label="Share link: Future Enhancements">
<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="planned-improvements" class="position-relative d-flex align-items-center group">
<span>Planned Improvements</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="planned-improvements"
aria-haspopup="dialog"
aria-label="Share link: Planned Improvements">
<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>Phase 1: ✅ Complete</strong> - Subprocess elimination with direct execution</p>
<p><strong>Phase 2: Direct Function Integration</strong></p>
<ul>
<li>Call server/client main functions directly instead of <code>process.exit()</code></li>
<li>Improved testability with function-level mocking</li>
<li>Better error propagation without exit codes</li>
</ul>
<p><strong>Phase 3: Advanced Configuration</strong></p>
<ul>
<li>Unified configuration management across all commands</li>
<li>Configuration file support (YAML/TOML)</li>
<li>Environment variable integration</li>
</ul>
<p><strong>Phase 4: Plugin Architecture</strong></p>
<ul>
<li>Support for command plugins in unified binary</li>
<li>Dynamic command registration</li>
<li>Third-party command extensions</li>
</ul>
<hr>
<h3 id="architecture-roadmap" class="position-relative d-flex align-items-center group">
<span>Architecture Roadmap</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="architecture-roadmap"
aria-haspopup="dialog"
aria-label="Share link: Architecture Roadmap">
<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><table>
<thead>
<tr>
<th>Phase</th>
<th>Status</th>
<th>Description</th>
<th>Target Date</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Phase 1</strong></td>
<td>✅ Complete</td>
<td>Subprocess elimination with simulation</td>
<td>October 2025</td>
</tr>
<tr>
<td><strong>Phase 2</strong></td>
<td>Planned</td>
<td>Direct function call integration</td>
<td>Q2 2026</td>
</tr>
<tr>
<td><strong>Phase 3</strong></td>
<td>Planned</td>
<td>Advanced unified configuration</td>
<td>Q3 2026</td>
</tr>
<tr>
<td><strong>Phase 4</strong></td>
<td>Planned</td>
<td>Plugin support</td>
<td>Q4 2026</td>
</tr>
</tbody>
</table>
<hr>
<h3 id="canary-compliance" class="position-relative d-flex align-items-center group">
<span>CANARY 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="canary-compliance"
aria-haspopup="dialog"
aria-label="Share link: CANARY 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>
</h3><p>All CLI subprocess elimination implementations include proper CANARY governance tracking:</p>
<ul>
<li>✅ <strong>REQ-CLI-SUBPROCESS-ELIMINATION-001</strong>: Core subprocess elimination functionality</li>
<li>✅ <strong>REQ-CLI-SUBPROCESS-ELIMINATION-002</strong>: Unified binary architecture implementation</li>
<li>✅ <strong>REQ-CLI-SUBPROCESS-ELIMINATION-003</strong>: Test compatibility and integration</li>
</ul>
<hr>
<h3 id="quick-reference" class="position-relative d-flex align-items-center group">
<span>Quick Reference</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="quick-reference"
aria-haspopup="dialog"
aria-label="Share link: Quick Reference">
<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="command-summary" class="position-relative d-flex align-items-center group">
<span>Command Summary</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="command-summary"
aria-haspopup="dialog"
aria-label="Share link: Command Summary">
<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>Command</th>
<th>Purpose</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>geode serve</code></td>
<td>Start QUIC server</td>
<td><code>geode serve --listen 0.0.0.0:3141</code></td>
</tr>
<tr>
<td><code>geode query</code></td>
<td>Execute query</td>
<td><code>geode query "RETURN 1"</code></td>
</tr>
<tr>
<td><code>geode shell</code></td>
<td>Interactive REPL</td>
<td><code>geode shell --server 127.0.0.1:3141</code></td>
</tr>
<tr>
<td><code>geode --help</code></td>
<td>Show help</td>
<td><code>geode --help</code></td>
</tr>
</tbody>
</table>
<h4 id="common-options" class="position-relative d-flex align-items-center group">
<span>Common Options</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="common-options"
aria-haspopup="dialog"
aria-label="Share link: Common Options">
<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>Option</th>
<th>Commands</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>--server <addr></code></td>
<td>query, shell</td>
<td>Server address (default: 127.0.0.1:3141)</td>
</tr>
<tr>
<td><code>--listen <addr></code></td>
<td>serve</td>
<td>Listen address</td>
</tr>
<tr>
<td><code>--data-dir <path></code></td>
<td>serve</td>
<td>Data directory path</td>
</tr>
<tr>
<td><code>--insecure</code></td>
<td>query, shell</td>
<td>Disable TLS verification (dev/test only)</td>
</tr>
<tr>
<td><code>--user <name></code></td>
<td>query, shell</td>
<td>Authentication username</td>
</tr>
<tr>
<td><code>--password <pw></code></td>
<td>query, shell</td>
<td>Authentication password</td>
</tr>
</tbody>
</table>
<hr>
<h3 id="next-steps" class="position-relative d-flex align-items-center group">
<span>Next Steps</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="next-steps"
aria-haspopup="dialog"
aria-label="Share link: Next Steps">
<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><strong><a
href="/docs/configuration/server-configuration/"
>Configuration Guide</a>
</strong> - Server configuration options</li>
<li><strong><a
href="/docs/deployment/deployment-patterns/"
>Deployment Patterns</a>
</strong> - Production deployment strategies</li>
<li><strong><a
href="/docs/query/performance-tuning/"
>Performance Tuning</a>
</strong> - Optimize query execution</li>
<li><strong><a
href="/docs/guides/troubleshooting/"
>Troubleshooting</a>
</strong> - Solve common CLI issues</li>
</ul>
<hr>
<h3 id="related-documentation" class="position-relative d-flex align-items-center group">
<span>Related Documentation</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-documentation"
aria-haspopup="dialog"
aria-label="Share link: Related Documentation">
<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><a
href="/docs/development/repl-advanced/"
>REPL Advanced Features</a>
- Interactive shell capabilities</li>
<li><a
href="/docs/architecture/query-execution/"
>Query Execution Architecture</a>
- How queries are processed</li>
<li><a
href="/docs/ops/docker-deployment/"
>Docker Deployment</a>
- Container deployment</li>
<li><a
href="/docs/development/testing-guide/"
>Testing Guide</a>
- CLI testing strategies</li>
</ul>
<hr>
<p><strong>Last Updated:</strong> January 24, 2026
<strong>Geode Version:</strong> <strong>v0.2.18</strong>+
<strong>Architecture Status:</strong> Unified Binary v1.0 (Production Ready)</p>
CLI Architecture and Unified Binary Design
Learn about Geode's unified binary architecture that eliminates subprocess spawning for improved performance, simplified deployment, and streamlined CLI operations.