CodeStackFoundry

DEVELOPER TOOLS FOR SPRING BOOT

See your microservice
call graph.

Spring Service Navigator maps every inter-service HTTP call in your Spring Boot workspace from source code alone, and lets you jump between callers and endpoints in one click. No running servers. No instrumentation. Free, and works in IntelliJ IDEA Community Edition.

SERVICE MAP — LIVE FROM SOURCE

GET /api/users/{id} POST /api/orders order-service user-service payment-service

Redrawn from your actual source — this is what the Service Map tool window shows, live.

FEATURED PROJECT

Spring Service Navigator

IntelliJ PLUGIN SPRING BOOT MICROSERVICES

Every RestTemplate, WebClient, RestClient, @FeignClient, and @HttpExchange call site gets a gutter icon that jumps straight to the target endpoint — even across modules, or across services split into separate git repos. Every endpoint gets a reverse-navigation icon back, so you can see the blast radius of a contract change before you make it.

OrderService.java — gutter icon tooltip
Gutter icon tooltip showing the resolved target endpoint, service name, and controller method
View Documentation →

WHAT IT DOES

Six ways it keeps you oriented

→ OUTBOUND

Caller → endpoint, one click

A gutter icon on every HTTP call site jumps straight to the matching controller method, even in a different module.

← INBOUND

Endpoint → every caller

Reverse-navigation icons on @RestController methods list every service that calls them, before you touch the contract.

MAP

Service Navigator tool window

Six tabs: Service Map, Endpoints, Statistics, Dependency Matrix, Unresolved Callers, and Dependency Graph.

RESOLVE

Smart URL resolution

Concatenation, String.format, UriComponentsBuilder, @Value/@ConfigurationProperties, ternaries, and reassigned variables — all resolved per call site.

REPOS

One workspace or many repos

Works whether services are modules in one build, content roots in one window, or opened in separate IntelliJ windows entirely.

STATIC

No runtime required

Built on JavaParser, reading .java source only. Nothing is compiled, instrumented, or executed.

UNDER THE HOOD

URLs built at runtime, resolved at scan time

Real call sites rarely use plain string literals. The resolver handles the patterns actual codebases use — including a variable reassigned between two different calls in the same method, resolved independently per call site.

// @ConfigurationProperties getter, resolved through indirection restTemplate.getForObject(userServiceProperties.getBaseUrl() + "/api/users/" + userId, User.class); // Ternary — both branches resolved and merged; differing segment becomes {var} restTemplate.getForObject(useV2 ? "/api/v2/users/" + userId : "/api/v1/users/" + userId, User.class); // Reassigned per call site — each use resolves to its own value String url = "/api/users/active"; restTemplate.getForObject(url, User[].class); // → /api/users/active url = "/api/users/archived"; restTemplate.getForObject(url, User[].class); // → /api/users/archived

LATEST RELEASE

Spring Service Navigator v1.0.0 Now on JetBrains Marketplace

Feedback & Support

Found a bug or have a feature request? Open an issue on GitHub.

Visit GitHub →