DOCUMENTATION
Spring Service Navigator
Spring Service Navigator is an IntelliJ IDEA plugin that maps every inter-service HTTP call in a Spring Boot microservices workspace and lets you jump between callers and endpoints in one click — no running servers, no instrumentation, no configuration required. It works in IntelliJ IDEA Community Edition, not just Ultimate.
Install from JetBrains Marketplace →
Why Use This Plugin?
- Gutter icons on every
RestTemplate,WebClient,RestClient,@FeignClient, and@HttpExchangecall site — click to jump straight to the target@RestControllerendpoint, even across modules. - Reverse-navigation icons on endpoint methods — see every caller across every service before you change a contract.
- Works whether your microservices live in one IntelliJ workspace or several separate git repos.
- Runs entirely on
.javasource via static analysis (JavaParser) — nothing is compiled, instrumented, or executed.
Installation
From JetBrains Marketplace (recommended)
- Open Settings/Preferences → Plugins → Marketplace tab.
- Search for Spring Service Navigator.
- Click Install and restart the IDE when prompted.
From disk (manual)
- Download the plugin ZIP from the Releases page.
- Open Settings/Preferences → Plugins → ⚙ → Install Plugin from Disk…
- Select the downloaded
.zipfile and restart the IDE.
Outbound Call Navigation
A → GET style forward-arrow icon appears in the gutter
next to every HTTP call site. Clicking it navigates directly to the matching
@RestController endpoint — even if it lives in a different module. URL building
is resolved automatically for string concatenation, String.format,
UriComponentsBuilder/UriBuilder chains, lambda URI builders,
@Value-injected base URLs, @ConfigurationProperties getters, and
ternaries.
Inbound Caller Navigation
An orange back-arrow icon appears next to every @RestController endpoint method.
Hovering shows a rich tooltip; clicking opens a popup listing every service that calls that
endpoint, grouped by client type — essential before changing an endpoint's path or contract.
Smart URL Resolution
Real call sites rarely use plain string literals. The resolver handles the patterns actual codebases use, per call site:
Config-sourced base URLs (@Value fields and @ConfigurationProperties
classes) are read from application.{properties,yaml,yml} and any
application-{profile}.* file present, merged together. Reassignment resolution
only applies within a single straight-line block — a reassignment inside a conditional falls
back to the declaration's own value, rather than guessing which branch ran.
Service Navigator Tool Window
A dedicated tool window builds a complete picture of your microservice architecture from source code alone, across six tabs: Service Map, Endpoints, Statistics, Dependency Matrix, Unresolved Callers, and Dependency Graph.
Endpoint Search — Ctrl+Alt+E
Press Ctrl+Alt+E or open the Search Everywhere Endpoints tab. Type any
combination of HTTP verb, URL fragment, service name, or controller method name and jump
straight to it — path variables act as wildcards on both sides.
One Workspace, or Many Repos
Real teams lay out microservice repos differently. Spring Service Navigator supports all three patterns without asking you to restructure anything:
| Your setup | Pattern | Configuration |
|---|---|---|
| All services in one repo, or one multi-module build | Single Project | None |
| Separate repos, opened together in one IntelliJ window | Multiple Content Roots | Standard "Add Content Root" |
| Each service repo opened in its own IntelliJ window | External Repo Paths | One-time per-window setting |
Pattern 2 — Multiple Content Roots, One Window
Attach each sibling repo as an additional content root of the project you already have open — plain IntelliJ project structure, nothing plugin-specific. Open File → Project Structure → Modules, select your module's Sources tab, click Add Content Root, and pick the sibling repo's root folder. Gutter icons, Ctrl+Click navigation, and the Service Navigator tool window all pick it up immediately — each repo keeps its own Git root, so per-repo version control still works correctly.
Pattern 3 — Separate IntelliJ Windows (External Repo Paths)
If each microservice is opened in its own separate IntelliJ window — the most common real-world setup for teams with one repo per service — add the sibling repos under Settings → Tools → Spring Service Navigator → External Repo Paths. Each row can point at a single service repo, or at a base directory containing several sibling repos — nested services are discovered automatically up to 10 folders deep, so one row can cover an entire team's worth of repos.
Click Apply and every configured path is scanned alongside this window's own content roots — the Service Navigator tool window, gutter icons, and reverse-caller lookup all include it, no manual refresh needed.
Also Included
- Ctrl+Click navigation from URL string literals in Java files and from path entries in OpenAPI 3 YAML specs.
- An inspection that flags unresolved cross-service endpoint URLs, and code completion for known endpoint paths.
- Cancellable, background scanning that never blocks the IDE — dumb-mode safe.
Compatibility
- IntelliJ IDEA Community and Ultimate 2024.3 and later.
- Spring Boot 2.x and 3.x.
- Multi-module Gradle and Maven workspaces, and microservices split across separate git repos.
- OpenAPI 3 YAML specifications.
Full documentation, including every gutter icon type, URL resolution rules, and troubleshooting, is in the User Guide on GitHub. Found a bug or have a feature request? Open an issue.