Skip to content

Repository files navigation

Rongo

Turns a codebase into something the rest of the company can ask. Plain-language questions, answers in domain terms, a diagram where the shape is the point.

Rongo is a web app. It runs on a server, clones the repositories you list, indexes them, and answers questions about them in a browser. No install, no checkout, no terminal, no coding agent: the people who have to know what the software does ask in their own words, and the answer comes back in theirs. The name comes from Rongorongo, the Easter Island script that nobody has deciphered.

A question answered in the Analyst voice, with the flowchart it produced and the places the answer was read from

What a reader gets

An answer, not a search result. Ask why an order can be cancelled twice, or what happens to a customer record on close, and Rongo reads the code that matched and explains the mechanism.

A diagram where the shape is the answer. A process worth following step by step comes back as a flowchart, an exchange between services as a sequence diagram, a set of states as a state machine, a data model as an entity diagram, and which event feeds which topic as a mapping.

Somewhere to look. Every claim shows where it was read, and one click opens that file inside Rongo, at the state it was indexed at.

A question back, when the question could mean several things. Rongo asks which product or which reading was meant instead of answering the wrong one, and when a question spans more of the estate than one answer can carry, it asks which repositories to narrow to.

Your language. A thread is answered in the language its first question was asked in.

A link to send on. Any thread can be shared as a read-only page, frozen where you shared it, and revoked later.

Developers can switch a thread to the Developer voice, which explains how the code does it and shows the code inline.

How it works

One Go binary, one SQLite file (FTS5 for text, sqlite-vec for embeddings), React UI embedded in the binary. Symbols come from universal-ctags, search from ripgrep, checkouts from git. Chat goes to the models named by BACKEND_LLM_MODEL and BACKEND_LLM_GATE_MODEL (MiMo by default), embeddings to text-embedding-3-small; hosts, keys and an optional LiteLLM gateway in front are llmwire's variables, see .env.example.

Projects are listed in repos.yaml, each holding the repositories it is built from; a library several products share is declared once under libraries:, named with uses: from any of them, and searched as part of each. Credentials never live in that file, they come from BACKEND_* environment variables, one per forge host. Any git remote works: GitHub and Bitbucket Data Center are the ones exercised, over https with a token or over ssh with a mounted key.

Running it

This part is for whoever sets it up. Everybody else gets a link and their usual company login.

make dev runs it locally with hot reload. Needs Go, Node.js, git, rg and universal-ctags (the BSD ctags macOS ships doesn't work and Rongo says so at startup).

compose.yaml runs it in production behind a TLS-terminating reverse proxy with OIDC login, which is how the rest of the company gets in. The comment at the top of that file covers the first run. Without an identity provider, BACKEND_AUTH_MODE=password signs one admin in through a login form; the password is stored as a bcrypt hash made with rongo -hash-password, see .env.example.

Development

make test        # Go tests
make fe-test     # typecheck and frontend tests
make coverage    # both, with the 75% floor CI enforces
make build       # bin/rongo with the UI embedded

Design decisions and invariants: AGENTS.md. The measurements behind them: docs/measurements/. Checks that need a real browser: docs/manual-verification.md.

About

Turns a codebase into something the rest of the company can ask. Plain-language questions, answers in domain terms, flowcharts and sequence diagrams where the process is the point.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages