What we detect
Riftmap also detects what each repo produces — Docker images, npm packages, Python distributions, Helm charts, Terraform modules — and matches producers to consumers, so an edge can exist even when the two repos never name each other directly.
What we do not detect yet
Runtime coupling. A service that calls another service over HTTP declares nothing about it in any manifest. If your repos are namedbilling-api, zoho-client, orders-client, most of your real architecture is service-to-service HTTP — and Riftmap cannot currently see any of it. This is the single largest gap, and the one most likely to explain a near-empty graph.
Contract-level coupling. Shared OpenAPI specs, protobuf definitions and GraphQL schemas describe exactly the dependencies that runtime coupling creates. Parsing them is the planned answer to the gap above.
Shared infrastructure. Two services on the same database, queue or bucket are coupled in practice and identical in every manifest.
Monorepo-internal imports. Within a single repository, Riftmap maps what that repo depends on — not how its internal packages depend on each other.
Vendored and copy-pasted code. Code duplicated rather than depended on leaves no declaration behind.
Why your graph might look empty
A scan can be completely correct and still produce very few edges. The usual cause is not a bug and not a misconfiguration:- You don’t publish internal packages. If nothing in your org depends on anything else in your org by name, there is no manifest-level edge to find. Orgs that build many standalone services and share nothing through a package registry legitimately have almost no packaging coupling.
- Your coupling is runtime, not packaging. See above. This is very common for services organisations, and it is our gap, not yours.
- The scan didn’t see everything. Check the scan on the Scans page:
failed_repos > 0means some repos could not be processed, and a repository-limit banner means some were skipped by your plan.
react, fastapi, alpine), and those are supposed to stay unresolved. The only meaningful question is whether an unresolved reference names a repo in your own org.
