URL pattern expander
The same globbing syntax curl uses, in a box that shows you the result before you run anything. Write one pattern with {staging,prod} and [1-50] in it and get the full list of URLs out — for a warm-up script, a load test, a batch of pages to check, or the ninety image URLs a designer needs.
How to use
- Write your pattern. Expansion happens as you type, so the count in the status line tells you immediately whether the ranges are what you meant.
{a,b,c}expands to each alternative. Nest and combine freely —{en,de}/{docs,blog}gives four results.[1-20]expands to a numeric range. Add a step with[0-100:10], and get zero padding by writing the first number padded:[001-010]produces001…010.[a-f]expands to a letter range, in either direction —[z-a]counts down.- Copy the list, or download it. Generation is capped at 10 000 URLs per run.
Syntax reference
| Pattern | Expands to |
|---|---|
page-{a,b,c} | page-a, page-b, page-c |
page-[1-4] | page-1 … page-4 |
page-[001-003] | page-001, page-002, page-003 |
page-[0-20:5] | page-0, page-5, page-10, page-15, page-20 |
page-[10-1] | counts down: page-10 … page-1 |
rev-[a-d] | rev-a, rev-b, rev-c, rev-d |
{a,b}/x-[1-2] | all four: a/x-1, a/x-2, b/x-1, b/x-2 |
{,beta-}page | an empty alternative is allowed: page, beta-page |
What this is genuinely useful for
Checking a paginated archive after a migration. Expand /blog/page/[1-40], paste the list into your crawler or a curl loop, and find the page where the pagination broke.
Cache warming. Generate the URL set for the pages that must be hot after a deploy, and feed it to a script — far less error-prone than a hand-maintained list that drifts.
Building a test matrix. https://{dev,staging,prod}.example.com/{health,version,metrics} is nine endpoints from one line, and the pattern is self-documenting in a way nine pasted URLs are not.
Asset lists. Sequentially numbered images and video segments — segment-[00001-00300].ts — where writing them out by hand is not realistic.
One thing to be clear about: this generates a list, it does not request anything. Nothing is fetched, so nothing is hit until you take the list somewhere else. If you do, make sure it is a service you are responsible for — generating a range against someone else's site is a good way to look like an attack.
FAQ
Is this the same syntax as curl?
The common parts, yes — {} alternation and [n-m] ranges with :step all behave the same, and zero-padding works the way curl's does. curl also supports the #1 back-reference in output filenames, which has no meaning here.
Why is there a 10 000 cap?
Because [1-1000]{a,b,c}[1-100] is 300 000 URLs and a frozen tab. The cap keeps the tool responsive, and the status line tells you when it applied so you can narrow a range.
Can I use a literal brace or bracket?
Not currently — braces and brackets that look like patterns are expanded. If you need a literal one in a URL, percent-encode it (%7B, %5B), which is what it should be anyway.
How do I generate page URLs with a query parameter instead?
The pagination URL generator is purpose-built for that — it handles ?page=, offset/limit and path-segment styles, and knows about omitting the parameter on page one.