rewrites links · images · reference defs · in one pass

Rewrite Markdown links between relative and absolute

Given a base URL, swap every Markdown link, image, and reference definition between relative paths and fully-qualified URLs. Skips anchors and external schemes.

Markdown link rewrite
Input
185 B
9 lines
Output
245 B
9 lines
Status
ready
live
Ratio
1.32×
out/in
input · markdown
output · rewritten
# Project README

See the [getting started guide](https://example.com/docs/getting-started.md).

![Logo](https://example.com/images/logo.png)

External link: [docs site](https://docs.example.com/api).

[ref]: https://example.com/api/reference.md
Quick Start

How to rewrite Markdown link URLs

Resolve every link against a base URL using the WHATWG URL parser. Inline links, image syntax, and reference definitions are all rewritten in a single pass.

  1. 01

    Set the base URL

    The host (and path prefix) to resolve against.

    Parsing runs through marked with GFM extensions enabled — tables, task lists, strikethrough, and fenced code blocks all match GitHub’s rendering.

    baseGFMmarkedCommonMarklive
    base · markdownurl · GFM
    example.com/
    loaded · GFMGFM · ready
  2. 02

    Pick direction

    Relative → absolute (publish) or absolute → relative (mirror).

    Soft-break behaviour is configurable: by default a single newline becomes a space (CommonMark), toggle on for chat-style <br> insertion.

    modesoft-breaksoptionsconfiglive
    mode · optionsrel/abs · live
    → absolute
    options applied · livelive
  3. 03

    Paste Markdown

    Every link, image, and reference def is rewritten.

    The preview is scoped under a .mde class so its CSS doesn’t bleed into the rest of the page. Output HTML is whitespace-controlled for clean diffs.

    rewritepreviewscoped CSSrenderstable
    out · renderedmd · ready
    [docs](https://…)
    rendered · liverendered
  4. 04

    Copy or download

    Drop into your README, blog, or static site source.

    Export covers both raw Markdown and rendered HTML; downloads stream as text/markdown or text/html via Blob + object URL.

    exportclipboard.md.htmlblob
    OK · exportedmd · done
    shipped
    shipped · ready to shipsuccess
Pro tips

Author Markdown that renders everywhere

GFM is the safe default

GitHub-Flavored Markdown is the de-facto baseline (tables, task lists, strikethrough). CommonMark is stricter but ubiquitous as a fallback.

Soft-break behaviour varies

A single newline is a space in CommonMark, a <br> in GFM. Toggle soft breaks when source matters.

Escape inside code fences

Backticks inside fenced blocks need a longer fence — three becomes four. Use ~~~ if your content has many backticks.

Anchors are slugified

GitHub lowercases, strips punctuation, and joins with hyphens. Duplicate headings get -1, -2 suffixes.

Tables need a header row

The dash row sets alignment (:---, :-:, ---:). Use Table Aligner for diff-friendly columns.

Front matter is YAML

Triple-dash blocks at the top of files are parsed by static-site generators. Use the Front-Matter Validator to catch syntax errors.

Use Cases

When to rewrite link URLs

Mirrors, migrations, READMEs rendered off-host.

GitHub README mirror

Render a README outside GitHub with all links resolving. Render path uses marked with GFM extensions enabled (tables, task lists, strikethrough, autolinks), so what you preview matches what GitHub publishes bit-for-bit. Soft-break behaviour is configurable for chat-style vs prose Markdown.

GFM-compliant

Site migration

Bulk-rewrite docs when changing domain or path prefix. Pairs cleanly with the Markdown Cheatsheet for syntax you can't quite remember — callout blocks, footnotes, definition lists. Output stays diff-friendly so style-only changes don't drown out real edits in PRs.

GitHub-perfect

Local dev

Make absolute links portable across staging and prod. Cross-platform safe: anchors, code fences, and tables behave identically on GitHub, GitLab, Bitbucket, and Gitea. Heading-anchor slugs follow GitHub's lowercase-and-hyphenate rules so deep links survive a docs migration.

diff-friendly

Email previews

Convert relative paths to absolute for email previews. No server roundtrip — perfect for proprietary content you can't paste into a public tool. The full marked + GFM bundle ships with the page, so it works offline once loaded.

render-stable

Static export

Resolve relative paths before SSG ingestion. Front matter (YAML / TOML / JSON) passes through unchanged so static-site pipelines (Jekyll, Hugo, Astro, Eleventy) read it correctly. Pair with the Front-Matter Validator to catch syntax errors before deploy.

cross-platform

Cross-host docs

Move docs between docs.example.com and the main site. Output is reproducible: identical input always produces identical Markdown, so doc-generation scripts can rely on it for snapshot tests and embedded into release workflows.

SEO-friendly
FAQ

Frequently asked questions

Anchors (#section) and links with explicit schemes (mailto:, tel:, ftp:) are left untouched.
Yes — both inline [text](url) and reference [id]: url definitions are rewritten.
Image syntax ![alt](src) is rewritten the same way as links — useful for relocating asset paths.
The browser-native WHATWG URL parser via new URL(url, base) — same algorithm browsers use to resolve hrefs.
No. Conversion runs locally in your browser.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!