How to convert markdown reference links to inline
- Step 1Load the Markdown — Paste the document or drop a
.md/.mdx/.markdownfile that uses reference-style links plus a definition block. - Step 2Set Convert to Reference → Inline — Open the single Convert dropdown and choose Reference → Inline (mode
to-inline). The default is the opposite direction, so this is the one switch you must flip. - Step 3Run the conversion — Click Run. The tool collects all
[id]: urldefinitions first, then resolves every[text][id]and[text][]against them. - Step 4Check that references resolved — Each matched link becomes
[text](url). Any reference whose id has no definition is left untouched — scan the body for leftover[text][id]after conversion. - Step 5Note the removed definition block — All
[id]: urllines are deleted and runs of blank lines are collapsed. The document is now self-contained inline Markdown. - Step 6Copy or download — Grab the result with Copy or save it with Download. The filename is preserved. To verify nothing broke, run the link validator.
How each reference shape is handled
The to-inline pass resolves only full reference forms; shortcut [text] links are not rewritten. Definition lines are removed regardless of whether they were used.
| Input | Has matching def? | Output |
|---|---|---|
[Docs][1] + [1]: https://x.com | Yes | [Docs](https://x.com) |
[Docs][] + [docs]: https://x.com | Yes (text used as id) | [Docs](https://x.com) |
[Docs][API] + [api]: https://x.com | Yes (case-insensitive id) | [Docs](https://x.com) |
[Guide][1] + [1]: https://x.com "Guide" | Yes (double-quote title) | [Guide](https://x.com "Guide") |
[Docs][9] + no [9]: | No | [Docs][9] (unchanged) |
[Docs] (shortcut) + [docs]: https://x.com | Not a full reference | [Docs] stays, but [docs]: def is removed |
Tier limits for this converter
charLimit is a character count, distinct from byte size. One file per run on Free.
| Tier | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 |
| Pro-media | 50 MB | 20,000,000 | 50 |
| Developer | 500 MB | unlimited | unlimited |
Cookbook
Reference-style input on the left, the inline result on the right. The definition block disappears in every case.
Standard numbered references back to inline
The everyday reverse pass. Each [text][n] resolves to its URL and the numbered block at the bottom is removed.
BEFORE: See [the docs][1] and [the API][2]. [1]: https://acme.dev/docs [2]: https://acme.dev/api AFTER: See [the docs](https://acme.dev/docs) and [the API](https://acme.dev/api).
Collapsed references where text is the id
A collapsed reference [Docs][] uses its own visible text, lowercased, as the lookup id. As long as a [docs]: url definition exists, it resolves.
BEFORE: Read the [Docs][] today. [docs]: https://acme.dev/docs AFTER: Read the [Docs](https://acme.dev/docs) today.
Case-insensitive id matching
The link writes the id as API but the definition uses api. Matching is case-insensitive, so it still resolves — handy for hand-written references.
BEFORE: The [client][API] wraps every endpoint. [api]: https://acme.dev/client AFTER: The [client](https://acme.dev/client) wraps every endpoint.
A reference with no definition is left alone
If a link points at an id that has no definition, the tool does not guess — it leaves the reference exactly as written so you can fix it.
BEFORE: See [the changelog][changelog] (TODO add link). [1]: https://acme.dev/docs AFTER: See [the changelog][changelog] (TODO add link).
Shortcut link survives but its definition vanishes
A shortcut link [Docs] (no second bracket) is not rewritten, yet its [docs]: url definition is still removed. The result is a bare [Docs] that most renderers show as plain text — convert shortcut links to the full [Docs][docs] form first if you want them resolved.
BEFORE: Visit [Docs] for details. [docs]: https://acme.dev/docs AFTER: Visit [Docs] for details. (the [docs]: line is gone — [Docs] now renders as plain text)
Edge cases and what actually happens
Shortcut reference link [text]
Not convertedOnly full forms [text][id] and collapsed [text][] are rewritten. A shortcut [text] is ignored by the link pass — but the definition-removal pass still deletes its [text]: url line. The net effect: a bare [text] left behind with no definition, which renders as plain text. Rewrite shortcut links to [text][text] before converting if you need them resolved.
Undefined reference id
PreservedIf [text][missing] has no [missing]: url definition, it is left exactly as written. Nothing is invented. After conversion, search for any remaining [..][..] to find references that pointed at a definition you never wrote.
Single-quoted title in the definition
Not parsedDefinition parsing recognises only double-quote titles "Title". A line like [1]: https://x.com 'Title' fails to match the definition pattern, so [1] is never registered — the link is left unresolved. Convert the title to double quotes, or drop it, before running.
Definition URL containing whitespace
TruncatedThe URL in a definition is read as a single run of non-whitespace characters. A URL with a literal space (which should be percent-encoded anyway) stops at the space, so the inline result loses the tail. Encode spaces as %20 in the definition first.
Unused / orphan definitions
RemovedEvery line matching the [id]: url definition shape is deleted, whether or not any link used it. Stray or commented-out definitions disappear from the output. This is by design — the goal is a clean inline document.
Two definitions with the same id
Last winsIf the document has [1]: a and later [1]: b, the collection pass overwrites, so links resolve to b. Both definition lines are then removed. Deduplicate your definition block beforehand if the duplicate was unintentional.
Reference written inside a code block
ConvertedThere is no fence awareness, so [text][1] inside a fenced ``` block is rewritten like any other reference. If you are documenting reference syntax, the example will be altered — escape it or convert before adding the sample.
Empty document or no references
ExpectedWith nothing to resolve and no definitions to strip, the text comes back essentially unchanged (consecutive blank lines collapse). No error is thrown.
File over the tier limit
413 rejectedFree tier caps each file at 1 MB / 500,000 characters. Large reference-heavy docs may hit the character cap first. Use the splitter or upgrade (Pro 5,000,000 chars; Developer unlimited).
Frequently asked questions
Which reference forms does it convert?
Full references [text][id] and collapsed references [text][] (where the visible text, lowercased, is the id). Both resolve against the [id]: url definition block. Shortcut links [text] are not converted.
Why is my [Docs] shortcut link not becoming inline?
Because [Docs] with no second bracket is a shortcut reference, and the converter only rewrites the full [text][id] and collapsed [text][] forms. Worse, its definition line is removed, so [Docs] is left as plain text. Rewrite it as [Docs][docs] first, then convert.
Is id matching case-sensitive?
No. Both the definition id and the link id are lowercased before matching, so [Client][API] resolves against [api]: url. This mirrors how CommonMark treats reference labels.
Are titles preserved?
Yes, if they use double quotes. A definition [1]: url "Title" produces [text](url "Title"). Single-quote titles are not recognised by the definition parser — that whole definition line fails to match, leaving the link unresolved. Use double quotes.
What happens to references that have no definition?
They are left untouched. The tool never fabricates a URL. After converting, search the output for ][ to find any reference that didn't resolve, then add the missing definition or fix the id.
Does it remove all definition lines?
Yes — every line matching the [id]: url shape is removed, used or not. This keeps the output a clean self-contained inline document. If you wanted to keep some definitions, copy them out before converting.
Can I round-trip with the to-reference direction?
Yes, when you stick to double-quote titles and full reference forms. Convert to inline, edit, then switch the Convert dropdown back to Inline → Reference. Shortcut links and single-quote titles are the two things that don't survive a clean round trip.
Will links inside code blocks be converted?
Yes. The pass has no fence awareness, so a reference written inside a ``` block or inline code is rewritten. Escape or relocate documentation examples that should stay literal.
What if two definitions share an id?
The later one wins — the collection pass overwrites earlier definitions with the same id. Both lines are then removed. Clean up duplicate ids in your definition block before running if that's not what you want.
Is my content uploaded anywhere?
No. Conversion runs in your browser. Pro+ can route to the local runner, which still runs on your own machine. Only an anonymous run counter is stored for dashboard stats.
How large a document can it process?
Free: 1 MB and 500,000 characters, one file. Pro: 10 MB / 5,000,000 characters / 10 files. Pro-media: 50 MB / 20,000,000 / 50. Developer: 500 MB and unlimited characters.
Does it deduplicate the URLs after expansion?
No — inline links don't dedupe by definition. Each reference expands to its full URL independently, so a URL used five times now appears inline five times. That's the cost of inline style; use the reverse direction if you want one centralised definition again.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.