<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Junaid</title>
    <description>The latest articles on Forem by Junaid (@junaid_0012182a7fc8fac9aa).</description>
    <link>https://forem.com/junaid_0012182a7fc8fac9aa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3603108%2Fa2189fc3-52f5-4406-be40-33b1d3ac0efc.png</url>
      <title>Forem: Junaid</title>
      <link>https://forem.com/junaid_0012182a7fc8fac9aa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/junaid_0012182a7fc8fac9aa"/>
    <language>en</language>
    <item>
      <title>CocoIndex Setup Guide</title>
      <dc:creator>Junaid</dc:creator>
      <pubDate>Tue, 10 Feb 2026 11:19:29 +0000</pubDate>
      <link>https://forem.com/junaid_0012182a7fc8fac9aa/cocoindex-setup-guide-190j</link>
      <guid>https://forem.com/junaid_0012182a7fc8fac9aa/cocoindex-setup-guide-190j</guid>
      <description>&lt;h2&gt;
  
  
  Real-Time Codebase Indexing for AI-Powered IDEs
&lt;/h2&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What is CocoIndex?&lt;/li&gt;
&lt;li&gt;Why Use CocoIndex?&lt;/li&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;Initial Setup&lt;/li&gt;
&lt;li&gt;Indexing Your First Codebase&lt;/li&gt;
&lt;li&gt;IDE Integration&lt;/li&gt;
&lt;li&gt;Indexing Additional Codebases&lt;/li&gt;
&lt;li&gt;Updates: Manual vs Automatic&lt;/li&gt;
&lt;li&gt;Common Issues &amp;amp; Troubleshooting&lt;/li&gt;
&lt;li&gt;Best Practices&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What is CocoIndex?
&lt;/h2&gt;

&lt;p&gt;CocoIndex is an open-source framework for building &lt;strong&gt;real-time codebase indexes&lt;/strong&gt; using Tree-sitter for semantic code parsing and vector embeddings for semantic search [page:1]. It creates a searchable database of your codebase that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Understands code semantically&lt;/strong&gt; (functions, classes, methods) rather than treating it as plain text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updates incrementally&lt;/strong&gt; – only reprocesses changed files, not the entire codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrates with AI-powered IDEs&lt;/strong&gt; via Model Context Protocol (MCP) to provide context-aware code assistance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Use CocoIndex?
&lt;/h2&gt;

&lt;p&gt;As software engineers and open-source maintainers, CocoIndex enables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI coding assistants&lt;/strong&gt;: Give Claude, Codex, or Gemini semantic understanding of your entire codebase [page:1]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better IDE integrations&lt;/strong&gt;: Works with VS Code, Kiro, Trae, Qoder, Cursor, Windsurf via MCP [page:1]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic code search&lt;/strong&gt;: Find code by what it does, not just keyword matching [page:1]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated workflows&lt;/strong&gt;: Code review agents, refactoring tools, PR summarization [page:1]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always up-to-date&lt;/strong&gt;: Incremental processing means your index stays fresh without full rebuilds [page:1]&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Required Software
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.7+&lt;/strong&gt; (You have Python 3.13.7 ✓)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pip&lt;/strong&gt; (You have pip 25.2 ✓)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pipx&lt;/strong&gt; – For managing isolated Python applications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL 14+&lt;/strong&gt; with &lt;strong&gt;pgvector&lt;/strong&gt; extension&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; – For cloning repositories&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  System Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;macOS (Homebrew-managed Python) or Linux&lt;/li&gt;
&lt;li&gt;~500MB disk space for dependencies&lt;/li&gt;
&lt;li&gt;PostgreSQL database access (local or remote)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Initial Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install pipx
&lt;/h3&gt;

&lt;p&gt;Since you're using Homebrew-managed Python on macOS, you must use &lt;code&gt;pipx&lt;/code&gt; to avoid "externally-managed-environment" errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pipx
pipx ensurepath
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart your terminal after installation.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Install PostgreSQL with pgvector
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Install PostgreSQL
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;postgresql@14
brew services start postgresql@14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Install pgvector extension
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pgvector
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Create database and enable vector extension
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create the database&lt;/span&gt;
createdb cocoindex

