kg — local knowledge graph CLI
Beta - This software is in active development. APIs may change.
A fast CLI for managing local knowledge graphs (.kg and .json) with native MCP server support. Built for LLM chat workflows: readable text by default, --json for automation.
Why kg
- One local graph per domain - store concepts, processes, rules, bugs, decisions
- Fast lookup and search - fuzzy, BM25, vector modes
- Quality controls - checks, audits, missing facts/descriptions, duplicate detection
- LLM integration - native MCP server (
kg-mcp) with graph-safe tools - Flexible I/O - import/export CSV, JSON, Markdown, KQL queries
- Backward compatible runtime - legacy JSON mode via
--legacy
Install
Option 1: quick installer script (recommended for end users)
|
The installer auto-detects Linux x86_64, macOS x86_64, and macOS Apple Silicon releases.
Option 2: install from crates.io
Option 3: install from source (recommended for contributors)
60-second quick start
# 1) Create graph
# 2) Add two nodes
# 3) Connect them
# 4) Search and inspect
# 5) Validate quality
See kg --help and kg graph --help for the full command tree.
For a more complete onboarding flow, go to docs/getting-started.md.
Command patterns (important)
Most commands use this structure:
Examples:
There is also a backward-compatible shorthand still accepted in many places:
MCP Server
The primary way to integrate with LLMs:
kg-mcp uses stdio transport (no HTTP server to expose).
Config for OpenCode/Claude Desktop:
Tools: node find/get/add/modify/remove, edge add/remove, stats, check, audit, quality, export-html, feedback, and a shell-like kg tool for multi-command scripts.
See docs/mcp.md for full docs.
Common workflows
# List available graphs
# Show graph health quickly
# Use strict parser checks for .kg files (optional)
KG_STRICT_FORMAT=1
# Keep JSON-first behavior for older pipelines
Documentation
Detailed guides in docs/:
docs/getting-started.md- beginner guide with practical examplesdocs/build-graph-from-docs.md- step-by-step playbook to build a graph from raw documentationdocs/ai-prompt-graph-from-docs.md- ready-to-use AI prompt forkg-mcpgraph constructiondocs/troubleshooting.md- common problems and fixesdocs/sprint-plan.md— roadmapdocs/kql.md— KQL query languagedocs/import-csv.md— CSV importdocs/import-markdown.md— Markdown importdocs/mcp.md— MCP server referencedocs/decision-backend.md— backend selectiondocs/eyg-rollout-notes.md- migration, strict mode, rollback notes
Project skills (for AI workflows)
If your AI client supports repo skills, these templates are available:
skills/kg/SKILL.md- core read/write graph operationsskills/kg-builder/SKILL.md- build graph from docs/code/specsskills/kg-assistant/SKILL.md- collaborative graph improvement with userskills/kg-gardener/SKILL.md- graph quality and maintenance workflow
FAQ
Should I use kg graph <name> ... or kg <name> ...?
Use kg graph <name> ... as the default pattern. The shorthand kg <name> ... is kept for backward compatibility.
Why did my graph file change from .json to .kg?
Default runtime prefers .kg and can auto-migrate from .json side-by-side. Your original .json file is kept.
What are .kgindex and .kglog files?
They are sidecars for .kg graphs: .kgindex helps fast node lookup, .kglog stores lightweight hit/feedback events.
How do I keep old JSON-first behavior?
Run graph commands with --legacy, for example: kg graph fridge --legacy stats.
A command fails with validation errors. What now?
Run kg graph <graph> check --errors-only first, fix the reported node/edge issues, then retry your command.
Which output format should I use in scripts?
Use --json in automation and CI. Use default text output for interactive local usage.
Need help fast?
If users are unsure how to start, share these three commands first:
Then follow docs/getting-started.md.
Benchmarks (large graphs)
Generate a big synthetic graph JSON:
Run criterion benchmarks (sizes configurable via env vars):
KG_BENCH_NODES=20000 KG_BENCH_EDGES_PER_NODE=5
Other benches:
# End-to-end CLI benchmarks (spawns `kg`, covers JSON + persisted BM25 index + redb backend)
KG_BENCH_NODES=20000 KG_BENCH_EDGES_PER_NODE=5
# Persisted BM25 index benchmarks (build/save/load)
KG_BENCH_NODES=20000 KG_BENCH_EDGES_PER_NODE=5