# Requirements

System and toolchain requirements for self-hosted repowise, covering Python, Git, disk and memory, measured scale on large repos, and the optional LLM key.

## 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](https://docs.repowise.dev/installation/requirements#scale). |
| **An LLM provider key** (optional) | Only for model-written prose. See [LLM provider](https://docs.repowise.dev/installation/requirements#llm-provider-optional). |

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](https://docs.repowise.dev/installation/languages) for the full
coverage matrix: 28 languages parsed to a full AST, 42 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](https://docs.repowise.dev/intelligence/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_url` in `config.yaml`, no key needed. See
  [Environment variables](https://docs.repowise.dev/installation/env-vars#local-and-openai-compatible-gateways).

To guarantee a run spends nothing even when a key is present in the
environment, pass `--no-prose`.

## Optional but useful

- **`uv`** for 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](https://docs.repowise.dev/hosted/vs-self-hosted)
  manages all of this for you.
