Rhumb: constant-bearing journeys through your app
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.
What it is
Rhumb is a small Python library/CLI that builds static user-journey graphs from frontend apps:
- Detect the framework from
package.json - Extract routes (config AST, filesystem routes, or generated route trees)
- Scan navigation (
Link,navigate,redirect, …) with tree-sitter - Enumerate paths, group them by end route, and attach gaps for anything it couldn’t resolve
No 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).
Install
Not on PyPI yet. Install from GitHub:
uv pip install git+https://github.com/satnam-sandhu/rhumb.git
# or
pip install git+https://github.com/satnam-sandhu/rhumb.git
satnam-sandhu
/
rhumb
Constant-bearing journeys through your app
Rhumb
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 support
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.
Prerequisites
Tool
Top comments (0)