Find your way around code you didn’t write.

Nodeway is a desktop app, free for now, that turns any repo into an interactive map of its files, functions, routes and database tables. Click a route to see every function and table it touches, with the code right beside it.

macOSApple siliconWindows10 and 11, x64
brew install nodewayhq/tap/nodeway
Next.jsHonoExpressFastAPIDjangoSpringRailsLaravel
Workflow

Get from question to code in seconds.

Four moves cover most of what you need to understand a codebase you didn't write, or one you wrote a year ago.

Find anythingSearch, or just ask

Search every file, function, component, route and table at once, ranked as you type. Or ask a question in plain English.

⌘K
The search palette for passkey, with the Passkey table first, then files, components and functions

Built from the real code.

Every line on the map comes from a real import, call, route or query, not from file names or a model's guess.

  • Type-checked calls. TypeScript goes through the real compiler, so calls resolve through imports, classes and dependency objects.
  • Ten more languages. Python, Go, Rust, Java, C#, C/C++, Ruby, PHP and Shell are parsed with tree-sitter.
  • Routes and tables included. HTTP routes from 13 frameworks and tables from 8 ORMs land on the same map as the code.
Under the hood

Everything you need to find your way.

Static analysis under the hood, a fast map on top, and the code one keystroke away.

Mapshop / src / apiNodes3D
1122
POST /ordersapi/orders.ts
OrderService.createservices/order.service.ts
validateCartservices/cart.ts
ordersdb/schema.ts
order_itemsdb/schema.ts

Real call graphs

TypeScript is resolved by the compiler, through imports, classes and dependency objects. Ten more languages are parsed with tree-sitter.

Database3 tables · 2 keys
users
idPK
emailtext
created_attimestamp
orders
idPK
user_id→ users
totalnumeric
order_items
idPK
order_id→ orders
skutext

Schema aware

Tables, columns and foreign keys from Drizzle, Prisma, SQL, Django, SQLAlchemy, JPA, ActiveRecord and Eloquent.

Routes128 in 13 frameworks
GET/api/items/:idHono
POST/usersFastAPI
GET/thingsaxum
PUT/orders/:idSpring
DELETE/posts/:idRails
GET/checkout/sessionNext.js
POST/webhooks/stripeExpress
GET/v1/accountsgin
PATCH/profileLaravel
GET/healthchi
POST/auth/loginDjango
GET/reports/:yearASP.NET
GET/api/items/:idHono
POST/usersFastAPI
GET/thingsaxum
PUT/orders/:idSpring
DELETE/posts/:idRails
GET/checkout/sessionNext.js
POST/webhooks/stripeExpress
GET/v1/accountsgin
PATCH/profileLaravel
GET/healthchi
POST/auth/loginDjango
GET/reports/:yearASP.NET

Every route

Hono, Express, Next.js, FastAPI, Flask, Django, gin, chi, axum, Spring, ASP.NET, Rails and Laravel.

Changesvs main7 files+92 −4 · 2.7k generatedCreate pull requestShow impactrefund-window⤢✕
Mrefund.service.ts+38
Mrefunds.ts+15
Arefund.test.ts+39
A0007_snapshot.json+2702
21+async refundOrder(orderId: string) {
22+ const order = await this.db.find(orderId);
23+ if (order.paidAt < windowStart()) throw new Late();
24+ await this.db.insert(refunds).values({ orderId });
25+ await this.mail.send(order.buyer, "refund");
26+ return order;
27+}

Review your branch

See what your branch changes against main and how many lines really need reading, with lockfiles and snapshots counted apart. When it's ready, open the pull request from here, with the description drafted for you.

2 changesvs main·finding what depends on it…Details1 hopsShare
MethodchangedOrderService.refundservices/order.service.ts
FunctionnewcanRefundservices/refunds.ts
Functionhop 1refundHandlerapi/handlers.ts
Componenthop 1OrderRowcomponents/OrderRow.tsx
Testhop 1refund.test.tsservices/refund.test.ts
Routehop 2POST /refundsapi/router.ts
Componenthop 2OrderListcomponents/OrderList.tsx

See what a change reaches

Light up every function a branch or pull request changes, then everything that calls it: the routes, screens, tables and tests within a few hops. It opens instantly.

Review pull requests

Open any pull request and get a brief: what to read first and why, how the change flows, and a short summary. Comment on lines, approve and merge without leaving the map.

Walk through a change

Press W on any pull request and Nodeway walks you through it one step at a time, in the order a request flows. The camera moves to each changed function, route, page or table, and each step explains the change part by part, beside the lines that changed.

Askabout shop

Ask Nodeway

Ask how something works in plain words. The answer is drawn from the map itself, so it links to the files, functions and tables involved and shows the path between them, one click from the code.

zsh — ~/code/shop

$ open -a "Nodeway" ~/code/shop

✓ 2,412 files read on this machine

✓ server on 127.0.0.1 only

· AI off until you add a key

listening on 127.0.0.1:4317sent 0 B

Local by default

Nothing leaves your computer to build the map. The server only listens on 127.0.0.1.

QWERTYUIOP
ASDFGHJKL
ZXCVBNM
⌘⌘
⌘ KSearch everything

Keyboard first

Search, trace, expand and read code without reaching for the mouse.

Privacy

Your code stays on your machine.

Nodeway is a desktop app. It reads your repository where it lives and keeps everything it learns about it on your computer.

Analysed on your computer

Your code is read and mapped locally. Nothing is uploaded to build the map.

Private by default

The Nodeway server only listens on 127.0.0.1, so nothing else on your network can reach it.

AI only if you want it

Explanations and Ask use your own key for Anthropic, OpenAI, Gemini, OpenRouter or Ollama, or Ollama running on your own machine. Leave it out and Nodeway works fully offline.

Languages

Works with the stack you already have.

Eleven languages are read down to functions, imports, calls, routes and tables. Mixed repos land on one map, so a Go API and a TypeScript frontend sit side by side.

TypeScriptJavaScriptPythonGoRustJavaC#C / C++RubyPHPShell+ Kotlin, Swift, Vue and more as files
Accuracy

Checked against the compiler.

We ran Nodeway on real open-source projects and compared every call it linked with what the language's own tooling says is true. These are the results.

TypeScripthono

0%

of the links it draws are correct

Real calls in the project1,025

linked
100%
possible
0%
not drawn
0%

checked with tsc

Pythonflask

0%

of the links it draws are correct

Real calls in the project303

linked
100%
possible
0%
not drawn
0%

checked with Pyright

Gochi

0%

of the links it draws are correct

Real calls in the project522

linked
100%
possible
0%
not drawn
0%

checked with go/types

Rustaxum

0%

of the links it draws are correct

Real calls in the project2,281

linked
98.5%
possible
1%
not drawn
0.5%

checked with rust-analyzer

Javaspring-petclinic

0%

of the links it draws are correct

Real calls in the project91

linked
100%
possible
0%
not drawn
0%

checked with javac

C#eShopOnWeb

0%

of the links it draws are correct

Real calls in the project232

linked
100%
possible
0%
not drawn
0%

checked with Roslyn

C++leveldb

0%

of the links it draws are correct

Real calls in the project2,234

linked
100%
possible
0%
not drawn
0%

checked with Clang

CcJSON

0%

of the links it draws are correct

Real calls in the project350

linked
100%
possible
0%
not drawn
0%

checked with Clang

Measured 13 Nov 2026 on one project per language, with test files left out. Calls into libraries that are not downloaded are left out of the score.

  • linked
  • offered as possible
  • not drawn
Benchmarks

Five real repos, mapped end to end.

We timed a full map of five popular open-source projects, from listing the files to the last route and table.

01m2m3m4m5m
  1. Documenso

    2,152 files

    13s

    103 routes · 55 tables · 7,115 links

  2. Cal.com

    4,403 files

    20s

    344 routes · 101 tables · 14k links

  3. n8n

    15,441 files

    1m 24s

    20 routes · 198 tables · 95k links

  4. Activepieces

    22,497 files

    4m 34s

    580 routes · 68 tables · 263k links

  5. Twenty

    29,645 files

    1m 38s

    194 routes · 87 tables · 148k links

Measured 15 Nov 2026 on a MacBook Pro (M1 Pro, 16 GB): the average of 2 cold runs per repo at its latest commit, with test files left out. Links are the imports and calls Nodeway drew.

FAQ

Questions, answered.

No. Nodeway reads and maps your repository on your computer, and its server only listens on 127.0.0.1. If you turn on AI features, only what's needed to answer goes to the provider you chose, using your own key. Usage sharing is off unless you turn it on, and then it only counts which features get used.

See your whole codebase in minutes.

Open a folder and Nodeway maps it. Every map is cached per commit, so reopening is instant.

macOSApple siliconWindows10 and 11, x64

Or on a Mac, with Homebrew:

brew install nodewayhq/tap/nodeway