# Rhumb — static user-journey maps from your frontend source

> Source: <https://dev.to/satnam_sandhu/rhumb-static-user-journey-maps-from-your-frontend-source-1pkc>
> Published: 2026-07-13 04:20:11+00:00

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](https://github.com/satnam-sandhu/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
# or
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 |
|---|
