Stop hunting through 1 2 3 4 5. A Burp Suite extension that auto-names new
Repeater tabs after the request they hold — so you can actually read your tab bar.
Before — which tab was the login request again? 🤷
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ]
After — obvious at a glance ✅
[ GET /user/info ][ POST /login ][ query GetUser ][ mutation CreateOrder ][ DELETE /cart/items ]
Repeater Auto Tab Renamer is a Burp Suite extension that gives every Repeater tab a meaningful name — automatically, the moment the request arrives.
Out of the box, Burp labels each request you send to Repeater with a plain incrementing number
(1, 2, 3, …). After a busy session you're left with a row of identical numbered tabs and no
way to tell them apart without clicking through them one by one. This extension fixes that:
- REST requests become
METHOD /clean/path(e.g.GET /user/info), with noisy version prefixes like/api/v1/stripped away. - GraphQL requests are named after the operation in the body —
query GetUser,mutation CreateOrder— so you're not staring at a dozen tabs all readingPOST /graphql.
It hooks into the ways you already send requests — the native Ctrl+R shortcut and the
right-click Send to Repeater menu — so there's nothing new to learn. An optional filter limits
renaming to API (JSON) responses, duplicate names are disambiguated automatically, and any tab you
renamed by hand is never touched. Built for pentesters and bug bounty hunters who live in Repeater
and juggle a lot of endpoints at once.
- 🔤 REST →
METHOD /clean/path— version prefixes like/api/v1/are stripped.GET /api/v1/user/infobecomes the tabGET /user/info. - 🧬 GraphQL → the operation name — for any endpoint whose path contains
graphql, the tab is named from the request body:query GetUser,mutation CreateOrder, an anonymous op asquery <firstField>, and a batched request asop (+N). - ⌨️ Works with
Ctrl+Rand right-click Send to Repeater — both paths get named. - 🎯 Optional "API (JSON) only" filter — rename only requests whose response is JSON. Toggle it from the right-click menu; the choice is persisted across restarts.
- 🛡️ Never clobbers your work — only Burp's default numbered tabs are touched. Hand-renamed tabs and tabs it already named are left alone.
- 🔁 Auto-dedupes — duplicate names get
@ hostor(2)appended so every tab stays unique. - 📦 Two builds — modern Montoya (Burp 2023+) and a legacy
IBurpExtenderbuild for older Burp.
- Download the jar for your Burp:
- Modern (Burp 2023+):
dist/repeater-tab-renamer.jar - Legacy (pre-2023):
legacy/dist/repeater-tab-renamer-legacy.jar
- Modern (Burp 2023+):
- In Burp: Extensions → Installed → Add.
- Set Extension type =
Java, choose the downloaded jar, click Next. - Open the Repeater tab once so the extension can attach to its tab pane.
- Send any request to Repeater (
Ctrl+Ror right-click) — watch the tab name itself. 🎉
Requires JDK 17+ (Burp 2023+ bundles a Java 17 runtime; the Montoya API needs 17).
| Maven | Gradle |
|---|---|
mvn clean package
# → target/repeater-tab-renamer.jar |
gradle clean jar
# → build/libs/repeater-tab-renamer.jar |
The Montoya API is declared provided / compileOnly — Burp supplies it at runtime, so it is
not bundled into the jar.
Legacy build:
cd legacy && mvn clean package
# → legacy/target/repeater-tab-renamer-legacy.jar| Setting | Default | Where |
|---|---|---|
| Rename all endpoints | ✅ On | — |
| API (JSON) responses only | ❌ Off | Right-click → "Auto-rename: API (JSON) responses only" |
When the JSON filter is on, a tab is renamed only if the originating response's Content-Type /
Burp-detected MIME type is JSON — i.e. it looks like a real API call. The setting is saved and
restored automatically.
The Montoya Repeater interface only exposes sendToRepeater(request) and
sendToRepeater(request, name) — there is no event for "the user sent a request to Repeater"
and no API to rename an existing tab. So to react to Burp's native Send to Repeater, the
extension locates the Repeater JTabbedPane in the Swing tree and renames newly added
default-numbered tabs via setTitleAt. (Same technique other real-world extensions use — and, yes,
inherently version-fragile.)
| Trigger | How the tab gets named |
|---|---|
⌨️ Ctrl+R |
A HotKeyHandler sends the focused request itself and names the tab immediately — it has the request and response in hand, so the JSON filter works directly (no tree-walking). |
| 🖱️ Right-click → Send to Repeater | A ContainerListener on the Repeater tab pane renames the new numbered tab; the request/response is captured when the context menu opens. |
| ➕ Right-click → Send to Repeater (auto-named) | Explicit menu item that always names the tab, ignoring the filter. |
Released under the MIT License.
