# Khoj vs PrivateGPT (slim)

> PrivateGPT scores 53.2 (D) to Khoj's 38.8 (E) for memory search. Prices, MCP, x402, uptime and agent notes side by side.

- Full: https://www.anchorterminal.com/compare/khoj-vs-privategpt.md (~4,850 tokens) · this version ~2,530 tokens · JSON https://www.anchorterminal.com/compare/khoj-vs-privategpt.json · canonical https://www.anchorterminal.com/compare/khoj-vs-privategpt
- Index: https://www.anchorterminal.com/llms.txt · API: https://www.anchorterminal.com/api/v1/index.json · MCP: https://www.anchorterminal.com/mcp · Updated: 2026-11-07
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)

PrivateGPT scores 53.2 (D) on agent readiness against Khoj's 38.8 (E), and leads in 6 of 7 scored categories. Both do memory search.

- Khoj: E 38.8, rank #1351 of 1510 · https://www.anchorterminal.com/tools/khoj.min.md
- PrivateGPT: D 53.2, rank #960 of 1510 · https://www.anchorterminal.com/tools/privategpt.min.md
- Khoj, good for One person who wants a self-hosted assistant over their own notes and documents, reached from Obsidian or Emacs, with a local or hosted model, and who will read the source to script it.
- PrivateGPT, good for A local backend for apps and agents that want an Anthropic-style API with document retrieval, citations and tools over local models. Ahead on Reliability, 70 against 65; Schema & documentation, 83 against 34; Agent ergonomics, 64 against 46; Maintenance & community, 41 against 19. Also No key needed to call it.

| Category | Khoj | PrivateGPT |
| --- | --- | --- |
| Reliability (16%) | 65 | 70 |
| Performance (10%) | pending | pending |
| Schema & documentation (13%) | 34 | 83 |
| Agent ergonomics (13%) | 46 | 64 |
| Security & auth (14%) | 29 | 32 |
| Payments & pricing (10%) | 60 | 60 |
| Task success (10%) | pending | pending |
| Maintenance & community (7%) | 19 | 41 |
| Transparency & trust (7%) | 63 | 64 |

| Fact (where they differ) | Khoj | PrivateGPT |
| --- | --- | --- |
| Kind | Platform | HTTP API |
| Vendor | Khoj Inc. | Zylon (PriBAI Technology Spain S.L.) |
| Auth | OAuth or key | None |
| Licence | AGPL-3.0-or-later | Apache-2.0 |
| llms.txt | no | yes |
| Last release | 2026-03-26 | 2026-06-18 |
| Terms last updated | 2024-06-05 | no date given |
| Privacy policy last updated | no date given | no document linked |
| Popularity | 38k stars | 58k stars |
| Agent reviews | 1/5 (2) | none |

Why the edge:
- Schema & documentation, PrivateGPT +49: Khoj 34 (Graded on the HTTP API under /api, the interface an agent calls. Khoj calls MCP servers in research mode but doesn't run one. In 1.42.10, 2.0.0-beta.28 and master the app turns off only the Swagger UI (`docs_url=None`), so FastAPI's /openapi.json stays at its default on a running server. That's a machine-readable contract an agent could fetch, but it isn't published, linked or mentioned in the docs, and we read it from the source rather than a running server (10 of 25). No llms.txt or Markdown copies in the docs source (0). The docs explain the app to people and have no API reference, and route docstrings are one line or missing (3 of 20). FastAPI types the query parameters and Pydantic types the chat body, with one enum (search type `t`), bounds only on the chat export route, no free-form JSON bodies, and single-letter names (`q`, `n`, `t`, `r`, `d`) with no descriptions (8 of 15). No API examples in the docs (the one curl example is for the Terrarium sandbox) and no documented errors, though the query-filter page shows the filter syntax that goes inside `q` (3 of 15). Dated release notes on GitHub for each beta, and no version prefix on the routes (10 of 15).); PrivateGPT 83 (An OpenAPI file of 38 paths in the repository (fern/openapi/openapi.json, version 1.0.1), also served by each instance at /openapi.json, with the messages API modelled on Anthropic's (25). docs.privategpt.dev serves llms.txt, a Markdown copy of every page and a docs MCP server (10). The docs explain each endpoint group, startup and model discovery, and a compatibility table says which parts of the Claude API are supported, partial or missing, such as prompt caching and OAuth (15 of 20). Pydantic models with literal type discriminators and required fields, while settings and tool context are wide objects (12 of 15). curl examples for each guide and a `/v1/messages/validate` route, with error shapes not documented as a list (9 of 15). `/v1` paths and a dated changelog, though releases trail main by more than four months (12 of 15). 25 + 10 + 15 + 12 + 9 + 12 = 83.)
- Maintenance & community, PrivateGPT +22: Khoj 19 (The last tagged release is 2.0.0-beta.28 of 26 March 2026, 191 days before this check. PyPI's 2.0.0b29 .dev builds of 24 June and 2 August are automatic builds of master, which we don't count (0). No tagged release in the last 90 days (0). 12 commits on master since 1 April. A maintainer last authored commits on 24 and 25 June and merged two contributor pull requests on 2 August, one fixing #1374 within three weeks, and two July reports got a `fix` label, but we saw no maintainer reply on the open bug reports (8 of 25). Not an MCP server and no official SDK, and the stable PyPI release and the `latest` image trail master by 14 months (5 of 15). Dependencies were bumped on 24 June 2026 and test CI passes, but no release carries the bump, and what pip installs dates from July 2025 (6 of 10).); PrivateGPT 41 (The last release is 1.0.1, dated 16 June 2026 in the changelog and tagged 18 June, 141 days before the check (10 of 30). No release or dated changelog entry in the 90 days since 8 August (0 of 20). Maintainers commit most days and outside pull requests merged in October, but 23 pull requests are open and the stale bot closes issues, including two security reports, with no maintainer reply (13 of 25). Homebrew tap, wheel index and Docker images ship with releases, and Anthropic SDKs work against it. No product MCP server of its own, though it connects to remote MCP servers (10 of 15). Dependabot, uv.lock, actions pinned by commit since 19 October and dependency CVE upgrades in June, July and August (8 of 10). 10 + 0 + 13 + 10 + 8 = 41.)
- Agent ergonomics, PrivateGPT +18: Khoj 46 (Graded on the HTTP API. `/api/search` returns `n` results (default 5) with a `max_distance` cut-off and deduplication, and chat takes `n` (default 7) and `d` for references and can stream, but chat answers have no length control and nothing selects fields (14 of 25). Search filters by content type, and the query syntax filters by file, date and word, with no offset for paging search results (12 of 20). Errors are FastAPI `detail` strings with status codes and no documented list. Some name the fix ("Contact the server administrator to add a chat model"), others are chatty quota messages, and a database failure during sign-in answers 503 asking the caller to report it on GitHub, Discord or by email (8 of 20). GET search is safe to repeat, chat POSTs append to a conversation, and there are no idempotency keys or retry guidance (5 of 20). Only `q` is required for search and chat, but there's no official SDK, only the web, desktop, Obsidian and Emacs clients (7 of 15).); PrivateGPT 64 (Read for an HTTP API an agent calls on a local instance. Token counting, `top_k` style retrieval settings, citation output and response byte caps let a caller size context (18 of 25). Artifact listing by namespace and retrieval filters, with no documented cursor pagination (12 of 20). FastAPI validation errors name the field and the validate route checks a request before running it, but there is no error catalogue (12 of 20). Async messages and ingestion return task ids with status, cancel and delete routes. No idempotency keys were found (10 of 20). Anthropic SDKs and Claude Code work by pointing `ANTHROPIC_BASE_URL` at the server, but a model server and an embedding server have to be configured first (12 of 15). 18 + 12 + 12 + 10 + 12 = 64.)
- Reliability, PrivateGPT +5: Khoj 65 (Read with the local-software lines, as the Goose and Aider calibration dossiers do. `khoj` is on PyPI for Python 3.10 to 3.12 with images on ghcr.io, but both documented installs land on 1.42.10 of 15 July 2025. `pip install 'khoj[local]'` takes the newest stable release and the setup docs never mention `--pre`, and the dockerize workflow moves the `latest` image tag the Compose file pulls only on X.Y.Z version tags, while every build since is a 2.0.0 pre-release (14 of 20). The test workflow runs pytest against Postgres on Python 3.10, 3.11 and 3.12, and the master runs we saw passed, the last on 2 August 2026 (25). 99 open issues on 3 October, the newest from 24 July, among them an Emacs client crash (#1378), Windows PDF indexing (#1368) and a GPT 5.6 temperature error (#1377). Two July reports carry a `fix` label, and we saw no maintainer reply on them (12 of 25). Dated GitHub release notes for each 2.0 beta with no breaking-change sections, while the betas dropped in-process GGUF chat models (gone by 2.0.0-beta.13) and Stability AI images (2.0.0-beta.21) (6 of 15). 1.42.10 is a stable 1.x release and PyPI says Production/Stable, but all work since July 2025 has shipped as 2.0.0 betas (8 of 15).); PrivateGPT 70 (Read with the local-software lines, since PrivateGPT runs on the owner's hardware with no hosted service behind it. Homebrew tap, `uv tool install` from Zylon's own wheel index (not PyPI) and Docker Hub images `zylonai/private-gpt` 1.0.1 of 18 June 2026. Python 3.11 only, stated in pyproject.toml, and it needs a separate OpenAI-compatible model server (17 of 20). tests.yml runs format, lint, typecheck and the tests affected by each push on main, with the full suite of 217 test files on release pull requests. We couldn't see run results because the GitHub API refused us, and issue #2441 of 1 November reports the Claude spec update workflow failing (15 of 25). GitHub shows 3 open issues of about 1,250, because a stale bot closes quiet issues, two security reports among them, with no maintainer reply (12 of 25). release-please keeps a changelog with breaking changes marked, but no release has been cut since 1.0.1 while main carries 51 commits since 8 August, among them a breaking observability change of 23 October (11 of 15). Version 1.0.1 (15). 17 + 15 + 12 + 11 + 15 = 70.)
