System
| Requirement | Notes |
|---|---|
| Python 3.11+ | 3.12 recommended. Verify with python --version. |
Git 2.30+ on PATH | Repowise reads commit history; older Git is missing flags it relies on. |
| ~2 GB free disk | For the index of a medium repo (3,000 files). Larger repos scale roughly linearly; see Scale. |
| An LLM provider key (optional) | Only for model-written prose. See LLM provider. |
Officially tested on macOS, Linux, and Windows (PowerShell). WSL2 works the same as native Linux.
Languages
You don't need the language toolchain installed for the language
you're indexing, because repowise parses source statically with tree-sitter.
The one exception is TypeScript monorepos, where having tsc
available improves resolver accuracy for path-mapped imports.
See Language support for the full coverage matrix: 27 languages parsed to a full AST, 41 on the support ladder.
Scale
Large public repositories, indexed end to end on one laptop (31 GB RAM),
keyless (repowise init --no-prose), limited to 8 CPUs and 2 parse workers:
| Repository | Size | First index | Peak memory | Index on disk |
|---|---|---|---|---|
| dotnet/aspnetcore v8.0.31 | 1.5M lines, 15,510 files | 20 min | 4.0 GiB | 1.4 GiB |
| elastic/elasticsearch v8.19.22 | 4.0M lines, 34,315 files | 52 min | 7.8 GiB | 4.2 GiB |
| dotnet/runtime v8.0.31 | about 15M lines, 58,924 files | 120 min | 11.7 GiB | 7.7 GiB |
Peak memory is the whole process tree. The first index is the only long
one: every update after it is incremental, and an update with no changes on
aspnetcore takes about 4 seconds. Git analysis reads the newest 5,000 commits
by default (commit_limit). On a memory-constrained machine, lower
REPOWISE_PARSE_WORKERS; for very large repositories,
repowise init --mode fast builds the graph and essential git signals first.
LLM provider (optional)
Not a requirement. repowise init never needs an API key. Without a
provider it renders the whole wiki from your code's structure and exits 0.
You get the graph, git signals, hotspots, ownership, code health, dead
code, decision archaeology, and a complete set of wiki pages. See
Deterministic wiki.
A provider is what buys you model-written prose and, with an embedder, semantic search. When you want that, bring the key:
- Anthropic: default.
ANTHROPIC_API_KEY=sk-ant-... - OpenAI:
OPENAI_API_KEY=sk-...plus--provider openai - Gemini:
GEMINI_API_KEY=...plus--provider gemini - Ollama: fully offline.
--provider ollama, no key needed. - Any local OpenAI-compatible server (LM Studio, vLLM): set a
base_urlinconfig.yaml, no key needed. See Environment variables.
To guarantee a run spends nothing even when a key is present in the
environment, pass --no-prose.
Optional but useful
uvfor an isolated install (uv tool install repowise).- A second machine for hosted indexing: if you'd rather not run Python at all, the hosted version manages all of this for you.