GitHub's Markdown adds tables, task lists, strikethrough and autolinks to the CommonMark standard. The syntax for each, the rules that trip people up, and what renders outside GitHub.
Plain Markdown was loosely defined for years, and different renderers disagreed on the details. CommonMark fixed that with a precise specification. GitHub-flavored Markdown (GFM) is CommonMark plus a short list of extensions: tables, task lists, strikethrough and extended autolinks, with raw HTML filtered for safety.
Everything else people associate with GitHub, such as footnotes, colored alert boxes, Mermaid diagrams and math, is rendered by GitHub's site on top of GFM rather than defined by it. Expect those to show as plain text in most other tools.
A table is a header row, a delimiter row of dashes, then one row per line, with pipes between cells. Colons in the delimiter row set alignment: :-- left, :-: center, --: right.
| Name | Qty | Price ||:--|:-:|--:|| Apple | 2 | $1.20 |
The rules that trip people up: the header row is required, cells hold inline content only (no lists or paragraphs), there is no way to merge cells, and a literal pipe inside a cell must be escaped as \|. The columns do not need to line up in the source. Keeping them aligned only makes the raw file easier to read.
Writing tables by hand gets tedious past a few rows. The List → MD Table tool turns pasted CSV or spreadsheet rows into one.
A list item that starts with [ ] or [x] renders as a checkbox: - [ ] write the docs, - [x] ship the fix. On GitHub, checkboxes in issues and pull requests can be ticked directly, and ticking one edits the underlying Markdown for you. In a README or another renderer they are display-only.
Wrap text in two tildes, ~~like this~~, to strike it through. Extended autolinks turn bare URLs into links without the angle brackets CommonMark requires, and GitHub also links bare www. addresses. Other renderers vary on the www. form, so write the full https:// address when the document will be read elsewhere.
In a Markdown file, a single newline does not start a new line. Two lines in a row join into one paragraph. Force a break with two trailing spaces or a backslash at the end of the line, or leave a blank line to start a new paragraph.
GitHub muddies this: in issue and pull request comments it treats single newlines as line breaks, while in repository files it does not. Text that looks right in a comment can run together when pasted into a README.
A nested list item has to be indented far enough to sit under the text of its parent, not just under its marker. That is two spaces under - and three under 1. . Four spaces works for both, which is why many people use it everywhere.
Name the language after the opening fence, ```js, and renderers that support highlighting will color the code. The name is also a useful label for readers when they do not.
To read a README, changelog or notes file without pushing it anywhere, open it in the Markdown Viewer. It renders tables, task lists, strikethrough, fenced code and nested lists, and adds an outline of the headings in focus mode. Raw HTML inside the file is shown as text rather than rendered, so a README that relies on HTML tags for layout will look plainer than it does on GitHub, but a file from an unknown source cannot run anything.
When you need the HTML itself, the Markdown → HTML converter produces it from the same renderer.