&lt;span class="c"&gt;# Enable pgvector extension&lt;/span&gt;
psql cocoindex &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"CREATE EXTENSION IF NOT EXISTS vector;"&lt;/span&gt;

&lt;span class="c"&gt;# Verify installation&lt;/span&gt;
psql cocoindex &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="s2"&gt;x"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see &lt;code&gt;vector&lt;/code&gt; listed in the extensions.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Install CocoIndex
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pipx &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s1"&gt;'cocoindex[embeddings]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cocoindex &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 4: Clone the Realtime Codebase Indexing Repository
&lt;/h3&gt;

&lt;p&gt;This provides a ready-made &lt;code&gt;main.py&lt;/code&gt; with proper flow configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Documents/workspace  &lt;span class="c"&gt;# or your preferred directory&lt;/span&gt;
git clone https://github.com/cocoindex-io/realtime-codebase-indexing.git
&lt;span class="nb"&gt;cd &lt;/span&gt;realtime-codebase-indexing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 5: Install Project Dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pipx runpip cocoindex &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This installs the project alongside your pipx-managed &lt;code&gt;cocoindex&lt;/code&gt; tool.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 6: Configure Environment Variables
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;.env&lt;/code&gt; file in the &lt;code&gt;realtime-codebase-indexing&lt;/code&gt; directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COCOINDEX_DATABASE_URL=postgresql://localhost:5432/cocoindex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Every project that uses CocoIndex needs this environment variable set. You can either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add it to each project's &lt;code&gt;.env&lt;/code&gt; file, or&lt;/li&gt;
&lt;li&gt;Export it globally in your shell profile (&lt;code&gt;~/.zshrc&lt;/code&gt; or &lt;code&gt;~/.bashrc&lt;/code&gt;):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COCOINDEX_DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Indexing Your First Codebase
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Adjust the Source Configuration
&lt;/h3&gt;

&lt;p&gt;Edit &lt;code&gt;main.py&lt;/code&gt; in your project directory. Find the &lt;code&gt;LocalFile&lt;/code&gt; source configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;data_scope&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;files&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flow_builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;cocoindex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LocalFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Current directory (recommended for single-repo indexing)
&lt;/span&gt;        &lt;span class="n"&gt;included_patterns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.py&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.rs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.toml&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.mdx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;excluded_patterns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/.git/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/venv/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/.venv/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/site-packages/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/node_modules/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;target&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;path="."&lt;/code&gt; – Index the current directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;included_patterns&lt;/code&gt; – File types to index (adjust for your stack)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;excluded_patterns&lt;/code&gt; – Directories to skip (add any custom build/cache dirs)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 2: Run the Indexing Flow
&lt;/h3&gt;

&lt;p&gt;From your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Make sure environment variable is set&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COCOINDEX_DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;

&lt;span class="c"&gt;# Run the indexing&lt;/span&gt;
cocoindex update main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On first run, you'll see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ TO CREATE ] CocoIndex Metadata Table
[ TO CREATE ] Flow: CodeEmbedding
[ TO CREATE ] Postgres table CodeEmbedding__code_embeddings

Changes need to be pushed. Continue? [yes/N]:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type &lt;code&gt;yes&lt;/code&gt; and press Enter. CocoIndex will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create necessary tables in PostgreSQL [web:42]&lt;/li&gt;
&lt;li&gt;Enable pgvector extension [web:64]&lt;/li&gt;
&lt;li&gt;Parse your code with Tree-sitter [page:1]&lt;/li&gt;
&lt;li&gt;Generate embeddings using &lt;code&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/code&gt; [page:1]&lt;/li&gt;
&lt;li&gt;Store everything in the &lt;code&gt;code_embeddings&lt;/code&gt; table with HNSW vector index [web:64]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You'll see output like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Updated index: files: ▕████████████▏1234/1234 source rows: 1234 added
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 3: Test the Index
&lt;/h3&gt;

