<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-28 --> <p>Visual Studio Code is one of the most popular code editors for modern development, and the Geode GQL extension brings first-class graph database development support to VS Code. The extension provides comprehensive Language Server Protocol (LSP) integration, enabling intelligent auto-completion, real-time diagnostics, query execution, result visualization, and debugging capabilities directly within the editor.</p> <p>Whether you are writing complex graph traversal queries, exploring database schemas, or debugging performance issues, the Geode VS Code extension transforms your editor into a powerful graph database development environment with the productivity features developers expect from modern tooling.</p> <p>This guide covers installation, configuration, features, keyboard shortcuts, customization options, and best practices for productive GQL development in VS Code.</p> <h3 id="installation" class="position-relative d-flex align-items-center group"> <span>Installation</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="installation" aria-haspopup="dialog" aria-label="Share link: Installation"> <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> <h4 id="from-vs-code-marketplace" class="position-relative d-flex align-items-center group"> <span>From VS Code Marketplace</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="from-vs-code-marketplace" aria-haspopup="dialog" aria-label="Share link: From VS Code Marketplace"> <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>Install the extension directly from the VS Code Marketplace:</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"># Install via command line</span> </span></span><span class="line"><span class="cl">code --install-extension geodedb.geode-gql </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Or search in VS Code</span> </span></span><span class="line"><span class="cl"><span class="c1"># 1. Open VS Code</span> </span></span><span class="line"><span class="cl"><span class="c1"># 2. Press Ctrl+Shift+X (Cmd+Shift+X on macOS)</span> </span></span><span class="line"><span class="cl"><span class="c1"># 3. Search for &#34;Geode GQL&#34;</span> </span></span><span class="line"><span class="cl"><span class="c1"># 4. Click Install</span> </span></span></code></pre></div> <h4 id="manual-installation-from-vsix" class="position-relative d-flex align-items-center group"> <span>Manual Installation from VSIX</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-installation-from-vsix" aria-haspopup="dialog" aria-label="Share link: Manual Installation from VSIX"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>For offline installation or development builds:</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"># Download the VSIX file</span> </span></span><span class="line"><span class="cl">curl -LO https://releases.geodedb.com/vscode/geode-gql-1.0.0.vsix </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Install from VSIX</span> </span></span><span class="line"><span class="cl">code --install-extension geode-gql-1.0.0.vsix </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Or in VS Code: Extensions → ... → Install from VSIX</span> </span></span></code></pre></div> <h4 id="prerequisites" class="position-relative d-flex align-items-center group"> <span>Prerequisites</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="prerequisites" aria-haspopup="dialog" aria-label="Share link: Prerequisites"> <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 extension requires:</p> <ul> <li><strong>VS Code 1.85.0</strong> or later</li> <li><strong>Geode CLI</strong> installed and accessible in PATH</li> <li><strong>Running Geode server</strong> for query execution and schema introspection</li> </ul> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Verify Geode installation</span> </span></span><span class="line"><span class="cl">geode --version </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Start Geode server</span> </span></span><span class="line"><span class="cl">geode serve --listen 0.0.0.0:3141 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify connectivity</span> </span></span><span class="line"><span class="cl">geode shell </span></span><span class="line"><span class="cl">geode&gt; RETURN <span class="s1">&#39;Hello, Geode!&#39;</span><span class="p">;</span> </span></span></code></pre></div> <h3 id="configuration" class="position-relative d-flex align-items-center group"> <span>Configuration</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" aria-haspopup="dialog" aria-label="Share link: Configuration"> <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="extension-settings" class="position-relative d-flex align-items-center group"> <span>Extension Settings</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="extension-settings" aria-haspopup="dialog" aria-label="Share link: Extension Settings"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Configure the extension in VS Code settings (<code>settings.json</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Server connection </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nt">&#34;geode.serverPath&#34;</span><span class="p">:</span> <span class="s2">&#34;/usr/local/bin/geode&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.connectionString&#34;</span><span class="p">:</span> <span class="s2">&#34;quic://localhost:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.defaultDatabase&#34;</span><span class="p">:</span> <span class="s2">&#34;default&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.username&#34;</span><span class="p">:</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.password&#34;</span><span class="p">:</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Language Server </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nt">&#34;geode.lsp.enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.lsp.logLevel&#34;</span><span class="p">:</span> <span class="s2">&#34;info&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.lsp.logFile&#34;</span><span class="p">:</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Diagnostics </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nt">&#34;geode.diagnostics.enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.maxProblems&#34;</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.debounceMs&#34;</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.validateProperties&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.validateLabels&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Formatting </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nt">&#34;geode.formatting.enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.formatting.formatOnSave&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.formatting.keywordCase&#34;</span><span class="p">:</span> <span class="s2">&#34;UPPER&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.formatting.indentSize&#34;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.formatting.maxLineLength&#34;</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.formatting.alignClauses&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Query execution </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nt">&#34;geode.execution.timeout&#34;</span><span class="p">:</span> <span class="mi">30000</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.execution.maxRows&#34;</span><span class="p">:</span> <span class="mi">1000</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.execution.autoCommit&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Visualization </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nt">&#34;geode.visualization.defaultView&#34;</span><span class="p">:</span> <span class="s2">&#34;table&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.visualization.graphLayout&#34;</span><span class="p">:</span> <span class="s2">&#34;force-directed&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.visualization.maxNodes&#34;</span><span class="p">:</span> <span class="mi">500</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Editor </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nt">&#34;geode.editor.suggestLabels&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.editor.suggestProperties&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.editor.suggestFunctions&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.editor.showHints&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="workspace-configuration" class="position-relative d-flex align-items-center group"> <span>Workspace Configuration</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="workspace-configuration" aria-haspopup="dialog" aria-label="Share link: Workspace Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Create workspace-specific settings for different projects:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="c1">// .vscode/settings.json </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.connectionString&#34;</span><span class="p">:</span> <span class="s2">&#34;quic://dev-server:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.defaultDatabase&#34;</span><span class="p">:</span> <span class="s2">&#34;project_db&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;[gql]&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;editor.formatOnSave&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;editor.tabSize&#34;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;editor.insertSpaces&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="environment-specific-connections" class="position-relative d-flex align-items-center group"> <span>Environment-Specific Connections</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="environment-specific-connections" aria-haspopup="dialog" aria-label="Share link: Environment-Specific Connections"> <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>Use VS Code profiles or workspace settings for different environments:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="c1">// Development </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.connectionString&#34;</span><span class="p">:</span> <span class="s2">&#34;quic://localhost:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.defaultDatabase&#34;</span><span class="p">:</span> <span class="s2">&#34;dev&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Staging </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.connectionString&#34;</span><span class="p">:</span> <span class="s2">&#34;quic://staging.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.defaultDatabase&#34;</span><span class="p">:</span> <span class="s2">&#34;staging&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Production (read-only) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.connectionString&#34;</span><span class="p">:</span> <span class="s2">&#34;quic://prod.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.defaultDatabase&#34;</span><span class="p">:</span> <span class="s2">&#34;production&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.execution.readOnly&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h3 id="features" class="position-relative d-flex align-items-center group"> <span>Features</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="features" aria-haspopup="dialog" aria-label="Share link: Features"> <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="syntax-highlighting" class="position-relative d-flex align-items-center group"> <span>Syntax Highlighting</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="syntax-highlighting" aria-haspopup="dialog" aria-label="Share link: Syntax Highlighting"> <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 extension provides context-aware syntax highlighting for GQL:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Keywords</span><span class="w"> </span><span class="py">highlighted</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">purple</span><span class="err">/</span><span class="py">blue</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="err">&#39;</span><span class="py">2024</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">friend_name</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">mutual_count</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">GROUP</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">mutual_count</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Labels</span><span class="w"> </span><span class="py">highlighted</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">orange</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">:</span><span class="nc">Featured</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="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">Premium</span><span class="w"> </span><span class="py">Widget</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">price</span><span class="p">:</span><span class="w"> </span><span class="nc">99</span><span class="mf">.99</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">category</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">Electronics</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Functions</span><span class="w"> </span><span class="py">highlighted</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">yellow</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">UPPER</span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">name_upper</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COALESCE</span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">nickname</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">display_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DURATION</span><span class="err">.</span><span class="py">between</span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="p">,</span><span class="w"> </span><span class="py">datetime</span><span class="p">())</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">account_age</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="intelligent-auto-completion" class="position-relative d-flex align-items-center group"> <span>Intelligent Auto-Completion</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="intelligent-auto-completion" aria-haspopup="dialog" aria-label="Share link: Intelligent Auto-Completion"> <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>Context-aware suggestions as you type:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;MATCH (u:&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Suggestions</span><span class="p">:</span><span class="w"> </span><span class="nc">All</span><span class="w"> </span><span class="py">labels</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span><span class="p">(</span><span class="py">User</span><span class="p">,</span><span class="w"> </span><span class="py">Product</span><span class="p">,</span><span class="w"> </span><span class="py">Order</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</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="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;WHERE u.&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Suggestions</span><span class="p">:</span><span class="w"> </span><span class="nc">All</span><span class="w"> </span><span class="py">properties</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="p">(</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</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="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;RETURN UPPER(&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Suggestions</span><span class="p">:</span><span class="w"> </span><span class="nc">Function</span><span class="w"> </span><span class="py">signature</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">parameter</span><span class="w"> </span><span class="py">hints</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;-[:&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Suggestions</span><span class="p">:</span><span class="w"> </span><span class="nc">All</span><span class="w"> </span><span class="py">relationship</span><span class="w"> </span><span class="kd">type</span><span class="nc">s</span><span class="w"> </span><span class="p">(</span><span class="py">FOLLOWS</span><span class="p">,</span><span class="w"> </span><span class="py">PURCHASED</span><span class="p">,</span><span class="w"> </span><span class="py">VIEWED</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Completion Categories</strong>:</p> <ul> <li><strong>Keywords</strong>: MATCH, WHERE, RETURN, CREATE, DELETE, SET, etc.</li> <li><strong>Labels</strong>: All labels discovered from schema introspection</li> <li><strong>Properties</strong>: Properties available on the current label context</li> <li><strong>Functions</strong>: All GQL functions with signatures and documentation</li> <li><strong>Variables</strong>: Variables bound earlier in the query</li> <li><strong>Relationship Types</strong>: All relationship types from schema</li> </ul> <h4 id="real-time-diagnostics" class="position-relative d-flex align-items-center group"> <span>Real-Time Diagnostics</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="real-time-diagnostics" aria-haspopup="dialog" aria-label="Share link: Real-Time Diagnostics"> <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>Errors and warnings appear as you type:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Syntax</span><span class="w"> </span><span class="py">Error</span><span class="w"> </span><span class="p">(</span><span class="py">red</span><span class="w"> </span><span class="py">squiggly</span><span class="w"> </span><span class="py">underline</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHER</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">test</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Error</span><span class="p">:</span><span class="w"> </span><span class="nc">Expected</span><span class="w"> </span><span class="py">WHERE</span><span class="p">,</span><span class="w"> </span><span class="py">got</span><span class="w"> </span><span class="py">WHER</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Unknown</span><span class="w"> </span><span class="py">Label</span><span class="w"> </span><span class="py">Warning</span><span class="w"> </span><span class="p">(</span><span class="py">yellow</span><span class="w"> </span><span class="py">squiggly</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">UnknownLabel</span><span class="p">)</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Warning</span><span class="p">:</span><span class="w"> </span><span class="nc">Label</span><span class="w"> </span><span class="err">&#39;</span><span class="py">UnknownLabel</span><span class="err">&#39;</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">found</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Property</span><span class="w"> </span><span class="py">Warning</span><span class="w"> </span><span class="p">(</span><span class="py">yellow</span><span class="w"> </span><span class="py">squiggly</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">nonexistent_property</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">value</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Warning</span><span class="p">:</span><span class="w"> </span><span class="nc">Property</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Type</span><span class="w"> </span><span class="py">Error</span><span class="w"> </span><span class="p">(</span><span class="py">red</span><span class="w"> </span><span class="py">squiggly</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="err">&#39;</span><span class="py">string</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Error</span><span class="p">:</span><span class="w"> </span><span class="nc">Cannot</span><span class="w"> </span><span class="py">add</span><span class="w"> </span><span class="py">Integer</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">String</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Unused</span><span class="w"> </span><span class="py">Variable</span><span class="w"> </span><span class="py">Warning</span><span class="w"> </span><span class="p">(</span><span class="py">gray</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Warning</span><span class="p">:</span><span class="w"> </span><span class="nc">Variable</span><span class="w"> </span><span class="err">&#39;</span><span class="py">p</span><span class="err">&#39;</span><span class="w"> </span><span class="py">declared</span><span class="w"> </span><span class="py">but</span><span class="w"> </span><span class="py">never</span><span class="w"> </span><span class="py">used</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="hover-information" class="position-relative d-flex align-items-center group"> <span>Hover Information</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="hover-information" aria-haspopup="dialog" aria-label="Share link: Hover Information"> <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>Hover over elements to see documentation:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Hover</span><span class="w"> </span><span class="py">over</span><span class="w"> </span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">see</span><span class="w"> </span><span class="py">label</span><span class="w"> </span><span class="py">statistics</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="py">LIKE</span><span class="w"> </span><span class="err">&#39;%</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Hover</span><span class="w"> </span><span class="py">over</span><span class="w"> </span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">see</span><span class="w"> </span><span class="py">property</span><span class="w"> </span><span class="kd">type</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">COALESCE</span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">nickname</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Hover</span><span class="w"> </span><span class="py">over</span><span class="w"> </span><span class="py">COALESCE</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">function</span><span class="w"> </span><span class="py">docs</span><span class="w"> </span></span></span></code></pre></div><p><strong>Hover Details Include</strong>:</p> <ul> <li><strong>Labels</strong>: Node count, property list, index information</li> <li><strong>Properties</strong>: Data type, nullable status, index coverage</li> <li><strong>Functions</strong>: Signature, description, examples, return type</li> <li><strong>Variables</strong>: Type inferred from binding, properties available</li> <li><strong>Relationship Types</strong>: Count, connected labels</li> </ul> <h4 id="go-to-definition" class="position-relative d-flex align-items-center group"> <span>Go to Definition</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="go-to-definition" aria-haspopup="dialog" aria-label="Share link: Go to Definition"> <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>Navigate to variable bindings and schema elements:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">friend</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">^^^^^^</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Ctrl</span><span class="err">+</span><span class="py">Click</span><span class="w"> </span><span class="py">jumps</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="s">&#34;(friend:User)&#34;</span><span class="w"> </span><span class="py">binding</span><span class="w"> </span></span></span></code></pre></div><p><strong>Keyboard Shortcut</strong>: <code>F12</code> or <code>Ctrl+Click</code></p> <h4 id="find-all-references" class="position-relative d-flex align-items-center group"> <span>Find All References</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="find-all-references" aria-haspopup="dialog" aria-label="Share link: Find All References"> <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>Locate all usages of variables, labels, or properties:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="py">LIKE</span><span class="w"> </span><span class="err">&#39;%</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">^</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Right</span><span class="err">-</span><span class="py">click</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">All</span><span class="w"> </span><span class="py">References</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Shows</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">4</span><span class="w"> </span><span class="py">usages</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">variable</span><span class="w"> </span><span class="err">&#39;</span><span class="py">u</span><span class="err">&#39;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Keyboard Shortcut</strong>: <code>Shift+F12</code></p> <h4 id="rename-symbol" class="position-relative d-flex align-items-center group"> <span>Rename Symbol</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="rename-symbol" aria-haspopup="dialog" aria-label="Share link: Rename Symbol"> <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>Rename variables across the query:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Before</span><span class="w"> </span><span class="py">rename</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">renaming</span><span class="w"> </span><span class="err">&#39;</span><span class="py">u</span><span class="err">&#39;</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="err">&#39;</span><span class="w"> </span><span class="p">(</span><span class="py">F2</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Keyboard Shortcut</strong>: <code>F2</code></p> <h4 id="code-formatting" class="position-relative d-flex align-items-center group"> <span>Code Formatting</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="code-formatting" aria-haspopup="dialog" aria-label="Share link: Code Formatting"> <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>Format GQL queries for consistency:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Before</span><span class="w"> </span><span class="py">formatting</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">match</span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">)</span><span class="w"> </span><span class="py">where</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="p">=</span><span class="py">true</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="err">&gt;&#39;</span><span class="py">2024</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span><span class="py">return</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="py">count</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span><span class="py">group</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">order</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span><span class="py">desc</span><span class="w"> </span><span class="py">limit</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">formatting</span><span class="w"> </span><span class="p">(</span><span class="py">Shift</span><span class="err">+</span><span class="py">Alt</span><span class="err">+</span><span class="py">F</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="err">&#39;</span><span class="py">2024</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">GROUP</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Keyboard Shortcut</strong>: <code>Shift+Alt+F</code></p> <h4 id="query-execution" class="position-relative d-flex align-items-center group"> <span>Query 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-execution" aria-haspopup="dialog" aria-label="Share link: Query 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>Execute queries directly from the editor:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Execute</span><span class="w"> </span><span class="py">current</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">Keyboard</span><span class="p">:</span><span class="w"> </span><span class="nc">Ctrl</span><span class="err">+</span><span class="py">Enter</span><span class="w"> </span><span class="p">(</span><span class="py">Cmd</span><span class="err">+</span><span class="py">Enter</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">macOS</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Or</span><span class="w"> </span><span class="py">right</span><span class="err">-</span><span class="py">click</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">Execute</span><span class="w"> </span><span class="py">Query</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="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Execution Commands</strong>:</p> <table> <thead> <tr> <th>Command</th> <th>Shortcut</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>Execute Query</td> <td><code>Ctrl+Enter</code></td> <td>Run current query</td> </tr> <tr> <td>Execute Selection</td> <td><code>Ctrl+Shift+Enter</code></td> <td>Run selected text</td> </tr> <tr> <td>Explain Query</td> <td><code>Ctrl+E</code></td> <td>Show execution plan</td> </tr> <tr> <td>Profile Query</td> <td><code>Ctrl+Shift+E</code></td> <td>Run with profiling</td> </tr> <tr> <td>Cancel Query</td> <td><code>Escape</code></td> <td>Cancel running query</td> </tr> </tbody> </table> <h4 id="result-visualization" class="position-relative d-flex align-items-center group"> <span>Result Visualization</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="result-visualization" aria-haspopup="dialog" aria-label="Share link: Result Visualization"> <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>View query results in multiple formats:</p> <p><strong>Table View</strong> (default):</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">│ name │ email │ created_at │ </span></span><span class="line"><span class="cl">├─────────┼─────────────────┼──────────────────────────┤ </span></span><span class="line"><span class="cl">│ Alice │ [email protected]│ 2024-01-15T10:30:00Z │ </span></span><span class="line"><span class="cl">│ Bob │ [email protected] │ 2024-02-20T14:45:00Z │ </span></span><span class="line"><span class="cl">│ Carol │ [email protected]│ 2024-03-10T09:15:00Z │ </span></span><span class="line"><span class="cl">└─────────┴─────────────────┴──────────────────────────┘ </span></span></code></pre></div><p><strong>Graph View</strong> (for path queries):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">MATCH</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.3</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Alice</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">path</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Opens</span><span class="w"> </span><span class="py">interactive</span><span class="w"> </span><span class="py">graph</span><span class="w"> </span><span class="py">visualization</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Nodes</span><span class="w"> </span><span class="py">displayed</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">labels</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">properties</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Relationships</span><span class="w"> </span><span class="py">shown</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">directed</span><span class="w"> </span><span class="py">edges</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Zoom</span><span class="p">,</span><span class="w"> </span><span class="py">pan</span><span class="p">,</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">drag</span><span class="w"> </span><span class="py">controls</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Click</span><span class="w"> </span><span class="py">node</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">see</span><span class="w"> </span><span class="py">details</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Export</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">PNG</span><span class="err">/</span><span class="py">SVG</span><span class="w"> </span></span></span></code></pre></div><p><strong>JSON View</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;Alice&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;email&#34;</span><span class="p">:</span> <span class="s2">&#34;[email protected]&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;created_at&#34;</span><span class="p">:</span> <span class="s2">&#34;2024-01-15T10:30:00Z&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">]</span> </span></span></code></pre></div> <h4 id="schema-explorer" class="position-relative d-flex align-items-center group"> <span>Schema Explorer</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="schema-explorer" aria-haspopup="dialog" aria-label="Share link: Schema Explorer"> <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>Browse database schema in the sidebar:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">GEODE EXPLORER </span></span><span class="line"><span class="cl">├── 📊 Connections </span></span><span class="line"><span class="cl">│ └── localhost:3141 (connected) </span></span><span class="line"><span class="cl">├── 🏷️ Labels </span></span><span class="line"><span class="cl">│ ├── User (1,234 nodes) </span></span><span class="line"><span class="cl">│ │ ├── Properties </span></span><span class="line"><span class="cl">│ │ │ ├── id (Integer, indexed) </span></span><span class="line"><span class="cl">│ │ │ ├── name (String) </span></span><span class="line"><span class="cl">│ │ │ ├── email (String, unique) </span></span><span class="line"><span class="cl">│ │ │ └── created_at (Timestamp, indexed) </span></span><span class="line"><span class="cl">│ │ └── Indexes </span></span><span class="line"><span class="cl">│ │ ├── user_email_unique </span></span><span class="line"><span class="cl">│ │ └── user_created_idx </span></span><span class="line"><span class="cl">│ ├── Product (567 nodes) </span></span><span class="line"><span class="cl">│ └── Order (890 nodes) </span></span><span class="line"><span class="cl">├── 🔗 Relationships </span></span><span class="line"><span class="cl">│ ├── FOLLOWS (5,678 edges) </span></span><span class="line"><span class="cl">│ ├── PURCHASED (3,456 edges) </span></span><span class="line"><span class="cl">│ └── VIEWED (12,345 edges) </span></span><span class="line"><span class="cl">└── 📁 Saved Queries </span></span><span class="line"><span class="cl"> ├── active_users.gql </span></span><span class="line"><span class="cl"> └── popular_products.gql </span></span></code></pre></div> <h4 id="code-snippets" class="position-relative d-flex align-items-center group"> <span>Code Snippets</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="code-snippets" aria-haspopup="dialog" aria-label="Share link: Code Snippets"> <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>Built-in snippets for common patterns:</p> <table> <thead> <tr> <th>Prefix</th> <th>Snippet</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>match</code></td> <td>MATCH pattern</td> <td>Basic match query</td> </tr> <tr> <td><code>create</code></td> <td>CREATE node</td> <td>Create node</td> </tr> <tr> <td><code>crel</code></td> <td>CREATE relationship</td> <td>Create relationship</td> </tr> <tr> <td><code>merge</code></td> <td>MERGE pattern</td> <td>Merge node or relationship</td> </tr> <tr> <td><code>delete</code></td> <td>DELETE pattern</td> <td>Delete query</td> </tr> <tr> <td><code>update</code></td> <td>SET properties</td> <td>Update properties</td> </tr> <tr> <td><code>agg</code></td> <td>Aggregation query</td> <td>Query with COUNT, SUM, etc.</td> </tr> <tr> <td><code>path</code></td> <td>Path pattern</td> <td>Variable-length path</td> </tr> <tr> <td><code>case</code></td> <td>CASE expression</td> <td>Conditional expression</td> </tr> <tr> <td><code>tx</code></td> <td>Transaction block</td> <td>BEGIN/COMMIT wrapper</td> </tr> </tbody> </table> <p><strong>Example Snippet Expansion</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Type</span><span class="p">:</span><span class="w"> </span><span class="nc">match</span><span class="err">&lt;</span><span class="py">Tab</span><span class="err">&gt;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Expands</span><span class="w"> </span><span class="py">to</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="err">$</span><span class="p">{</span><span class="nc">1</span><span class="p">:</span><span class="nc">Label</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="err">$</span><span class="p">{</span><span class="py">2</span><span class="p">:</span><span class="nc">condition</span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="err">$</span><span class="p">{</span><span class="py">3</span><span class="p">:</span><span class="nc">n</span><span class="p">}</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Custom Snippets</strong> (<code>.vscode/gql.code-snippets</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Find Connected Users&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;prefix&#34;</span><span class="p">:</span> <span class="s2">&#34;connected&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;body&#34;</span><span class="p">:</span> <span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;MATCH (u:User {email: &#39;${1:email}&#39;})-[:${2:FOLLOWS}*1..${3:3}]-&gt;(connected:User)&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;RETURN DISTINCT connected.name, connected.email&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;ORDER BY connected.name&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;LIMIT ${4:10};&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">],</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Find users connected within N hops&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Create User&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;prefix&#34;</span><span class="p">:</span> <span class="s2">&#34;newuser&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;body&#34;</span><span class="p">:</span> <span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;CREATE (u:User {&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34; id: randomUUID(),&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34; name: &#39;${1:name}&#39;,&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34; email: &#39;${2:email}&#39;,&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34; created_at: datetime()&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;})&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;RETURN u;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">],</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Create a new user node&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h3 id="keyboard-shortcuts" class="position-relative d-flex align-items-center group"> <span>Keyboard Shortcuts</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="keyboard-shortcuts" aria-haspopup="dialog" aria-label="Share link: Keyboard Shortcuts"> <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="default-keybindings" class="position-relative d-flex align-items-center group"> <span>Default Keybindings</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="default-keybindings" aria-haspopup="dialog" aria-label="Share link: Default Keybindings"> <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>Action</th> <th>Windows/Linux</th> <th>macOS</th> </tr> </thead> <tbody> <tr> <td>Execute Query</td> <td><code>Ctrl+Enter</code></td> <td><code>Cmd+Enter</code></td> </tr> <tr> <td>Execute Selection</td> <td><code>Ctrl+Shift+Enter</code></td> <td><code>Cmd+Shift+Enter</code></td> </tr> <tr> <td>Explain Query</td> <td><code>Ctrl+E</code></td> <td><code>Cmd+E</code></td> </tr> <tr> <td>Profile Query</td> <td><code>Ctrl+Shift+E</code></td> <td><code>Cmd+Shift+E</code></td> </tr> <tr> <td>Format Document</td> <td><code>Shift+Alt+F</code></td> <td><code>Shift+Option+F</code></td> </tr> <tr> <td>Go to Definition</td> <td><code>F12</code></td> <td><code>F12</code></td> </tr> <tr> <td>Find References</td> <td><code>Shift+F12</code></td> <td><code>Shift+F12</code></td> </tr> <tr> <td>Rename Symbol</td> <td><code>F2</code></td> <td><code>F2</code></td> </tr> <tr> <td>Show Hover</td> <td><code>Ctrl+K Ctrl+I</code></td> <td><code>Cmd+K Cmd+I</code></td> </tr> <tr> <td>Trigger Suggestions</td> <td><code>Ctrl+Space</code></td> <td><code>Cmd+Space</code></td> </tr> <tr> <td>Toggle Schema Explorer</td> <td><code>Ctrl+Shift+G</code></td> <td><code>Cmd+Shift+G</code></td> </tr> <tr> <td>Connect to Server</td> <td><code>Ctrl+Shift+C</code></td> <td><code>Cmd+Shift+C</code></td> </tr> <tr> <td>New Query File</td> <td><code>Ctrl+N</code></td> <td><code>Cmd+N</code></td> </tr> </tbody> </table> <h4 id="custom-keybindings" class="position-relative d-flex align-items-center group"> <span>Custom Keybindings</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="custom-keybindings" aria-haspopup="dialog" aria-label="Share link: Custom Keybindings"> <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>Add custom keybindings in <code>keybindings.json</code>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;key&#34;</span><span class="p">:</span> <span class="s2">&#34;ctrl+shift+r&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;geode.executeQuery&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;when&#34;</span><span class="p">:</span> <span class="s2">&#34;editorLangId == gql&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;key&#34;</span><span class="p">:</span> <span class="s2">&#34;ctrl+shift+p&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;geode.profileQuery&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;when&#34;</span><span class="p">:</span> <span class="s2">&#34;editorLangId == gql&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;key&#34;</span><span class="p">:</span> <span class="s2">&#34;ctrl+shift+t&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;geode.showResultsAsTable&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;when&#34;</span><span class="p">:</span> <span class="s2">&#34;editorLangId == gql&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;key&#34;</span><span class="p">:</span> <span class="s2">&#34;ctrl+shift+v&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;geode.showResultsAsGraph&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;when&#34;</span><span class="p">:</span> <span class="s2">&#34;editorLangId == gql&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">]</span> </span></span></code></pre></div> <h3 id="debugging" class="position-relative d-flex align-items-center group"> <span>Debugging</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="debugging" aria-haspopup="dialog" aria-label="Share link: Debugging"> <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="query-debugging" class="position-relative d-flex align-items-center group"> <span>Query Debugging</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-debugging" aria-haspopup="dialog" aria-label="Share link: Query Debugging"> <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>Debug queries step-by-step:</p> <ol> <li>Set breakpoints by clicking in the gutter</li> <li>Press <code>F5</code> to start debugging</li> <li>Step through query execution stages</li> <li>Inspect intermediate results and variables</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Set</span><span class="w"> </span><span class="py">breakpoint</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">line</span><span class="w"> </span><span class="py">2</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="err">●</span><span class="w"> </span><span class="py">Breakpoint</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">followers_count</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">followers_count</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">followers_count</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Debug Panel Shows</strong>:</p> <ul> <li><strong>Query Plan</strong>: Visual execution plan</li> <li><strong>Variables</strong>: Bound variables and their values</li> <li><strong>Intermediate Results</strong>: Rows at current stage</li> <li><strong>Statistics</strong>: Rows processed, time elapsed</li> <li><strong>Indexes Used</strong>: Which indexes are being utilized</li> </ul> <h4 id="debug-console-commands" class="position-relative d-flex align-items-center group"> <span>Debug Console 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="debug-console-commands" aria-haspopup="dialog" aria-label="Share link: Debug Console 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-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="o">&gt;</span> <span class="n">SHOW</span> <span class="n">PLAN</span> </span></span><span class="line"><span class="cl"> <span class="err">→</span> <span class="n">Displays</span> <span class="n">query</span> <span class="n">execution</span> <span class="n">plan</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="o">&gt;</span> <span class="n">SHOW</span> <span class="n">VARIABLES</span> </span></span><span class="line"><span class="cl"> <span class="err">→</span> <span class="n">Lists</span> <span class="n">all</span> <span class="n">bound</span> <span class="n">variables</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="o">&gt;</span> <span class="n">SHOW</span> <span class="n">ROWS</span> </span></span><span class="line"><span class="cl"> <span class="err">→</span> <span class="n">Shows</span> <span class="n">intermediate</span> <span class="n">result</span> <span class="n">set</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="o">&gt;</span> <span class="n">STEP</span> </span></span><span class="line"><span class="cl"> <span class="err">→</span> <span class="n">Advance</span> <span class="n">to</span> <span class="n">next</span> <span class="n">execution</span> <span class="n">stage</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="o">&gt;</span> <span class="n">CONTINUE</span> </span></span><span class="line"><span class="cl"> <span class="err">→</span> <span class="n">Run</span> <span class="n">to</span> <span class="n">next</span> <span class="k">breakpoint</span> <span class="ow">or</span> <span class="n">end</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="o">&gt;</span> <span class="n">EVALUATE</span> <span class="n">u</span><span class="o">.</span><span class="n">name</span> </span></span><span class="line"><span class="cl"> <span class="err">→</span> <span class="n">Evaluate</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">current</span> <span class="n">context</span> </span></span></code></pre></div> <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="common-issues" class="position-relative d-flex align-items-center group"> <span>Common Issues</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="common-issues" aria-haspopup="dialog" aria-label="Share link: Common Issues"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Extension Not Loading</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"># Check VS Code version</span> </span></span><span class="line"><span class="cl">code --version <span class="c1"># Requires 1.85.0+</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check extension logs</span> </span></span><span class="line"><span class="cl"><span class="c1"># View → Output → Select &#34;Geode GQL&#34; from dropdown</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Reinstall extension</span> </span></span><span class="line"><span class="cl">code --uninstall-extension geodedb.geode-gql </span></span><span class="line"><span class="cl">code --install-extension geodedb.geode-gql </span></span></code></pre></div><p><strong>LSP Server Not Starting</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"># Verify Geode installation</span> </span></span><span class="line"><span class="cl">which geode </span></span><span class="line"><span class="cl">geode --version </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Test LSP manually</span> </span></span><span class="line"><span class="cl">geode lsp --stdio </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check extension settings</span> </span></span><span class="line"><span class="cl"><span class="c1"># Ensure geode.serverPath is correct</span> </span></span></code></pre></div><p><strong>No Auto-Completion</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="c1">// Verify these settings are enabled </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.lsp.enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.editor.suggestLabels&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.editor.suggestProperties&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>Connection Failures</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"># Test server connectivity</span> </span></span><span class="line"><span class="cl">geode shell --host localhost --port <span class="m">3141</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check firewall rules</span> </span></span><span class="line"><span class="cl">nc -zv localhost <span class="m">3141</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify TLS certificates if using secure connection</span> </span></span><span class="line"><span class="cl">openssl s_client -connect localhost:3141 </span></span></code></pre></div><p><strong>Slow Performance</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.maxProblems&#34;</span><span class="p">:</span> <span class="mi">50</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.debounceMs&#34;</span><span class="p">:</span> <span class="mi">500</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.visualization.maxNodes&#34;</span><span class="p">:</span> <span class="mi">200</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="logging" class="position-relative d-flex align-items-center group"> <span>Logging</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="logging" aria-haspopup="dialog" aria-label="Share link: Logging"> <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>Enable detailed logging for troubleshooting:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.lsp.logLevel&#34;</span><span class="p">:</span> <span class="s2">&#34;debug&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.lsp.logFile&#34;</span><span class="p">:</span> <span class="s2">&#34;/tmp/geode-lsp.log&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.trace.server&#34;</span><span class="p">:</span> <span class="s2">&#34;verbose&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p>View logs:</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"># LSP server logs</span> </span></span><span class="line"><span class="cl">tail -f /tmp/geode-lsp.log </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># VS Code extension logs</span> </span></span><span class="line"><span class="cl"><span class="c1"># View → Output → &#34;Geode GQL&#34;</span> </span></span></code></pre></div> <h3 id="best-practices" class="position-relative d-flex align-items-center group"> <span>Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="best-practices" aria-haspopup="dialog" aria-label="Share link: Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p><strong>Organize Query Files</strong>: Use <code>.gql</code> files in version control for team collaboration.</p> <p><strong>Use Workspace Settings</strong>: Configure project-specific connections and settings.</p> <p><strong>Leverage Snippets</strong>: Create custom snippets for frequently used patterns.</p> <p><strong>Enable Format on Save</strong>: Ensure consistent code style across the team.</p> <p><strong>Use Schema Explorer</strong>: Verify labels and properties before writing queries.</p> <p><strong>Test with EXPLAIN</strong>: Review query plans before executing expensive queries.</p> <p><strong>Set Appropriate Limits</strong>: Use LIMIT during development to avoid large result sets.</p> <p><strong>Use Transactions</strong>: Wrap mutations in transactions for safety.</p> <p><strong>Profile Performance</strong>: Use Profile Query to identify bottlenecks.</p> <p><strong>Keep Extension Updated</strong>: Update regularly for bug fixes and new features.</p> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/tags/editor/" >Editor Integrations</a> - Overview of all editor integrations</li> <li><a href="/tags/neovim/" >Neovim Plugin</a> - Neovim/Vim integration</li> <li><a href="/tags/ide/" >IDE Integration</a> - General IDE support</li> <li><a href="/tags/plugin/" >Plugin Development</a> - Creating editor plugins</li> <li><a href="/docs/development/lsp-guide/" >LSP Guide</a> - Language Server Protocol details</li> <li><a href="/docs/gql-reference/" >GQL Reference</a> - GQL language reference</li> </ul> <h3 id="further-reading" class="position-relative d-flex align-items-center group"> <span>Further Reading</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="further-reading" aria-haspopup="dialog" aria-label="Share link: Further Reading"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li>VS Code Extension API Documentation</li> <li>Language Server Protocol Specification</li> <li>GQL Syntax and Semantics Guide</li> <li>Query Optimization Best Practices</li> <li>Debugging Complex Graph Queries</li> <li>Team Development Workflows</li> </ul>

Related Articles