Skip to content

Synapse Navigator

Synapse Navigator is an IntelliJ plugin that adds traceability tooling for Synapse Arch on top of IntelliJ IDEA and Android Studio. The bus decouples producers from consumers at runtime, which is the whole point of the architecture — but it also means Trigger(LoginRequested) in one file and ReactTo<LoginRequested> in another have no direct static link that the IDE’s built-in navigation can follow. Navigator fills that gap: every Synapse call site gets a clickable gutter icon, a tool window shows the full topology of the bus, and an inspection flags channels with no counterpart before they hit runtime.

  • Gutter navigation at every Broadcast, ListenFor, Trigger, ReactTo, Request, @SynapseProvider, and Intercept call site — click to see all connected counterparts and jump to them.
  • A tool window (View > Tool Windows > SynapseLib) with three views: a type-oriented map, a flow-oriented wiring diagram, and an interceptor list. Each supports search and double-click navigation.
  • Mermaid export of the live topology for pasting into docs, design reviews, or a PR description.
  • An unconnected-channel inspection that highlights a Broadcast with no ListenFor, a ReactTo with no Trigger, or a Request with no @SynapseProvider, and offers a Generate Counterpart quick fix that stubs the missing half.
  • Find Usages integration — Ctrl+Click on a channel type now includes every Broadcast/ ListenFor/ Trigger/ ReactTo/ Request / Intercept call site alongside normal code references.
  • Code completion inside type argument brackets with counterpart-aware prioritization.
  • Quick Documentation (Ctrl+Q) with live connection counts.
  • Inlay hints after each call showing counterpart counts (e.g. 3 listeners, 2 sources, ⚠ no reactors).

The sections that follow walk through each of these in turn.

RequirementVersion
IntelliJ IDEA2024.2 – 2025.3 (builds 242–253)
Kotlin pluginRequired (bundled with IDEA)
JVM toolchain17

Android Studio releases that are based on one of the supported IDEA platform versions work the same way — Navigator depends only on the IntelliJ platform and the Kotlin plugin, not on Android-specific APIs.

  1. Download the latest zip from the synapse-plugin releases page.
  2. In your IDE, open Settings > Plugins > ⚙ > Install Plugin from Disk… and select the downloaded zip.
  3. Restart when prompted.

Navigator registers itself as Synapse Navigator in the plugin list and begins scanning on the next project open.

The first time you open a project that has SynapseLib on the classpath, Navigator runs a Build Map scan — it walks every Kotlin source file in the relevant modules, collects every Broadcast/ ListenFor/ Trigger/ ReactTo/ Request/ Intercept call and every @SynapseProvider class, and caches the results. Subsequent changes kick off incremental rescans, debounced by a configurable delay.

Scanning is scoped to modules that actually depend on SynapseLib, so a multi-module project with only one feature using Synapse doesn’t pay for the whole workspace on every edit.

Navigator’s preferences live under Settings > Tools > SynapseLib:

SettingDefaultPurpose
Function name aliases(empty)Comma-separated aliases per SynapseLib function — e.g. add MyBroadcast so a custom wrapper is treated as a Broadcast.
Staleness debounce (ms)500How long after a file change Navigator waits before marking the cache stale and rescanning.
Auto-refresh on file changestrueWhether incremental rescans happen automatically. Turn it off if you’d rather hit Build Map manually.

Aliases are the most commonly-touched setting. If your codebase wraps Trigger in a domain-specific helper (fireAction { … }), add its name to the Trigger alias list and Navigator will pick up every call site as if it were the real thing.