&lt;p&gt;Query the index directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/Users/junaid/.local/pipx/venvs/cocoindex/bin/python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the prompt, enter natural language queries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Enter search query (or Enter to quit): how does authentication work?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will return relevant code snippets with similarity scores and file locations [web:34][web:70].&lt;/p&gt;




&lt;h2&gt;
  
  
  IDE Integration
&lt;/h2&gt;

&lt;p&gt;CocoIndex integrates with AI-powered IDEs via &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; servers [web:10][web:7].&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported IDEs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VS Code&lt;/strong&gt; (with GitHub Copilot or compatible extensions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kiro IDE&lt;/strong&gt; ✓ (You're already set up!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trae IDE&lt;/strong&gt; (ByteDance AI-powered editor)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qoder IDE&lt;/strong&gt; (Agentic IDE with Quest Mode)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor, Windsurf&lt;/strong&gt; (VS Code forks with MCP support)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Setup: Kiro IDE (Your Current Setup)
&lt;/h3&gt;

&lt;p&gt;Your &lt;code&gt;mcp.json&lt;/code&gt; configuration (already working):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; &lt;code&gt;~/.kiro/settings/mcp.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cocoindex"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--from"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cocoindex-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cocoindex-mcp"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"COCOINDEX_DATABASE_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Connected (2 tools) ✓&lt;/p&gt;

&lt;h4&gt;
  
  
  Using CocoIndex in Kiro
&lt;/h4&gt;

&lt;p&gt;In Kiro's agent chat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use cocoindex to find where we initialize the database connection pool.

Search the codebase for JWT token validation logic.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent will call the MCP tools and return relevant code chunks from your indexed codebase [web:10][web:85].&lt;/p&gt;




&lt;h3&gt;
  
  
  Setup: VS Code
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; &lt;code&gt;.vscode/mcp.json&lt;/code&gt; (in your project root)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cocoindex"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--from"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cocoindex-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cocoindex-mcp"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"COCOINDEX_DATABASE_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart VS Code. In Copilot chat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@cocoindex find error handling patterns in this project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:7][web:38]&lt;/p&gt;




&lt;h3&gt;
  
  
  Setup: Trae IDE
&lt;/h3&gt;

&lt;p&gt;Similar to VS Code, add the MCP server configuration to Trae's settings [web:15][web:18].&lt;/p&gt;




&lt;h2&gt;
  
  
  Indexing Additional Codebases
&lt;/h2&gt;

&lt;p&gt;To index a different project:&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1: Per-Project Setup (Recommended)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copy &lt;code&gt;main.py&lt;/code&gt;&lt;/strong&gt; to the new project:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; ~/Documents/workspace/realtime-codebase-indexing/main.py ~/path/to/new-project/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create &lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; in the new project:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COCOINDEX_DATABASE_URL=postgresql://localhost:5432/cocoindex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Adjust &lt;code&gt;path&lt;/code&gt; in &lt;code&gt;main.py&lt;/code&gt;&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Keep this for current directory
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Customize file patterns&lt;/strong&gt; for your stack:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;included_patterns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.js&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.ts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.jsx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.tsx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run indexing&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/path/to/new-project
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COCOINDEX_DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;
cocoindex update main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Option 2: Index Multiple Repos into One Database
&lt;/h3&gt;

&lt;p&gt;You can index multiple projects into the same &lt;code&gt;cocoindex&lt;/code&gt; database. They'll all be searchable together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Multiple sources in main.py
&lt;/span&gt;&lt;span class="n"&gt;data_scope&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;backend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flow_builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;cocoindex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LocalFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/absolute/path/to/backend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;data_scope&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;frontend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flow_builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;cocoindex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LocalFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/absolute/path/to/frontend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:93][web:94]&lt;/p&gt;




&lt;h2&gt;
  
  
  Updates: Manual vs Automatic
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔄 Incremental Updates (Manual Trigger)
&lt;/h3&gt;

