Heading One

A representative GFM fixture proving Story 2.1 rendering.

Heading Two

Heading Three

This paragraph has bold text and italic text to prove inline emphasis.

Heading Four

Heading Five
Heading Six

Lists

An unordered list:

An ordered list:

  1. First ordered item
  2. Second ordered item
  3. Third ordered item

Code

Here is some inline const answer = 42; code.

function greet(name) {
  return `Hello, ${name}!`;
}
const aVeryLongUnbreakableIdentifierThatExceedsTheReadingMeasure = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

Quote

A top-level blockquote.

A nested blockquote inside it (AC5 nested left-rule).

Table

NameRoleActive
AliceAuthoryes
BobReviewerno

GFM Extensions (AC6)

This text is struck through to prove strikethrough.

A task list:

A bare autolinked URL: https://themarkdownweb.com

Escaping (AC6)

A literal less-than < and ampersand & must be HTML-escaped.

Inline code with <tags> & ampersand must also escape its angle brackets and ampersand.

Internal .md links (rewritten to page routes at build time):

Pass-through links (left exactly as authored):

Media (AC: 2.4)

These media embeds are authored as raw HTML so the relative src/poster values reach the build-time rehype media rewrite as plain HAST <img>/<video>/ <audio>/<source> element nodes (the same node set a markdown ![]() embed lowers to), and so a missing-asset reference cannot hard-crash Astro’s image pipeline. The rewrite is at the HAST stage, so it is syntax-agnostic.

The epic same-dir embed with alt text (AC1/AC4): a skier in deep powder

An empty-alt decorative embed (AC4):

A leading ./ embed collapses (AC2): dot slash

An image carrying title/width/height that must survive the rewrite (AC4): titled

Pass-through media, left exactly as authored (AC3):

remote https protocol relative data uri already served

F1 smuggling guards, left UNREWRITTEN (AC2 / rows 12-14):

encoded separator smuggle encoded leading slash smuggle malformed percent escape

A missing-asset embed still rewrites to its would-be served path and 404s, never crashing the build (AC6): broken

A raw-HTML video with a relative poster and a nested relative <source> (AC5):

A raw-HTML audio with a relative src (AC5):

The AC1 epic example authored as LITERAL markdown ![]() (not raw HTML) — proves the markdown image syntax flows through the same rewrite and bypasses Astro’s astro:assets/_astro optimisation, emitting a plain served <img> (AC1):

markdown embed