Skip to content

meshgraph/meshgraph


Four stories. One problem.

The CEO who made a bad call

Emma approved the migration to microservices. It sounded right in the exec summary. What she didn't know — because it was compressed through four layers of management — was that the team had already evaluated and rejected microservices six months earlier. The reasoning was in a Slack thread. Nobody escalated it. The migration cost $2M and eighteen months. The original rejection had three paragraphs explaining exactly why.

The information existed. It just couldn't travel.


The new hire who spent three months lost

Mike joined as a senior engineer. Week one, he asked "why is the auth service built this way?" Five people gave him five different partial answers. He spent his evenings reading old PRs, piecing together archaeology from git blame. The person who made the original decision? She left a year ago. It took Mike three months to become productive. Not because he was slow — because the context wasn't accessible.

The knowledge walked out the door.


The engineer who quit — and took everything with her

Sarah was the only person who truly understood the payment system. She'd built it from scratch, navigated two PCI audits, and survived three Black Friday incidents. When she gave her two weeks, leadership panicked. They scheduled "knowledge transfer" sessions. Four hours of frantic meetings. It wasn't enough. The team spent the next four months reverse-engineering what Sarah carried in her head.

No one person should be a single point of knowledge failure.


The meeting that didn't need to happen

Tuesday at 2pm. Alex gets pulled into a conference room. Seven people. The question: "Why did we pick Postgres over Mongo?" Alex made this decision three months ago. He wrote the reasoning in the PR description. He wrote it in the RFC. He explained it in the architecture review. Nobody read any of it. He spends 45 minutes re-explaining what's already documented in three places.

The answer existed in writing. Three times. Nobody could find it.


These aren't edge cases. This is every growing organization.

meshgraph exists because every org deserves to remember what it knows.


The cost of forgetting

At 10 people, coordination is free. Everyone just knows.

At 50, you start scheduling meetings to "align."

At 200, you have entire teams whose job is to make sure other teams know what's going on.

At 1,000+, 60% of your payroll goes to coordination — people whose job isn't to produce, but to make sure producers are producing the right things.

The hierarchy is a compression algorithm. Each layer compresses reality into a 30-minute summary for the layer above. Five layers up, the CEO is making decisions based on a lossy JPEG of what's actually happening.


How meshgraph works

You feed it your documents. It builds a living knowledge graph. You ask it questions. It answers with traced sources.

meshgraph decision trace

That's a decision trace — not just what was decided, but why. The observation that triggered it. The reasoning that was considered. The action that was taken. The outcome that followed. With sources you can click.

This is what hierarchy loses. A CEO never sees the observation, the benchmark, or the tradeoff analysis. They just hear "we switched databases."

meshgraph keeps the full chain. Forever. For everyone.


Before and after

Before and after meshgraph

Who is this for?

Engineering teams

"Why did we pick this architecture?"

Every new hire asks. Nobody remembers the full reasoning. With meshgraph, the decision trace lives forever. Onboarding drops from months to days.

Startups scaling from 10 to 100

"We used to just know. Now we don't."

You're about to lose the magic of small-team coordination. meshgraph keeps it alive without adding management overhead.

Agencies & consultancies

"What did we learn last time?"

Multiple clients, rotating teams, repeated mistakes. meshgraph makes cross-project knowledge searchable. Stop re-learning what you already know.

Product teams

"Why did we kill that feature?"

It wasn't random. There was research, user feedback, a tradeoff decision. But it's buried in a Jira comment from 18 months ago. meshgraph surfaces it in seconds.

Open source maintainers

"Why was this designed this way?"

Contributors shouldn't have to dig through 3 years of issues. The decision trace tells the story. Better docs, better contributions, fewer repeated discussions.

Ops & manufacturing teams

"Who changed the supplier? When? Why?"

Not everything lives in code. Operational decisions matter. meshgraph tracks them the same way it tracks architectural ones.


The three-step loop

1. Feed it

Paste meeting notes. Upload specs. Connect GitHub (coming soon). meshgraph's AI extracts people, projects, decisions, and relationships automatically. You don't organize anything.

2. It builds the graph

Every entity becomes a node. Every relationship becomes an edge. Every decision gets a full trace. The graph grows with your organization — living, connected, always current.

3. Ask it anything

"Who knows about payments?" "What depends on the auth service?" "What did we learn from the outage?"

Answers with sources. Not hallucinations — traced, cited answers from your own knowledge.


Get started in 60 seconds

With Docker (recommended)

git clone https://github.com/meshgraph/meshgraph
cd meshgraph
docker compose up

Without Docker

git clone https://github.com/meshgraph/meshgraph
cd meshgraph
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python main.py

Open http://localhost:8000 — the setup wizard walks you through the rest.

Setup wizard

First run asks three things:

Step What Options
1 Your org name Any name
2 Admin password Min 6 characters
3 Which AI to use Claude · GPT · Ollama (fully local — nothing leaves your machine)

That's it. You're running.


Your data stays yours

