Supported stacks
Three kinds of reader. tree-sitter parses the code into a syntax tree and matches shapes, so it follows constants, template strings and ternaries. regex adapters read source text with patterns written for each framework: fast to add, exact on the common shapes, blind to the unusual ones. Proxy and gateway files are read as config. Every repo page says which one ran and what it could not read.
| Stack | Reader | Routes | HTTP calls | Models | Queues | Auth on routes | Deps and advisories | Env keys |
|---|---|---|---|---|---|---|---|---|
| Node · Express, Fastify, Next.js API | tree-sitter | ● incl. file routes | ● | ● Mongoose | ● amqplib, cron, Socket.io | ● middleware | ● npm audit, OSV | ● |
| Vue, React, Next.js (browser code) | tree-sitter | – | ● axios, fetch, request, $http, $.ajax, store actions | – | ◐ Socket.io client | – | ● | ● |
| Flutter · Dart | regex | – | ● Dio, http | – | – | – | ● pub.dev, OSV | – |
| Java, Kotlin · Spring Boot, Quarkus, Jakarta EE | regex | ● MVC, WebFlux, Data REST, JAX-RS, OpenAPI specs | ● RestTemplate, WebClient, RestClient, Feign, REST clients, Apache and Java 11 HttpClient | ● JPA, Mongo | ● Rabbit, Kafka, JMS | ◐ method annotations | ● Maven, Gradle, OSV | ● |
| Python · FastAPI | regex | ● with router prefixes | ● requests, httpx, urllib, gateway decorators | ● SQLModel, SQLAlchemy | ● pika, Kafka | ● dependencies | ● PyPI, OSV | ● incl. BaseSettings |
| Python · Django, DRF | regex | ● nested urls.py, routers | ● | ● ORM | ● | ◐ mixins, permission_classes | ● | ● |
| Python · Flask | regex | ● blueprints | ● | ● SQLAlchemy | ● | ◐ decorators | ● | ● |
| Go · mux, gin, chi, net/http | regex | ● | ● net/http | ◐ tagged structs | ● amqp, NATS, kafka-go | – | ● go.mod, OSV | ● |
| C# · ASP.NET Core | regex | ● controllers, minimal APIs | ● HttpClient, Refit, YARP, forwarders | – | – | ◐ [Authorize] | – | ● incl. appsettings |
| Rust · actix-web, axum, rocket | regex | ● | ● reqwest | – | – | – | – | ● |
| PHP · Symfony, Laravel, Slim | regex | ● | ● curl, Guzzle, Http | – | – | – | – | ● |
| Ruby · Sinatra, Rails | regex | ● | ● Net::HTTP, HTTParty, Faraday | – | – | – | – | ● |
| Proxies · nginx, Envoy, Spring Cloud Gateway, Zuul | config | ● each rule | ● the hop each call takes | – | – | – | – | – |
| NestJS routes, GraphQL, gRPC methods | Next, by demand. Until then the connections are drawn (message patterns, gRPC stubs by proto service) without the route of each call. | |||||||
● read◐ partial– not applicable or not yet
Across every stack
- Linking. A call reaches a repo through a declared host, a hostname that is the other repo's application or compose service name, a localhost port, or a connection you declare. Each link carries its evidence: config, inferred, declared.
- Matching. Paths are normalised (
:id,{id},<int:id>all become a wildcard) and matched exactly, by pattern, or flagged: method mismatch, ambiguous, unmatched, dynamic. - Call URLs. A call's URL is worked out the way a reader would: constants, env reads with their defaults, format strings, the parameters of the wrapper it sits in, the base address a client is registered with, the rules of the proxy in front. A value from a .env file can pick the target but never leaves the machine.
- Git. Commits per week, hotspots of the last 90 days, authors; works on a module inside a monorepo.
- Deploy. Dockerfile ports, compose services, GitHub Actions, Jenkins and Bitbucket pipelines.
- Docs. Markdown folders you name are read in place and linked to the repos and routes they mention.
Request a stack
Write to support@kuuhaku.dev or use the feedback box in the product, with a public repository that shows the shape. A regex adapter for a framework takes days, not months.