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):
lways 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 signs as in e mc 2 a display block sits between double dollar signs on their own lines frac 1 n sum_ i 1 n x_i github renders these with mathjax in readmes issues comments and wikis a stray dollar sign in ordinary prose can be mistaken for the start of a formula so escape a literal one as math depends on the renderer in exactly the way highlighting does it works on github and in obsidian typora and pandoc while a plain commonmark parser prints the dollar signs as text the editor on this site renders math as well using katex it accepts inline and display plus the and delimiters that latex users type by habit so you can check a formula here first then paste it into a readme gfm vs commonmark vs original markdown the three names get mixed up constantly so here is the family tree original markdown 2004 is john gruber s perl script plus an informal syntax page groundbreaking but vague enough that parsers argued over edge cases for a decade commonmark 2014 is the standardization effort it settles every ambiguity with a formal spec and hundreds of test cases and deliberately adds no new features gfm spec 2017 is commonmark plus github s extensions that is why anything able to parse gfm also parses commonmark perfectly feature by feature feature original 2004 commonmark gfm headings lists links emphasis yes yes yes formal spec test suite no yes yes tables no no yes task lists no no yes strikethrough no no yes autolinked bare urls no no yes raw html tag filtering no no yes so which one should you write write gfm it fails gracefully because a table shown in a commonmark only renderer looks like a few odd pipes rather than a broken page it is also the dialect your teammates your tools and your future self are most likely to expect the exception is a destination you do not control and cannot test when you are unsure what the far end supports stay on headings lists links and emphasis which every dialect handles the same way our online editor previews full gfm so you can check a readme an issue comment or a wiki page before you publish it support data verified 2026 07 24 frequently asked questions is gfm compatible with regular markdown yes gfm is defined as a strict superset of commonmark which in turn covers all of original markdown s core syntax any standard markdown document renders correctly under gfm the reverse isn t always true because gfm only features like tables and task lists need a gfm aware renderer do gfm tables and task lists work outside github mostly yes gitlab bitbucket obsidian typora vs code s preview hugo and most modern renderers support the core gfm extensions what usually does not travel mentions 123 issue references and clickable interactive checkboxes those depend on github s platform how do i add a note or warning box in gfm use alert syntax a blockquote whose first line is note tip important warning or caution github renders it as a colored callout with an icon note that alerts are a github feature layered on top of the gfm spec so some other renderers show them as plain blockquotes why doesn t my html work in a github readme gfm filters a specific list of dangerous tags script style iframe textarea and a few others for security harmless tags like details sub and br still work if layout html seems ignored also check that it isn t inside a code fence where can i test gfm syntax before publishing our free online markdown editor renders gfm live as you type tables task lists strikethrough code fences and more so you can verify a readme or issue comment before pasting it into github nothing you type leaves your browser what is commonmark commonmark is the formal specification that finally pinned down what markdown means gruber s 2004 syntax page was written as prose so two parsers could read the same file two different ways the 2014 spec replaced that with exact rules and hundreds of test cases and deliberately added no new features gfm is defined as a strict superset of it which is why any valid commonmark file renders identically on github the what is markdown page tells the rest of that story can i use emoji in markdown yes paste the unicode character straight into the file and it shows up everywhere because to markdown it is ordinary text like any other letter the shortcode style such as tada for a party popper is a differen...
|