I wanted a boring answer to a useful question:
From this codebase, what are the real paths users can take to reach
/checkout
?
Not “what PostHog recorded last week.” Not “what an LLM invents after reading three files.” Just: routes + navigation edges → journey paths, extracted from source.
That’s Rhumb.
Rhumb is a small Python library/CLI that builds static user-journey graphs from frontend apps:
package.json
Link
, navigate
, redirect
, …) with tree-sitterNo app runtime. No LLM in the extract path.
Supported today:
| Framework | Status |
|---|---|
| React Router | Supported |
| TanStack Router | Supported |
| Expo Router | Supported |
Next.js, Remix, Vue Router, SvelteKit, Angular — detected or stubbed, not fully extracting yet. This is alpha ( 0.1.0).
Not on PyPI yet. Install from GitHub:
uv pip install git+https://github.com/satnam-sandhu/rhumb.git
pip install git+https://github.com/satnam-sandhu/rhumb.git
Constant-bearing journeys through your app.
Static user journey graphs from frontend source — routes, navigation edges, and concrete paths. No runtime. No LLM in the extract path.
| Framework | Status | Notes |
|---|---|---|
| React Router | Supported | |
| Config / JSX routes + Link / navigate / redirect | ||
| TanStack Router | Supported | |
FS + routeTree.gen.ts + virtual routes + nav |
||
| Expo Router | Supported | |
Filesystem app/ + Link / router.* |
||
| Vue Router | Coming soon | Stub registered — SFC + router TS planned |
| SvelteKit | Coming soon | Stub registered — src/routes + Svelte nav planned |
| Next.js | Coming soon | |
app/ / pages/ filesystem + Link / redirects |
||
| Remix | Coming soon | Filesystem routes + nav |
| Angular | Coming soon | TS Routes arrays |
| Vite + React (no router) | Coming soon | Thin / delegate when React Router present |
Detection already recognizes several of the “coming soon” stacks from package.json
; journey extraction ships only for the Supported rows today.
| Tool |
|---|