Oscar Campo6k downloadsLocal Graph RAG powered by LightRAG. Chat with your notes using deep knowledge graph connections.
Deep, graph-based search for your Obsidian Vault.
We built Neural Composer because we love Obsidian, but we often felt limited by standard search tools.
Have you ever searched for a topic in your vault and gotten a list of notes that contain the word, but miss the context? Or tried to ask an AI plugin a complex question, only for it to fail because it couldn't "see" the connections between your files?
We wanted a way to talk to our notes that felt like talking to someone who actually remembers them.
That's why we integrated LightRAG (Graph-based Retrieval) into Obsidian. Unlike standard plugins that just look for matching text chunks, Neural Composer builds a Knowledge Graph of your ideas, helping you find relationships you might have forgotten.
Standard AI search (Vector RAG) is great for finding similar text. But Graph RAG is better for finding connected ideas.
| Feature | Standard Vector Search | Neural Composer (Graph) |
|---|---|---|
| How it searches | Finds matching keywords/concepts | Follows relationships between entities |
| Best for | Simple questions ("What is X?") | Complex questions ("How does X influence Y?") |
| Context | Often fragmented | Holistic and interconnected |
We designed this to fit into different workflows. Here is how it might help you:
We wanted the experience to be as smooth as possible:
[1]), so you can always verify the source.Full documentation (in construction) on wiki
This plugin requires a small backend setup (Python) to run the LightRAG engine.
pip install "lightrag-hku[api]"
(We recommend using a virtual environment).main.js, manifest.json, and styles.css from the Releases page and place them in your .obsidian/plugins/neural-composer folder. Enable it in Obsidian.Go to Settings > Neural Composer.
lightrag-server executable and choose a folder for your data.You are ready! You can now right-click a folder to ingest your notes and start chatting with your vault.
For those who like to tinker, we added some power features:
Neural Composer is designed with privacy as a core principle. Here is an exact account of every network call the plugin makes and why.
| Destination | When | Why |
|---|---|---|
| Your AI provider (OpenAI, Anthropic, Gemini, Groq, etc.) | Every chat message or ingestion | To generate responses and embeddings. Only the notes you explicitly ingest or attach are sent. |
Your local LightRAG server (localhost) |
Every query and ingestion | The plugin talks to the LightRAG Python process running on your own machine. No data leaves. |
| Your custom / remote LightRAG server | Only if you configure a remote URL | If you opt in to a remote server, queries go to that URL. This is off by default. |
If you use local models (Ollama) and a local LightRAG server, no data ever leaves your machine.
github.com or any other domain at runtime. GitHub URLs visible in the settings UI are navigation links only — they are never fetched programmatically.data.json in your local vault.The Obsidian automated scanner flags several capabilities. Here is the plain-English explanation for each:
| Disclosure | Why it exists |
|---|---|
Direct filesystem access (fs) |
Required to write the LightRAG .env configuration file to your chosen work directory, which may be outside the vault. |
Shell execution (child_process) |
Required to start and stop the local LightRAG Python server. The command is the exact path you configure in settings — no user input is ever interpolated into shell arguments. |
| Vault enumeration | Required to list your notes for ingestion and for the RAG search index. Only metadata (file paths) is read; content is read only when you explicitly ingest a file. |
| Clipboard access | Inherited from the Lexical rich-text editor used in the chat input. Allows standard paste operations. |
Base64 calls (atob/btoa) |
Used by bundled dependencies: @modelcontextprotocol/sdk decodes JWT tokens for MCP OAuth, and sigma/three-forcegraph encode WebGL shader data. No API keys or sensitive data are encoded this way. |
Dynamic code execution (new Function) |
Used by two bundled libraries: ngraph.forcelayout generates optimized N-dimensional physics code for the 3D graph, and ajv (via the MCP SDK) compiles JSON schema validators. Neither is used to execute user-provided code. |
This project is a labor of love, built upon the shoulders of giants:
We hope this helps you connect the dots in your own second brain. Happy composing!