&lt;p&gt;By default, CocoIndex requires you to &lt;strong&gt;manually trigger updates&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/your/project
cocoindex update main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What happens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CocoIndex compares file timestamps and content hashes [web:26][web:34]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only changed files&lt;/strong&gt; are reprocessed (not the entire codebase)&lt;/li&gt;
&lt;li&gt;New embeddings are generated only for modified chunks [web:26]&lt;/li&gt;
&lt;li&gt;The index is updated incrementally in PostgreSQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to run:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After pulling new code from Git&lt;/li&gt;
&lt;li&gt;After making significant code changes&lt;/li&gt;
&lt;li&gt;Before starting a coding session where you want fresh context&lt;/li&gt;
&lt;li&gt;As part of CI/CD pipelines (optional)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚡ Live/Automatic Updates (Continuous Mode)
&lt;/h3&gt;

&lt;p&gt;For &lt;strong&gt;real-time&lt;/strong&gt; index updates while you code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cocoindex update &lt;span class="nt"&gt;-L&lt;/span&gt; main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-L&lt;/code&gt; flag enables &lt;strong&gt;live mode&lt;/strong&gt; [web:26][web:32]:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watches your filesystem for changes&lt;/li&gt;
&lt;li&gt;Automatically reindexes modified files&lt;/li&gt;
&lt;li&gt;Runs continuously until you stop it (Ctrl+C)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;During active development sessions&lt;/li&gt;
&lt;li&gt;When you want IDE assistants to always have the latest context&lt;/li&gt;
&lt;li&gt;For long-running dev environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Note:&lt;/strong&gt; This keeps the process running. For team environments, decide whether each developer runs this locally or you run one shared indexer.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤖 CI/CD Integration (Optional)
&lt;/h3&gt;

&lt;p&gt;Add to your CI pipeline to keep shared indexes fresh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/index-codebase.yml&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update Codebase Index&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update CocoIndex&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;COCOINDEX_DATABASE_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.COCOINDEX_DATABASE_URL }}&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;pipx install 'cocoindex[embeddings]'&lt;/span&gt;
          &lt;span class="s"&gt;pipx runpip cocoindex install -e .&lt;/span&gt;
          &lt;span class="s"&gt;cocoindex update main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:5][web:70]&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Issues &amp;amp; Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❌ "externally-managed-environment" error
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error: externally-managed-environment
× This environment is externally managed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Always use &lt;code&gt;pipx&lt;/code&gt; on macOS with Homebrew Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pipx &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s1"&gt;'cocoindex[embeddings]'&lt;/span&gt;
&lt;span class="c"&gt;# NOT: pip install cocoindex&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:1]&lt;/p&gt;




&lt;h3&gt;
  
  
  ❌ "role 'cocoindex' does not exist"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RuntimeError: Failed to connect to database postgres://cocoindex:cocoindex@localhost/cocoindex
error returned from database: role "cocoindex" does not exist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Your connection URL references a user that doesn't exist. Either:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A:&lt;/strong&gt; Simplify the URL (use your default user):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COCOINDEX_DATABASE_URL=postgresql://localhost:5432/cocoindex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Option B:&lt;/strong&gt; Create the user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;psql postgres &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"CREATE USER cocoindex WITH PASSWORD 'cocoindex';"&lt;/span&gt;
psql postgres &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"GRANT ALL PRIVILEGES ON DATABASE cocoindex TO cocoindex;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:25][web:46]&lt;/p&gt;




&lt;h3&gt;
  
  
  ❌ "extension 'vector' is not available"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RuntimeError: error returned from database: extension "vector" is not available
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Install pgvector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pgvector
psql cocoindex &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"CREATE EXTENSION IF NOT EXISTS vector;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;psql cocoindex &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="s2"&gt;x"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:62][web:58]&lt;/p&gt;




&lt;h3&gt;
  
  
  ❌ "ModuleNotFoundError: No module named 'dotenv'"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nb"&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dotenv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Use the pipx Python interpreter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/Users/junaid/.local/pipx/venvs/cocoindex/bin/python main.py
