Meta tags:
description= What GitHub Flavored Markdown adds: tables, task lists, strikethrough, autolinks, alerts, footnotes and mentions, plus how GFM differs from CommonMark.;
Headings (most frequently used words):
the, and, markdown, gfm, github, feature, guide, how, tables, in, checkboxes, mermaid, highlighting, code, blocks, complete, is, became, plain, strikethrough, autolinks, html, alerts, mentions, footnotes, vs, where, on, with, you, flavored, what, it, standard, structured, data, text, task, lists, your, documents, filtering, specific, extras, syntax, fenced, commonmark, original, frequently, asked, questions, related, answers, keep, learning, default, works, besides, divider, row, controls, alignment, stop, clickable, read, only, everywhere, else, double, tildes, for, bare, urls, emails, disallowed, raw, five, colored, callout, boxes, issue, commit, references, emoji, shortcodes, highlighted, fences, identifiers, will, actually, use, diff, beat, describing, change, turning, off, purpose, renderer, not, diagrams, from, fence, math, by, so, which, one, should, write, open, editor, tools, learn, reference, platforms, company,
Text of the page (most frequently used words):
the (180), and (113), markdown (110), github (52), gfm (46), that (33), you (31), code (29), html (26), for (24), text (23), syntax (22), with (21), #tables (20), #mermaid (19), lists (18), commonmark (18), yes (17), what (16), editor (16), spec (16), feature (15), plain (15), one (15), block (14), fence (14), not (14), task (13), are (13), all (12), footnotes (12), blocks (12), how (12), renderer (12), like (12), guide (11), write (11), can (11), renders (11), every (10), line (10), from (10), which (10), alerts (10), file (10), this (10), page (10), strikethrough (10), also (10), obsidian (9), links (9), table (9), works (9), any (9), your (9), where (9), only (9), own (9), they (9), diagrams (8), other (8), raw (8), two (8), issue (8), still (8), checkboxes (8), original (8), bare (8), adds (8), highlighting (8), language (8), its (8), discord (7), readme (7), flavored (7), into (7), diagram (7), most (7), source (7), instead (7), because (7), ordinary (7), use (7), read (7), same (7), type (7), work (7), them (7), does (7), notion (6), platforms (6), blockquotes (6), headings (6), reference (6), generator (6), live (6), preview (6), back (6), inside (6), gitlab (6), test (6), colored (6), extensions (6), mentions (6), covers (6), tag (6), math (6), between (6), python (6), name (6), plus (5), when (5), complete (5), than (5), everywhere (5), formal (5), rules (5), features (5), fences (5), clickable (5), dialect (5), urls (5), site (5), comments (5), commit (5), highlight (5), there (5), identifier (5), after (5), diff (5), autolinks (5), row (5), became (5), mdeditor (4), reddit (4), tools (4), free (4), try (4), open (4), alignment (4), pipes (4), core (4), should (4), fenced (4), draws (4), real (4), repository (4), renderers (4), show (4), rather (4), label (4), style (4), such (4), platform (4), emoji (4), 2004 (4), strict (4), superset (4), why (4), our (4), before (4), nothing (4), list (4), first (4), note (4), top (4), warning (4), document (4), data (4), way (4), three (4), here (4), dollar (4), each (4), simply (4), output (4), reader (4), actually (4), purpose (4), becomes (4), will (4), off (4), short (4), version (4), pull (4), out (4), boxes (4), spaces (4), default (4), divider (4), 2026 (3), about (3), faq (3), blog (3), glossary (3), bold (3), italic (3), images (3), cheat (3), sheet (3), learn (3), toc (3), viewer (3), pdf (3), browser (3), library (3), picture (3), render (3), those (3), itself (3), paste (3), straight (3), shows (3), different (3), thing (3), colons (3), written (3), parsers (3), hundreds (3), cases (3), deliberately (3), new (3), defined (3), tells (3), specific (3), tags (3), check (3), iframe (3), script (3), callout (3), tip (3), add (3), typora (3), support (3), 123 (3), references (3), standard (3), under (3), always (3), cannot (3), full (3), filtering (3), 2017 (3), habit (3), then (3), these (3), readmes (3), issues (3), wikis (3), parser (3), signs (3), sits (3), double (3), has (3), never (3), breaks (3), too (3), string (3), next (3), tool (3), left (3), static (3), generators (3), something (3), says (3), reach (3), set (3), plaintext (3), const (3), port (3), beat (3), definition (3), opening (3), come (3), makes (3), request (3), nesting (3), five (3), extras (3), filter (3), bracket (3), extension (3), documents (3), tildes (3), published (3), release (3), editors (2), web (2), sign (2), escaping (2), cells (2), fall (2), element (2), examples (2), history (2), flowcharts (2), sequence (2), gantt (2), charts (2), lives (2), diffs (2), slack (2), while (2), leaves (2), screen (2), tada (2), pinned (2), down (2), gruber (2), was (2), prose (2), could (2), ways (2), 2014 (2), valid (2), identically (2), rest (2), more (2), comment (2), online (2), publishing (2), filters (2), dangerous (2), few (2), others (2), security (2), isn (2), sub (2), details (2), textarea (2), blockquote (2), whose (2), icon (2), layered (2), some (2), caution (2), important (2), box (2), bitbucket (2), hugo (2), modern (2), travel (2), interactive (2), turn (2), end (2), supports (2), stay (2), emphasis (2), publish (2), future (2), autolinked (2), anything (2), parses (2), perfectly (2), settles (2), enough (2), edge (2), names (2), well (2), using (2), latex (2), formula (2), display (2), inline (2), start (2), escape (2), literal (2), exactly (2), their (2), lines (2), without (2), error (2), class (2), info (2), contents (2), shell (2), uncolored (2), wrong (2), uses (2), colors (2), practice (2), takes (2), must (2), job (2), terminal (2), log (2), highlighter (2), loose (2), turning (2), 3000 (2), learned (2), describing (2), change (2), want (2), files (2), bash (2), typed (2), javascript (2), aliases (2), identifiers (2), have (2), worth (2), collects (2), linguist (2), greet (2), hello (2), backticks (2), kept (2), highlighted (2), words (2), numbers (2), codes (2), follow (2), shortcodes (2), typing (2), person (2), quote (2), action (2), skip (2), layer (2), now (2), rendered (2), fixed (2), running (2), millions (2), disallowed (2), small (2), link (2), better (2), https (2), brackets (2), emails (2), keeps (2), subtasks (2), normal (2), many (2), just (2), checklist (2), else (2), notes (2), nested (2), cell (2), break (2), column (2), stop (2), controls (2), people (2), structured (2), almost (2), world (2), besides (2), made, taiwan, rights, reserved, terms, service, privacy, policy, search, contact, company, compared, template, private, deepest, instant, multi, explained, keep, learning, fits, flavor, related, answers, lets, describe, tagged, unicode, character, letter, party, popper, swap, sitting, shortcode, specification, finally, means, replaced, exact, added, story, verify, pasting, harmless, layout, seems, ignored, doesn, alert, mostly, usually, depend, outside, correctly, reverse, true, need, aware, compatible, regular, frequently, asked, questions, verified, exception, destination, control, unsure, far, handles, previews, wiki, fails, gracefully, shown, looks, odd, broken, teammates, self, likely, expect, suite, able, parse, standardization, effort, ambiguity, john, perl, informal, groundbreaking, but, vague, argued, over, decade, get, mixed, constantly, family, tree, katex, accepts, delimiters, users, mathjax, stray, mistaken, depends, pandoc, prints, frac, sum_, x_i, single, above, leaving, typo, stays, throwing, half, state, graph, striking, even, holding, meant, stops, guessing, highlights, loaded, contains, carries, gets, guessed, once, wire, prism, chroma, claimed, would, stylesheet, results, differ, caveat, matters, neither, nor, colorized, may, opposite, spelled, whole, switch, coloring, excerpts, directory, trees, ascii, invent, really, process, env, deserves, addition, removal, tints, green, red, logs, txt, changes, review, suggestions, patch, queries, schema, definitions, migrations, sql, stylesheets, selector, css, markup, samples, templates, pipelines, docker, compose, front, matter, yml, yaml, api, responses, config, package, manifests, json, commands, install, steps, typescript, node, scripts, snippets, doctests, recognize, appears, either, degrades, monospaced, had, handful, knowing, place, picks, detection, component, bar, knows, several, hundred, languages, along, common, def, print, console, again, everything, verbatim, turns, grey, word, space, goes, further, controlled, section, both, parts, marker, sentence, anywhere, reading, bottom, labels, strong, case, claim, swaps, convention, transfers, bug, rocket, profile, notifies, sha, make, threads, feel, wired, together, least, portable, username, sit, elsewhere, readable, borrow, including, blank, possible, bad, outcome, risk, needs, immediate, attention, know, succeed, optional, shortcut, easier, useful, information, permanently, deletes, callouts, built, gives, color, beyond, surprisingly, video, embed, disappears, warns, watch, escapes, presentational, fine, noframes, noembed, xmp, title, removes, let, drop, large, part, strangers, freedom, hole, comparison, gift, trap, polished, url, leads, descriptive, reads, save, dance, address, inert, unless, wrap, angle, spots, email, addresses, wraps, crossed, honest, correction, old, price, view, marks, done, deleting, said, smaller, finish, third, away, traps, apply, indent, child, item, parent, mix, tabs, spells, expects, clicked, post, exported, clearest, hand, copy, reuse, prize, descriptions, tick, edits, underlying, count, tasks, wherever, referenced, apps, treat, update, changelog, bump, number, bulleted, items, begin, finished, decide, whether, empty, closing, construct, often, point, merged, hold, pipe, checks, neat, extra, edit, pushes, right, prices, centers, suits, status, aligns, colon, magnet, pulling, toward, miss, separate, columns, hyphens, splits, header, body, someone, mean, deciding, question, properly, chat, hosts, precise, largest, host, hard, combination, heavily, tested, documented, explains, launched, 2008, adopted, 2009, description, developers, wrote, day, quietly, everyone, requests, gists, run, technical, writers, asking, automatic, linking, unsupported, falls, breaking, things, last, updated, writes, example, home, content,
Text of the page (random words):
hub flavored markdown gfm complete guide mdeditor tw skip to content md editor tw markdown editor tools markdown to html table generator markdown to pdf markdown viewer html to markdown table to markdown toc generator markdown guide cheat sheet learn markdown syntax what is markdown github flavored markdown markdown tables markdown vs html markdown lists markdown links markdown images markdown headings bold italic code blocks blockquotes footnotes markdown glossary faq platforms all platforms markdown in notion markdown in obsidian markdown in discord markdown in reddit open editor markdown editor tools markdown to html table generator markdown to pdf markdown viewer html to markdown table to markdown toc generator markdown guide cheat sheet learn markdown syntax what is markdown github flavored markdown markdown tables markdown vs html markdown lists markdown links markdown images markdown headings bold italic code blocks blockquotes footnotes markdown glossary faq platforms all platforms markdown in notion markdown in obsidian markdown in discord markdown in reddit home github flavored markdown the complete guide github flavored markdown the complete guide gfm is the markdown dialect the world actually writes in this guide covers every extension it adds from tables and task lists to alerts footnotes and mermaid diagrams it also draws the line between the gfm spec and github s own extras try any example live in our free markdown editor last updated 2026 07 24 on this page what gfm is and how it became the standard how gfm became the default where gfm works besides github tables structured data in plain text how the divider row controls alignment where gfm tables stop task lists checkboxes in your documents clickable checkboxes on github read only checkboxes everywhere else strikethrough autolinks and html filtering strikethrough with double tildes autolinks for bare urls and emails disallowed raw html github specific extras alerts mentions footnotes mermaid alerts five colored callout boxes mentions issue and commit references emoji shortcodes footnotes mermaid and highlighted code fences syntax highlighting in fenced code blocks the identifiers you will actually use diff blocks beat describing the change turning highlighting off on purpose highlighting is a renderer feature not a markdown feature mermaid diagrams from a plain code fence math blocks with and gfm vs commonmark vs original markdown feature by feature so which one should you write what gfm is and how it became the standard in short gfm is github s dialect of markdown published in 2017 as a strict superset of commonmark the spec itself adds five things tables task lists strikethrough autolinked urls and a raw html filter alerts mentions emoji codes footnotes and mermaid come from github s renderer not from the spec write gfm by default where it is unsupported it falls back to plain text instead of breaking the page github flavored markdown gfm for short is the dialect github uses everywhere on its platform readmes issues pull requests comments wikis and gists all run on it gfm keeps the original markdown syntax and adds the features technical writers kept asking for tables task lists strikethrough and automatic linking of bare urls how gfm became the default the history explains the reach github launched in 2008 and adopted markdown in 2009 back when the 2004 syntax description was loose enough that two parsers could render one file two different ways github layered its own extensions on top millions of developers wrote readmes every day and github s version quietly became the version everyone learned in 2017 github pinned it all down and published the gfm spec it is a formal heavily tested document defined as a strict superset of commonmark every valid commonmark file renders identically under gfm gfm simply adds a fixed documented set of extensions on top of it where gfm works besides github a precise spec plus the world s largest code host is a hard combination to beat the core extensions now turn up almost everywhere people write code hosts github gitlab and bitbucket editors and notes obsidian typora and vs code s preview chat and wikis discord and notion publishing hugo and most modern static site generators so when someone says just write it in markdown they almost always mean gfm if markdown itself is new to you read the complete markdown guide first and come back if you are still deciding which layer to write in at all markdown vs html settles that question properly tables structured data in plain text tables are the extension people miss most in plain markdown pipes separate the columns a divider row of hyphens splits the header from the body colons inside that divider row set the alignment feature original md gfm tables no yes task lists no yes strikethrough no yes how the divider row controls alignment one row does all the work read each colon as a magnet pulling the text toward it or a plain aligns the column left that is the default centers it which suits short status words like yes and no pushes it right that is what you want for numbers and prices the pipes do not have to line up on screen the parser only checks that they are there neat source is still worth the extra spaces because the next person to edit the file has to read it as raw text where gfm tables stop the syntax is deliberately small there are no merged cells and no nested tables and a cell cannot hold a real line break escape a literal pipe as or it will be read as a column edge for a break inside a cell use a br tag instead tables are also the construct that breaks most often in practice the markdown tables guide covers the escaping rules generators and the point where an html table is simply the better tool task lists checkboxes in your documents a task list is an ordinary bulleted list whose items begin with for an open task or x for a finished one two spaces decide whether it works one inside the empty brackets one after the closing bracket release checklist x update the changelog x bump the version number tag the release publish release notes nested subtasks work too clickable checkboxes on github the real prize is that task lists can be interactive in issues pull request descriptions and comments the rendered boxes are clickable tick one and github edits the underlying markdown for you it also shows a running count such as 3 of 5 tasks in issue lists and wherever the pull request is referenced notion obsidian and many to do apps treat the same syntax as live checkboxes read only checkboxes everywhere else in static output the boxes still render they just cannot be clicked that covers a readme a blog post and an exported html file a published checklist is still the clearest thing you can hand a reader because they can copy the source and reuse it subtasks follow the normal nesting rules so the normal nesting traps apply indent the child item under the text of its parent and never mix tabs with spaces the markdown lists reference spells out how many spaces each renderer expects strikethrough autolinks and html filtering three smaller extensions finish off the spec two of them add syntax the third takes something away on purpose strikethrough with double tildes strikethrough wraps text in two tildes so like this renders as crossed out text it is the honest way to show a correction 99 79 keeps the old price in view it also marks a line as done without deleting what it said autolinks for bare urls and emails autolinks save you the bracket dance in original markdown a bare address such as https mdeditor tw is inert text unless you wrap it in angle brackets or full link syntax gfm spots bare web and email addresses and makes them clickable on its own that is a gift in issue comments and a small trap in polished documents a raw url tells the reader nothing about where it leads so descriptive link text like md editor https mdeditor tw still reads better disallowed raw html the raw html filter is the one extension that removes rather than adds markdown has always let you drop html straight into a document which is a large part of what the markdown and html comparison is about on a site where millions of strangers write comments that freedom is a security hole so the gfm spec filters a fixed list of dangerous tags script title textarea style iframe xmp noembed noframes and plaintext it escapes the opening bracket so the tag shows up as text instead of running ordinary presentational html such as br sub and details still works fine watch out this filter is why a video embed that works on your own blog disappears from a github readme nothing warns you the iframe is simply not there in the rendered page github specific extras alerts mentions footnotes mermaid beyond the formal gfm spec github s own renderer adds a layer of platform features some of them only work on github others like footnotes and mermaid now travel surprisingly well alerts five colored callout boxes alerts are callouts built out of blockquote syntax the first line of the quote names the type and github gives each one its own color and icon warning this action permanently deletes your data note useful information a reader should not skip tip an optional shortcut that makes the job easier important something they must know to succeed warning a risk that needs immediate attention caution a possible bad outcome of an action alerts sit on top of the spec rather than inside it elsewhere they fall back to an ordinary quote which is still perfectly readable the blockquotes reference covers the syntax they borrow including nesting and blank line rules mentions issue and commit references typing username links to that person s profile and notifies them typing 123 links to issue or pull request 123 in the same repository and a bare commit sha links to that commit these are what make github threads feel wired together they are also the least portable feature here in any other renderer they are plain text emoji shortcodes type a name between colons and github swaps in the picture tada becomes rocket becomes and bug becomes github supports hundreds of these codes and discord and slack follow the same convention so the habit transfers footnotes footnotes come in two parts a marker in the sentence and a definition anywhere in the file write claim 1 in the text then a line reading 1 source here github collects every definition at the bottom of the page and adds back links for you labels can be words instead of numbers a habit the footnotes reference makes a strong case for mermaid and highlighted code fences add a language name after the opening fence python js bash and the block is colored for that language label the fence mermaid instead and github goes further it renders the contents as a live diagram version controlled like any other text the next section covers both in full syntax highlighting in fenced code blocks a fenced code block is three backticks your code then three backticks again and everything between the fences is kept verbatim what turns that grey box into colored code is the language identifier one short word typed straight after the opening fence with no space between them python def greet name print f hello name js const greet name console log hello name github picks the colors using linguist its open source language detection library it is the same component that draws the language bar on every repository page linguist knows several hundred languages along with their common aliases so py and python reach the same highlighter type an identifier it does not recognize and nothing breaks no error appears either the block degrades to a plain monospaced code block exactly as if you had written no identifier at all fences have a handful of other rules worth knowing and the code blocks reference collects them in one place the identifiers you will actually use identifier aliases use it for python py python scripts snippets and doctests javascript js browser and node js code typescript ts typed javascript and type definition files bash sh shell terminal commands and install steps json api responses config files package manifests yaml yml ci pipelines docker compose front matter html markup samples and templates css stylesheets and selector examples sql queries schema definitions migrations diff patch before and after changes review suggestions plaintext text txt output logs anything you want left uncolored diff blocks beat describing the change diff deserves to be learned on its own start a line with for an addition or for a removal and github tints the lines green and red diff const port 3000 const port process env port 3000 turning highlighting off on purpose at the opposite end sits text also spelled plaintext its whole job is to switch coloring off reach for it with terminal output log excerpts directory trees and ascii diagrams set a highlighter loose on those and it will invent syntax that is not really there highlighting is a renderer feature not a markdown feature this caveat matters more than any identifier in the table neither commonmark nor the gfm spec says a fence must be colorized the spec only says the text after the fence is an info string that a renderer may use in practice that string becomes something like class language python on the code element and a stylesheet or a highlighting library takes it from there so results differ by tool github and gitlab highlight the block for you a bare commonmark parser does not and never claimed it would static site generators highlight only once you wire up prism highlight js or chroma our own markdown editor highlights the block too it uses highlight js loaded only when a document actually contains code a fence that carries a language tag gets colored a fence with no tag is left plain on purpose because a guessed language colors the code wrong tip label every fence even one holding shell output text tells the next reader the block is meant to stay uncolored and it stops a future tool from guessing wrong mermaid diagrams from a plain code fence mermaid is the most striking thing github does with an info string label the fence mermaid and github does not highlight the block at all it renders the contents as a real diagram mermaid graph td a write markdown b commit b c github renders the diagram flowcharts sequence diagrams class diagrams state diagrams and gantt charts all work this way each one lives in the repository as plain text and diffs like any other file gitlab notion and obsidian support mermaid too renderers that do not simply show the source as an ordinary code block you can test the block above without leaving this site paste it into the markdown editor and the preview draws the diagram if the mermaid source has a typo in it the fence stays a code block instead of throwing an error at you so a half written diagram never breaks the rest of the preview math blocks with and github also parses latex style math inline math sits between single dollar si...
|