Promise How
Self-hosted Runs on your machine, your server, your cloud. Nobody else touches it.
No telemetry Zero phone-home. Zero tracking. Zero analytics. We literally can't see your data.
No vendor lock-in SQLite database. One file. Export as JSON anytime. Walk away whenever you want.
BYOK Bring your own API key. It stays in your config. We never see it.
Fully offline Ollama support means you can run with local LLMs. No internet required. Ever.
Apache 2.0 Use it for anything. Forever. Including commercial. Fork it. No strings.

Architecture

graph TB
    subgraph INPUT["What goes in"]
        M["Manual Paste<br/>docs, notes, specs"]
        GH["GitHub<br/>PRs, issues, commits"]
        SL["Slack<br/>threads, decisions"]
    end

    subgraph ENGINE["meshgraph engine"]
        EX["LLM Extraction<br/>entities + decisions"]
        GRAPH[("Graph DB<br/>SQLite")]
        VEC[("Vector Store<br/>ChromaDB")]
        DEC[("Decision Traces")]
        QE["Query Engine<br/>search + traverse + answer"]
    end

    subgraph OUTPUT["What comes out"]
        VIZ["Graph Visualization"]
        CHAT["Chat Answers<br/>with source traces"]
        API_OUT["REST API"]
    end

    M --> EX
    GH -.-> EX
    SL -.-> EX
    EX --> GRAPH
    EX --> VEC
    EX --> DEC
    GRAPH --> QE
    VEC --> QE
    DEC --> QE
    GRAPH --> VIZ
    QE --> CHAT
    GRAPH --> API_OUT
Loading

Decision trace — the key differentiator

graph LR
    O["Observation<br/><i>what was seen</i>"] --> R["Reasoning<br/><i>what was considered</i>"]
    R --> A["Action<br/><i>what was decided</i>"]
    A --> OUT["Outcome<br/><i>what happened</i>"]

    style O fill:#fef3c7,color:#92400e
    style R fill:#dbeafe,color:#1e40af
    style A fill:#dcfce7,color:#166534
    style OUT fill:#f3e8ff,color:#6b21a8
Loading

Data model

graph LR
    subgraph Nodes
        P["Person"]
        PR["Project"]
        D["Decision"]
        DOC["Document"]
        T["Task"]
    end

    P -->|works_on| PR
    P -->|decided| D
    P -->|created| DOC
    D -->|informed_by| DOC
    T -->|blocked_by| T
    PR -->|depends_on| PR
    D -->|supersedes| D

    style P fill:#6366f1,color:#fff
    style PR fill:#22c55e,color:#fff
    style D fill:#f59e0b,color:#fff
    style DOC fill:#3b82f6,color:#fff
    style T fill:#06b6d4,color:#fff
Loading

Tech stack

Layer What Why
Backend Python, FastAPI Fast to build, fast to run
Database SQLite Zero config. One file. One backup.
Search ChromaDB Semantic search, runs in-process
AI Claude / GPT / Ollama You pick. Your key.
Frontend Vanilla HTML/JS No build step. No node_modules.
Graph Viz Cytoscape.js Interactive, clickable
Deploy Docker Compose One command. Done.

Full architecture docs: docs/architecture.md


API

Everything meshgraph does, you can do via API:

GET    /api/status             Setup check + version
POST   /api/setup              First-run wizard
POST   /api/login              JWT authentication
POST   /api/ingest/text        Ingest a document
GET    /api/nodes              List/filter nodes
GET    /api/nodes/:id          Node detail + edges + decision trace
POST   /api/nodes              Create a node manually
DELETE /api/nodes/:id          Delete a node
GET    /api/edges              List/filter edges
POST   /api/edges              Create an edge
DELETE /api/edges/:id          Delete an edge
GET    /api/graph              Full graph for visualization
GET    /api/graph/neighbors/:id  Connected nodes within N hops
POST   /api/query              Ask a question in natural language
GET    /api/search?q=          Semantic search across all content
GET    /api/decisions          List all decision traces
GET    /api/decisions/:id      Full decision trace detail
POST   /api/decisions          Log a decision manually
GET    /api/stats              Node/edge/decision/vector counts
GET    /api/export             Export full graph as JSON

Roadmap

  • Manual document ingestion with AI extraction
  • Graph storage + interactive visualization (Cytoscape.js)
  • Dark/light theme with persistence
  • AI-powered chat with animated thinking, suggestion pills, source citations
  • Decision traces (observation → reasoning → action → outcome)
  • Semantic search (ChromaDB)
  • Docker one-command deploy
  • LLM-agnostic (Claude, GPT, Ollama — tested with Ollama locally)
  • Full REST API (15 endpoints) + JSON export
  • GitHub connector — auto-ingest PRs, issues, contributors
  • Slack connector — detect decisions in threads
  • Timeline view — chronological decision history
  • Team permissions — who sees what
  • Conflict detection — flag contradictory decisions across teams
  • Org health metrics — decision velocity, knowledge concentration

Contributing

We'd love your help. See CONTRIBUTING.md.

Area What's needed
Connectors Slack, Linear, Jira, Google Docs, Notion
Extraction Better prompts for entity and decision extraction
Graph viz Layout algorithms, clustering, filtering
Docs Tutorials, deployment guides, real-world examples
Tests Unit tests for graph ops and extraction

License

Apache 2.0 — free forever. Fork it. Extend it. Ship it. No strings.


Built because every team deserves to remember what it knows.