&lt;span class="c"&gt;# NOT: python3 main.py&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or create an alias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'alias coco-py="/Users/junaid/.local/pipx/venvs/cocoindex/bin/python"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
coco-py main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ❌ "Database is required for this operation"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ValueError: Invalid Request: Database is required for this operation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Set the environment variable before running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COCOINDEX_DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;
cocoindex update main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or add it to &lt;code&gt;.env&lt;/code&gt; in your project root [web:25].&lt;/p&gt;




&lt;h3&gt;
  
  
  ❌ Search returns irrelevant results (venv/site-packages)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Query results show library code instead of your project code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Tighten your &lt;code&gt;excluded_patterns&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;excluded_patterns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/.git/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/venv/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/.venv/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/__pycache__/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/site-packages/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/node_modules/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;target&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;build&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then reindex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cocoindex update main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:88][web:91]&lt;/p&gt;




&lt;h3&gt;
  
  
  ❌ Kiro/IDE shows "MCP server disconnected"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; IDE can't reach the MCP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checklist:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is &lt;code&gt;COCOINDEX_DATABASE_URL&lt;/code&gt; set in the MCP config's &lt;code&gt;env&lt;/code&gt; section?&lt;/li&gt;
&lt;li&gt;Is PostgreSQL running? (&lt;code&gt;brew services list | grep postgresql&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Does the database have data? (&lt;code&gt;psql cocoindex -c "SELECT COUNT(*) FROM \"CodeEmbedding__code_embeddings\";"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;cocoindex-mcp&lt;/code&gt; installed? (&lt;code&gt;pipx list | grep cocoindex&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Debug:&lt;/strong&gt; Check Kiro's MCP server logs (usually in IDE settings/output panel).&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. One &lt;code&gt;.env&lt;/code&gt; per Project
&lt;/h3&gt;

&lt;p&gt;Keep environment variables project-specific:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-project/
├── .env                    # COCOINDEX_DATABASE_URL here
├── main.py                 # CocoIndex flow definition
├── src/
└── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it easy to switch between projects without conflicts.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Exclude Build Artifacts
&lt;/h3&gt;

&lt;p&gt;Always exclude generated/downloaded code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;excluded_patterns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/.git/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/venv/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/.venv/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/node_modules/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/build/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/dist/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/__pycache__/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/target/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# Rust
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/.next/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;# Next.js
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/vendor/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# Go/PHP
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps your index focused on actual source code [web:88][web:91].&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Use Pattern Matching for Monorepos
&lt;/h3&gt;

&lt;p&gt;For large monorepos, be selective:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Index only backend services
&lt;/span&gt;&lt;span class="n"&gt;included_patterns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps/backend/**/*.py&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;services/**/*.py&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Or exclude specific apps
&lt;/span&gt;&lt;span class="n"&gt;excluded_patterns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps/legacy/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps/deprecated/**&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:93]&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Run Updates Before Coding Sessions
&lt;/h3&gt;

&lt;p&gt;Establish a team habit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Morning routine&lt;/span&gt;
git pull
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COCOINDEX_DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;
cocoindex update main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use live mode during active development:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cocoindex update &lt;span class="nt"&gt;-L&lt;/span&gt; main  &lt;span class="c"&gt;# Runs continuously&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:26]&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Share PostgreSQL for Team Environments (Optional)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Option A – Individual indexes (simpler):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each dev runs PostgreSQL locally&lt;/li&gt;
&lt;li&gt;Each maintains their own index&lt;/li&gt;
&lt;li&gt;No coordination needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Option B – Shared index (advanced):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up a shared PostgreSQL server&lt;/li&gt;
&lt;li&gt;Point all team members' &lt;code&gt;COCOINDEX_DATABASE_URL&lt;/code&gt; to it&lt;/li&gt;
&lt;li&gt;One person (or CI) runs updates, everyone benefits&lt;/li&gt;
&lt;li&gt;Requires network access and credentials management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most teams, &lt;strong&gt;Option A&lt;/strong&gt; is recommended initially [web:25].&lt;/p&gt;




&lt;h3&gt;
  
  
  6. Customize Embeddings for Your Domain
&lt;/h3&gt;

&lt;p&gt;The default model (&lt;code&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/code&gt;) works well for general code [page:1]. For specialized domains, consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Use a code-specific model
&lt;/span&gt;&lt;span class="n"&gt;cocoindex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SentenceTransformerEmbed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;microsoft/codebert-base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Or use API-based embeddings (Gemini, OpenAI, Voyage)
&lt;/span&gt;&lt;span class="n"&gt;cocoindex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;EmbedText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cocoindex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LlmApiType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GEMINI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text-embedding-004&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[web:70][web:76]&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Reference Commands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setup (One-time per machine)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pipx postgresql@14 pgvector
pipx ensurepath
brew services start postgresql@14
createdb cocoindex
psql cocoindex &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"CREATE EXTENSION vector;"&lt;/span&gt;
pipx &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s1"&gt;'cocoindex[embeddings]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setup (One-time per project)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/project
&lt;span class="nb"&gt;cp&lt;/span&gt; ~/realtime-codebase-indexing/main.py &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'COCOINDEX_DATABASE_URL=postgresql://localhost:5432/cocoindex'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Daily Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update index after code changes&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COCOINDEX_DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"postgresql://localhost:5432/cocoindex"&lt;/span&gt;
cocoindex update main

&lt;span class="c"&gt;# Query directly&lt;/span&gt;
/Users/junaid/.local/pipx/venvs/cocoindex/bin/python main.py

&lt;span class="c"&gt;# Live mode (continuous updates)&lt;/span&gt;
cocoindex update &lt;span class="nt"&gt;-L&lt;/span&gt; main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  IDE Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# In Kiro/VS Code agent chat:
Use cocoindex to find [what you're looking for]

# Examples:
Use cocoindex to find authentication middleware
Search for error handling patterns
Find database query optimization examples
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Official Docs:&lt;/strong&gt; &lt;a href="https://cocoindex.io/docs" rel="noopener noreferrer"&gt;https://cocoindex.io/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repo:&lt;/strong&gt; &lt;a href="https://github.com/cocoindex-io/cocoindex" rel="noopener noreferrer"&gt;https://github.com/cocoindex-io/cocoindex&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example Repo:&lt;/strong&gt; &lt;a href="https://github.com/cocoindex-io/realtime-codebase-indexing" rel="noopener noreferrer"&gt;https://github.com/cocoindex-io/realtime-codebase-indexing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Documentation:&lt;/strong&gt; &lt;a href="https://code.visualstudio.com/docs/copilot/customization/mcp-servers" rel="noopener noreferrer"&gt;https://code.visualstudio.com/docs/copilot/customization/mcp-servers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pgvector:&lt;/strong&gt; &lt;a href="https://github.com/pgvector/pgvector" rel="noopener noreferrer"&gt;https://github.com/pgvector/pgvector&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Support &amp;amp; Questions
&lt;/h2&gt;

&lt;p&gt;For team questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check this document first&lt;/li&gt;
&lt;li&gt;Review official docs at &lt;a href="https://cocoindex.io" rel="noopener noreferrer"&gt;https://cocoindex.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Search GitHub issues: &lt;a href="https://github.com/cocoindex-io/cocoindex/issues" rel="noopener noreferrer"&gt;https://github.com/cocoindex-io/cocoindex/issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ask in team chat with context (error messages, relevant &lt;code&gt;main.py&lt;/code&gt; snippet)&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Happy Indexing! 🚀&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This comprehensive guide covers everything your team needs from initial setup through daily usage, common pitfalls, and best practices. Save this as &lt;code&gt;COCOINDEX_SETUP.md&lt;/code&gt; in your team's documentation or wiki.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introducing CheckOps: A Production-Ready Form Builder SDK for Node.js</title>
      <dc:creator>Junaid</dc:creator>
      <pubDate>Mon, 10 Nov 2025 11:48:25 +0000</pubDate>
      <link>https://forem.com/junaid_0012182a7fc8fac9aa/introducing-checkops-a-production-ready-form-builder-sdk-for-nodejs-jp8</link>
      <guid>https://forem.com/junaid_0012182a7fc8fac9aa/introducing-checkops-a-production-ready-form-builder-sdk-for-nodejs-jp8</guid>
      <description>&lt;h2&gt;
  
  
  Introducing CheckOps: A Production-Ready Form Builder SDK
&lt;/h2&gt;

&lt;p&gt;I'm excited to announce the release of CheckOps v1.0.0, a Node.js SDK that makes it easy to build dynamic forms with PostgreSQL 18 and JSONB storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why CheckOps?
&lt;/h2&gt;

&lt;p&gt;Building form systems is repetitive work. You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic question management&lt;/li&gt;
&lt;li&gt;Flexible data storage&lt;/li&gt;
&lt;li&gt;Validation &amp;amp; sanitization&lt;/li&gt;
&lt;li&gt;Analytics&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CheckOps handles all of this out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import CheckOps from '@saiqa-tech/checkops';

const checkops = new CheckOps({
  host: 'localhost',
  database: 'myapp',
  // ... config
});

await checkops.initialize();

// Create a form
const form = await checkops.createForm({
  title: 'Customer Feedback',
  questions: [
    {
      questionText: 'How would you rate us?',
      questionType: 'rating',
      options:,[1]
      required: true
    }
  ]
});

// Submit response
const submission = await checkops.createSubmission({
  formId: form.id,
  submissionData: {
    'How would you rate us?': 5
  }
});

// Get analytics
const stats = await checkops.getSubmissionStats(form.id);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🎯 Dynamic Form Builder
&lt;/h3&gt;

&lt;p&gt;15+ question types: text, email, select, rating, date, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 Question Reusability
&lt;/h3&gt;

&lt;p&gt;Centralized question bank - create once, use everywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 JSONB Storage
&lt;/h3&gt;

&lt;p&gt;Flexible PostgreSQL JSONB for responses with GIN indexes.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 Security First
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Parameterized queries (SQL injection prevention)&lt;/li&gt;
&lt;li&gt;Input sanitization (XSS prevention)&lt;/li&gt;
&lt;li&gt;Comprehensive validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📈 Built-in Analytics
&lt;/h3&gt;

&lt;p&gt;Get submission statistics, response distributions, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧪 Well Tested
&lt;/h3&gt;

&lt;p&gt;80%+ test coverage with Jest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 24+&lt;/li&gt;
&lt;li&gt;PostgreSQL 18 with JSONB&lt;/li&gt;
&lt;li&gt;ES Modules&lt;/li&gt;
&lt;li&gt;Apache 2.0 License&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @saiqa-tech/checkops pg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;Full docs available in the repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Reference&lt;/li&gt;
&lt;li&gt;Usage Guide&lt;/li&gt;
&lt;li&gt;Real-world Examples&lt;/li&gt;
&lt;li&gt;Database Schema&lt;/li&gt;
&lt;li&gt;Security Best Practices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;p&gt;Perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Survey applications&lt;/li&gt;
&lt;li&gt;Inspection checklists&lt;/li&gt;
&lt;li&gt;Customer feedback systems&lt;/li&gt;
&lt;li&gt;Assessment tools&lt;/li&gt;
&lt;li&gt;Job applications&lt;/li&gt;
&lt;li&gt;Registration forms&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 npm: &lt;a href="https://www.npmjs.com/package/@saiqa-tech/checkops" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@saiqa-tech/checkops&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 GitHub: &lt;a href="https://github.com/saiqa-tech/checkops" rel="noopener noreferrer"&gt;https://github.com/saiqa-tech/checkops&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 Docs: In the repo&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Contributions welcome! Apache 2.0 licensed.&lt;/p&gt;

&lt;p&gt;What would you build with CheckOps? Let me know in the comments! 👇&lt;/p&gt;

</description>
      <category>node</category>
      <category>postgressql</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
