Hi all — I built phebs, a self-hosted code search server in a single Go binary: https://phebs.com (code: GitHub - bmeddeb/phebs: Self-hosted code search and static change-impact analysis for microservice repositories — one Go binary, Apache-2.0 · GitHub)
Search serving uses zoekt as an in-process library; index builds run in a child process compiled from the same go.mod so a pathological index build can’t OOM the serving process. State and job queues live in a supervised SurrealDB child (jittered polling, no Redis). The UI is React embedded via go:embed; the API is huma v2 so OpenAPI comes free.
Shipped: search/browse across GitHub/GitLab/Gitea/plain Git/local, SCIP navigation, blame/history, auth + OIDC + permissions + audit, and a stateless MCP server. Experimental (default-dark): static caller maps and contract evidence with explicit coverage certificates.
Architecture decisions are in an append-only dated ledger (PLAN.md). Feedback very welcome — especially on the supervised-children operational model and the evidence/coverage approach.