# MDUtil — Complete Markdown Reference > Full content export of every tool on mdutil.com: canonical syntax, worked examples, platform compatibility and frequently asked questions. All tools are free and run in the browser. Source: https://mdutil.com --- ## Markdown Preview URL: https://mdutil.com/tools/markdown-preview ### How do you preview Markdown online? Paste your Markdown into an online preview tool and it renders to HTML as you type — no install, no account. A good previewer handles GitHub Flavored Markdown: headings, emphasis, fenced code with syntax highlighting, tables, task lists and LaTeX math. You can then copy the generated HTML or download the file. ```markdown # Heading **Bold**, *italic*, and `inline code`. - List item - [Link](https://example.com) | Column | Value | | ------ | ----- | | Row | 1 | ``` Renders as a level-one heading, a paragraph containing bold, italic and monospaced code, a bulleted list with a clickable link, and a two-column table with a header row. ### What the Markdown preview renders The preview pane uses a GitHub Flavored Markdown parser, so what you see here is very close to what GitHub, GitLab and most static site generators will publish. These are the constructs worth testing before you commit a file. #### Headings, emphasis and lists The CommonMark core. Leave a blank line before a list, and put a space after the # characters — the single most common reason a heading renders as plain text. ```markdown # Document title ## Section Text can be **bold**, *italic* or ***both***. 1. Ordered item 2. Another item - Nested bullet ``` An h1 and an h2, a paragraph with strong and emphasis runs, and an ordered list containing a nested unordered list. #### Fenced code blocks with highlighting Three backticks open and close a block. The word after the opening fence is the language hint that drives syntax highlighting in the preview and on GitHub. ```markdown ```ts interface User { id: number; name: string; } ``` ``` A monospaced block with TypeScript keywords, types and strings coloured. Without the language hint the code still renders, just unhighlighted. #### Tables with column alignment A GFM extension, not part of original Markdown. The separator row sets alignment: colons on the left, right or both sides of the dashes. ```markdown | Package | Version | Size | | :------ | :-----: | ---: | | react | 19.0 | 6 kB | | next | 16.0 | 2 MB | ``` A three-column table with the first column left aligned, the version centred and the size right aligned. #### Task lists, strikethrough and autolinks The GFM extras that make README and issue checklists work. A task list item is a normal list item whose text starts with [ ] or [x]. ```markdown - [x] Write the spec - [ ] Ship the feature ~~Deprecated~~ replaced by https://example.com ``` Two checkboxes, the first ticked, followed by a paragraph with struck-through text and a bare URL turned into a clickable link. #### LaTeX math formulas Single dollar signs wrap inline math, double dollar signs create a centred display block. Rendered with KaTeX here, and supported natively by GitHub since 2022. ```markdown Inline: $E = mc^2$ $$ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$ ``` The inline formula sits in the sentence at text size; the block formula is centred on its own line with a full-height square root and fraction. #### Images, links and raw HTML Image syntax is a link with a leading exclamation mark. Raw HTML is allowed by CommonMark, but GitHub sanitises it — anything scripted or styled will be stripped when you publish. ```markdown ![Alt text](/images/example.png "Optional title")
Click to expand Hidden content.
``` The image loads inline with its alt text as fallback, and the details block becomes a collapsible section that GitHub also supports. ### Will my Markdown look the same everywhere? Every platform ships its own renderer, so the same file can look different depending on where you paste it. This preview follows GitHub Flavored Markdown, the closest thing to a de facto standard. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | Reference target for this preview: tables, task lists, strikethrough, autolinks and $...$ math. | | VS Code | Full | Built-in preview opens with Cmd/Ctrl+K V. Mermaid and some extensions need a plugin. | | Obsidian | Full | Adds wikilinks [[note]] and callouts, which other renderers show as literal text. | | Notion | Partial | Converts pasted Markdown into native blocks on import; it does not render Markdown live. | | Discord | Partial | Inline formatting, headings, lists and code blocks only. No tables, images or math. | | Slack | Partial | Uses its own mrkdwn dialect: single *bold*, _italic_. No headings or tables. | | Reddit | Partial | Markdown mode covers tables, quotes and code blocks, but not LaTeX math. | ### How to preview Markdown with this tool 1. **Add your Markdown** — Type in the left-hand editor, paste an existing document, or use the upload button to open a local .md, .markdown or .txt file. 2. **Watch the live preview** — The right-hand pane re-renders on every keystroke. Keep Sync Scroll enabled so the preview follows your cursor through long documents. 3. **Switch to the HTML view** — Use View HTML to see the generated markup as a complete, standalone HTML document rather than the rendered page. 4. **Copy or download the result** — Copy the Markdown or the HTML to your clipboard, download the HTML file, or export the Markdown source back to disk. ### Frequently asked questions **What is a Markdown preview?** A Markdown preview is a rendered view of a Markdown file: the plain-text syntax is parsed and displayed as formatted HTML with real headings, bold text, lists, tables and code blocks. It lets you check the finished look before you commit or publish the file. **How do I preview a Markdown file without installing anything?** Open this page, then either paste the file contents into the editor or click the upload button and choose the .md file from your computer. The rendered result appears immediately in the right-hand pane. No installation, sign-up or extension is required. **Is my content uploaded to a server?** No. Parsing and rendering run entirely in your browser with JavaScript, so the document never leaves your machine. That makes the tool safe for drafts, internal documentation and anything else you would not want to send to a third party. **Does the preview support GitHub Flavored Markdown?** Yes. Tables, task list checkboxes, strikethrough, automatic URL linking and fenced code blocks with language hints all work, which is the same feature set GitHub applies to READMEs, issues and pull requests. **Can I preview LaTeX math formulas?** Yes. Wrap inline expressions in single dollar signs and display equations in double dollar signs. Formulas are typeset with KaTeX, the same engine used by many documentation sites, and GitHub has rendered this syntax natively since 2022. **Why is my Markdown table not rendering?** Three causes account for almost every broken table: the separator row of dashes under the header is missing, there is no blank line between the paragraph above and the table, or the number of pipe-separated cells differs between rows. Tables are also a GFM extension, so renderers that only implement original Markdown ignore them. **How do I export the preview as HTML?** Click View HTML to switch the right-hand pane to code mode. The tool builds a complete standalone HTML document, including styling for code blocks, tables and math, which you can copy to the clipboard or download as a .html file. **How do I preview Markdown in VS Code?** Open the file and press Cmd+K then V on macOS, or Ctrl+K then V on Windows and Linux, to open the preview beside the editor. Cmd/Ctrl+Shift+V opens it in a full tab instead. The built-in preview follows GitHub Flavored Markdown closely. **Why does my preview look different from GitHub?** Renderers differ in which extensions they enable and how they sanitise HTML. GitHub strips scripts, inline styles and most attributes for security, and applies its own stylesheet, so spacing and fonts will not match exactly even when the underlying HTML structure is identical. **What is the difference between a Markdown editor and a Markdown viewer?** A viewer only renders an existing file, while an editor also lets you write and change the source. This tool is both: the left pane is a full code editor with line numbers and syntax highlighting, and the right pane is the live viewer. --- ## Markdown to Text Converter URL: https://mdutil.com/tools/markdown-to-text ### How do you convert Markdown to plain text? Paste the Markdown into a converter that removes the syntax characters but keeps the words. It strips #, **, _, backticks, >, list bullets and link brackets, while preserving link text and image alt text. The result is plain text you can paste into email, a CMS, or any editor that does not render Markdown. ```markdown ## Release notes We shipped **dark mode** and fixed [the login bug](https://example.com/123). - Faster search - [x] Docs updated ``` Becomes: Release notes / We shipped dark mode and fixed the login bug. / Faster search / Docs updated — with every #, asterisk, bracket and bullet removed. ### What gets stripped when you convert Markdown to text Stripping Markdown is not the same as deleting punctuation. A good converter removes only the characters that carry formatting meaning, and keeps everything a human actually reads. Here is exactly how each construct is handled. #### Headings, bold and italic Leading hash marks are dropped along with the space after them, and emphasis delimiters are unwrapped. The heading text stays on its own line, so the document keeps its shape without the markup. ```markdown ### Quarterly summary Revenue was **up 12%** and churn was _flat_. ``` Quarterly summary / Revenue was up 12% and churn was flat. #### Links and images The visible label survives, the URL does not. Links collapse to their anchor text and images collapse to their alt text — which is why writing meaningful alt text pays off twice. ```markdown See the [migration guide](https://docs.example.com/migrate). ![Architecture diagram](/img/arch.png) ``` See the migration guide. / Architecture diagram #### Lists, numbers and task checkboxes Bullets (-, * or +), ordered-list numbering and task-list checkboxes are all removed from the start of the line. The items stay on separate lines, so the list is still scannable as prose. ```markdown 1. Draft the RFC 2. Collect feedback - [x] Schema migrated - [ ] Backfill running ``` Draft the RFC / Collect feedback / Schema migrated / Backfill running #### Code fences and inline code The opening and closing fences and the language hint disappear, but the code inside is kept verbatim — including indentation. Inline backticks are unwrapped in place. ```markdown Call `npm run build` first. ```python def hello(): print("hi") ``` ``` Call npm run build first. / def hello(): / print("hi") — the four-space indent is preserved. #### Blockquotes and horizontal rules The angle bracket in front of a quoted line is removed so the quotation reads as ordinary text, and rule lines made of ---, *** or ___ are deleted entirely rather than left as stray punctuation. ```markdown > The API will be deprecated in Q3. --- Plan accordingly. ``` The API will be deprecated in Q3. / Plan accordingly. — the divider line is gone. #### What is deliberately left alone Pipe tables keep their | separators, because flattening them would destroy the row and column relationship that makes the data readable. Raw HTML tags and platform extensions such as Obsidian wikilinks are also passed through untouched. ```markdown | Plan | Seats | | ---- | ----- | | Team | 10 | footnote-sized text ``` The table and the HTML tag come through unchanged — remove them by hand if you need completely flat prose. ### Markdown sources this handles Almost every tool that emits Markdown emits a slightly different dialect. These are the sources people paste in most often, and what to expect from each. | Platform | Support | Notes | | --- | --- | --- | | ChatGPT / Claude / Gemini | Full | Standard GFM. Headings, bold, lists, quotes, fences and links all strip cleanly. | | GitHub / GitLab | Full | README badges written as linked images collapse to their alt text. | | Notion | Full | Exported .md files are plain GFM; callouts arrive as blockquotes and strip normally. | | Obsidian | Partial | [[Wikilinks]] and ==highlights== are vault-specific syntax and are left as-is. | | Discord | Full | **bold**, *italic*, `code` and > quotes strip; ||spoiler|| bars stay. | | Slack | Full | Slack's single-asterisk *bold* and _italic_ are unwrapped along with standard syntax. | ### How to convert Markdown to plain text 1. **Paste your Markdown** — Drop the raw Markdown into the editor on the left, or use the upload button to load a .md, .markdown or .txt file from your computer. 2. **Read the plain text output** — The right-hand pane updates as you type, so you can see immediately which symbols were removed and which content survived. 3. **Copy or download the result** — Use the copy button to put the plain text on your clipboard, or the download button to save it as a .txt file. 4. **Spot-check the leftovers** — Scan the output for pipe tables or raw HTML, which are passed through on purpose, and edit those few lines by hand if you need completely flat text. ### Frequently asked questions **How do I remove Markdown formatting from ChatGPT or Claude output?** Copy the assistant's reply and paste it into the input box above. Chat models answer in GitHub Flavored Markdown, so the asterisks, hash marks and backticks you see are formatting characters the chat UI would normally render. Stripping them gives you text you can drop straight into an email, a ticket or a document. **What is the difference between Markdown and plain text?** Plain text is just characters with no formatting instructions. Markdown is plain text plus a small set of reserved characters that a renderer turns into headings, bold, lists and links. Removing those reserved characters converts Markdown back into ordinary plain text. **Does converting Markdown to plain text keep my links?** The link text is kept, the URL is not. A link written as [the docs](https://example.com) becomes just the docs. If you need the addresses, copy them out of the original Markdown before converting, because plain text has no way to attach a target to a word. **How do I convert a .md file to a .txt file?** Click the upload button above the input pane and choose the .md file. The plain text appears in the right pane, and the download button saves it as a .txt file. The file is read locally by your browser and never sent anywhere. **Is my Markdown uploaded to a server?** No. The conversion runs entirely in JavaScript in your own browser tab. Nothing is transmitted, logged or stored, which makes the tool safe for internal documentation, meeting notes and other content you cannot paste into an online service. **Does the converter remove Markdown tables?** No, pipe tables are passed through with their vertical bars intact. Collapsing a table into a line of words would destroy the relationship between headers and cells, so it is safer to leave the structure visible and let you decide what to do with it. **Does code inside fenced code blocks survive?** Yes. The triple-backtick fences and the language hint are removed, but every line between them is kept exactly as written, including leading whitespace. That matters for indentation-sensitive languages such as Python and YAML. **How do I strip Markdown formatting programmatically?** For scripts, pandoc with the arguments -f markdown -t plain is the most reliable option, and libraries such as remove-markdown for JavaScript or markdown-it plus a text renderer work well inside applications. This page is the quick manual equivalent for one-off cleanups. **Why does the output still contain blank lines?** Paragraph breaks are meaningful in plain text too, so a single empty line between paragraphs is preserved. Runs of three or more consecutive newlines are collapsed to two, which keeps the result readable without gluing separate paragraphs together. --- ## Markdown to PDF Converter URL: https://mdutil.com/tools/markdown-to-pdf ### How do you convert Markdown to PDF? Paste your Markdown into the converter above, choose a page size, and click Generate PDF — the file downloads straight from your browser with real, selectable text. On the command line, pandoc report.md -o report.pdf does the same job locally, once Pandoc and a PDF engine are installed. ```markdown pandoc report.md -o report.pdf ``` Pandoc reads report.md and writes a paginated report.pdf beside it, with headings, lists, tables and code blocks laid out for print. ### Four ways to convert Markdown to PDF Every route below produces a PDF, but they differ in install cost, styling control and how faithfully they reproduce your Markdown. Pick the one that matches how often you need to do this. #### In the browser (no install) The fastest option: drop Markdown into the editor above, confirm the preview, and download. Useful for one-off documents, and the only option on a locked-down machine where you cannot install a toolchain. ```markdown # Quarterly Report ## Highlights - Revenue up 12% quarter over quarter - Churn down to 1.8% | Metric | Q1 | Q2 | | ------ | --- | --- | | MRR | 82k | 94k | ``` A PDF whose headings, bullet list and table are laid out on an A4 page, with text you can select, copy and search. #### Pandoc with a LaTeX engine The highest-fidelity route and the one most people mean by “pandoc markdown to pdf”. It gives you real typesetting, automatic tables of contents, citations and cross-references. ```markdown pandoc report.md -o report.pdf \ --pdf-engine=xelatex \ --toc \ -V geometry:margin=1in ``` A typeset PDF with a generated table of contents and one-inch margins. Requires a TeX distribution — TeX Live, MacTeX or MiKTeX — which is 1–4 GB on disk. #### Pandoc without LaTeX If you do not want a multi-gigabyte TeX install, point Pandoc at an HTML-based engine instead. You then style the PDF with an ordinary CSS stylesheet rather than LaTeX macros. ```markdown pandoc report.md -o report.pdf \ --pdf-engine=weasyprint \ --css=print.css ``` The same document rendered through HTML and CSS, so @page rules, margins and web fonts in print.css control the final layout. #### VS Code (Markdown PDF extension) Best when the Markdown already lives in your repository. Install the Markdown PDF extension, then export the active file without leaving the editor. These workspace settings pin the output format. ```markdown // .vscode/settings.json { "markdown-pdf.type": ["pdf"], "markdown-pdf.format": "A4", "markdown-pdf.displayHeaderFooter": true } ``` Running “Markdown PDF: Export (pdf)” from the command palette writes report.pdf next to report.md. The first export is slow because the extension downloads a bundled Chromium. #### Node CLI for batch conversion When you need to convert a whole docs folder in CI rather than one file by hand, a Node converter with a glob is the least ceremony. ```markdown npx md-to-pdf report.md npx md-to-pdf --stylesheet print.css "docs/**/*.md" ``` The first command emits report.pdf. The second converts every Markdown file under docs/ using a shared print stylesheet. #### Forcing a page break Markdown has no page-break syntax at all, which is the single most common surprise when converting to PDF. Raw HTML is the portable workaround. ```markdown The summary ends here, on page one.
# Appendix A ``` HTML- and Chrome-based converters start “Appendix A” on a new page. LaTeX and plain-text PDF renderers ignore the div, so verify before you rely on it. ### Markdown to PDF: which method to use The right converter depends on whether you value zero setup, exact typography, or repeatability in a build pipeline. This is how the common options actually behave. | Platform | Support | Notes | | --- | --- | --- | | This converter | Instant | No install, no upload. Page size and orientation are configurable; fonts and margins are not. | | Pandoc | Full control | Best fidelity, TOC and citations, but needs a separate PDF engine installed. | | VS Code | Good | Markdown PDF extension exports the open file; bundles its own Chromium on first run. | | Obsidian | Built in | File → Export as PDF renders exactly what the note pane shows, theme included. | | Typora | Built in | File → Export → PDF, with templates for headers, footers and page numbers. | | Browser print | Partial | Cmd/Ctrl+P on any rendered Markdown page. Free, but page breaks and backgrounds are unpredictable. | | GitHub / GitLab | None | Neither offers a PDF export. Print the rendered README, or paste the source into a converter. | ### How to convert Markdown to PDF with this tool 1. **Add your Markdown** — Type or paste Markdown into the editor on the left, or use the import button to load an existing .md file from your computer. 2. **Check the live preview** — The right pane re-renders as you type. Leave Sync Scroll enabled so the preview follows your cursor through long documents. 3. **Set the page format** — Pick A4, Letter or A3, then portrait or landscape, matching wherever the document will be printed or filed. 4. **Generate the PDF** — Click Generate PDF. The document is built in your browser and downloads immediately, with text you can select and search. ### Frequently asked questions **Is the text in the generated PDF selectable and searchable?** Yes. The converter writes real text objects rather than rasterising the preview into an image, so you can select, copy, search and index the finished PDF exactly as you would any other text document. **Should I use Pandoc or an online Markdown to PDF converter?** Use Pandoc when you convert regularly, need a table of contents, citations or precise typography, and do not mind installing a PDF engine. Use an online converter for one-off documents, for machines where you cannot install software, and when you want the result in a few seconds. **How do I convert Markdown to PDF in VS Code?** Install the Markdown PDF extension, open the file, then run Markdown PDF: Export (pdf) from the command palette. Without an extension you can open the built-in preview, right-click it and print to PDF, which is lower fidelity but needs nothing installed. **Is my Markdown uploaded to a server?** No. Both the preview and the PDF generation run in your browser using JavaScript. Nothing is transmitted, stored or logged, which makes the tool safe for internal notes, drafts and client work. **How do I force a page break in a Markdown to PDF conversion?** Markdown itself has no page-break syntax, so you insert raw HTML: a div carrying the CSS declaration page-break-after: always. Converters that render through HTML honour it; LaTeX-based ones ignore it, so always check the output. **Do images appear in the exported PDF?** Images render in the live preview. The downloaded PDF concentrates on text content — headings, paragraphs, lists, tables, code blocks and quotes — so the file stays small and fully selectable. For image-heavy documents, print the preview to PDF from your browser instead. **Do tables, code blocks and math formulas convert correctly?** Tables, fenced code blocks, blockquotes and both list types are laid out in the PDF. LaTeX math renders in the preview but is carried into the PDF as plain text, so for equation-heavy papers Pandoc with XeLaTeX is the better choice. **Why is my Chinese, Japanese or Cyrillic text missing from the PDF?** The standard PDF base fonts only contain Latin glyphs, so non-Latin scripts can drop out. Convert with Pandoc and XeLaTeX using a font that ships those glyphs, such as Noto Sans CJK, or print the preview pane from your browser, which uses your system fonts. **Can I convert a PDF back to Markdown?** Not with this tool, which is one-way. PDF to Markdown is a much harder problem because a PDF stores positioned glyphs rather than document structure, so headings, lists and tables have to be inferred. Dedicated extractors such as MarkItDown or Marker do a reasonable job. **How large a document can I convert?** There is no imposed limit, but generation happens on the browser's main thread, so a several-hundred-page document takes noticeably longer and briefly uses more memory. Splitting very large manuals into chapters keeps conversion responsive. --- ## Markdown Word Counter URL: https://mdutil.com/tools/markdown-word-counter ### How do you count words in a Markdown file? Use a word counter that understands Markdown rather than plain text. An accurate count removes fenced code blocks, inline code, image syntax and link URLs before counting, so only prose is measured. Most counters then divide that total by 225 words per minute to estimate reading time. ```markdown pandoc -t plain README.md | wc -w ``` Pandoc converts the Markdown to plain text and wc counts the words in that output — far closer to the real figure than running wc -w on the raw .md file. ### What a Markdown word count should and should not include Running a generic word counter over a .md file inflates the result, because every fence line, heading hash and URL is treated as a word. These are the cases that separate a raw character count from a usable one. #### Fenced code blocks and inline code Code is not prose. Everything between triple backticks is removed before counting, and so is anything wrapped in single backticks. This is the single biggest source of inflated counts in technical writing. ```markdown Install the CLI with `npm i -g mdutil`, then run: ```bash mdutil count README.md --json ``` ``` Counts 7 words — the sentence only. The command inside the backticks and the entire fenced block are excluded. #### Links, images and bare URLs A link contributes its visible text, never its target. Long tracking URLs would otherwise add a dozen phantom words each, and images contribute nothing a reader actually reads. ```markdown See the [migration guide](https://example.com/docs/v2/migration?utm_source=blog) for details. ``` Counts 6 words: See, the, migration, guide, for, details. The URL and its query string are discarded. #### Headings, lists and blockquote markers Structural characters are markup, not vocabulary. Heading hashes, list bullets, table pipes and blockquote arrows are syntax and never count toward the total, though the text they introduce does. ```markdown ## Release notes - Faster startup - Fewer allocations > Ships Friday. ``` Counts 7 words: Release, notes, Faster, startup, Fewer, allocations, Ships, Friday. The ##, - and > characters are ignored. #### Raw HTML in Markdown Markdown lets you drop HTML straight into a document. Tags are stripped and their text content is kept, so a badge table or a details block does not distort the number. ```markdown
Advanced options These flags are experimental.
``` Counts 5 words: Advanced, options, These, flags, are, experimental — the tags themselves contribute nothing. #### YAML front matter is still counted This is the one gotcha worth remembering. Front matter looks like metadata to you, but to a counter it is ordinary text at the top of the file. Delete it before measuring if you want a body-only figure. ```markdown --- title: Shipping faster with fewer meetings date: 2026-07-24 tags: [process, remote] --- The first real paragraph starts here. ``` Adds roughly ten words from the metadata block on top of the body count. Remove the front matter for an accurate article length. #### Reading time from the word count Reading time is word count divided by a reading speed. This tool uses 225 words per minute, the middle of the 200–250 range typically measured for adult readers of English prose. Divide by 150 instead for dense technical material. ```markdown reading_time_minutes = word_count / 225 ``` 1,125 words is a 5 minute read at 225 wpm, or roughly 7 minutes 30 seconds at the slower 150 wpm technical rate. ### How other tools count Markdown words Most editors count the raw file, which is why the same document reports a different length in every app. Here is what to expect before you trust a number. | Platform | Support | Notes | | --- | --- | --- | | MDUtil (this page) | Prose only | Strips code blocks, inline code, link URLs and HTML tags, then counts what is left. | | VS Code | Raw text | The Markdown word count in the status bar includes fence lines, heading hashes and URLs. | | Obsidian | Raw note | The built-in counter reads the whole note, so YAML front matter and code blocks are in the total. | | GitHub / GitLab | Not available | Neither web UI shows a word count for READMEs, issues or PR descriptions. | | Notion | Rendered text | Counts the converted blocks, so pasted Markdown syntax disappears from the total. | | Word / Google Docs | Raw text | Pasting Markdown counts asterisks, hashes and full URLs as words, inflating the result. | | Medium / Substack | Reading time only | Both publish an estimated read time from the rendered article instead of a word count. | ### How to count words in Markdown 1. **Add your Markdown** — Type or paste into the editor, or use the import button to load an existing .md, .markdown or .txt file from your computer. 2. **Read the statistics bar** — Words, reading time, characters, lines and paragraphs update on every keystroke at the top of the tool. 3. **Check the preview** — Compare the rendered preview with the editor to confirm that the blocks you expected to be excluded — code fences especially — really are code. 4. **Export the numbers** — Use Export Metrics to download a JSON file containing every statistic plus a timestamp, handy for tracking article length over time. ### Frequently asked questions **How do I count the words in a Markdown file?** Paste the file into a counter that parses Markdown instead of treating it as plain text. On this page the count updates as you type. From a terminal, pandoc -t plain README.md | wc -w gives a comparable figure by converting to plain text first. **Does the word count include Markdown syntax?** No. Heading hashes, list bullets, table pipes, blockquote markers, emphasis asterisks and HTML tags are all removed before counting. Only the text a reader actually reads is measured. **Are code blocks counted as words?** No. Fenced code blocks and inline code spans are stripped first, so a documentation page with long examples reports its real prose length rather than a number dominated by source code. **How is the reading time calculated?** Reading time is the word count divided by 225 words per minute, the middle of the 200 to 250 range commonly measured for adult readers. Values under a minute are shown in seconds. **How many words is a 5 minute read?** About 1,125 words at 225 words per minute. Most publishers treat 1,000 to 1,300 words as the sweet spot for a five minute article, which is why that length is so common for blog posts. **Why does VS Code show a different word count for the same file?** The VS Code status bar counts the raw file, so every fence line, heading hash and URL is treated as a word. On a technical article the difference between that number and a prose-only count can exceed thirty percent. **Does YAML front matter count toward the total?** Yes. Front matter is plain text as far as a counter is concerned, so a metadata block adds roughly ten words. Delete it before measuring if you need the body length on its own. **Does the counter work for Chinese, Japanese or Korean text?** The word count splits on whitespace, which is unreliable for languages that do not separate words with spaces. For CJK content read the character count instead — it is the figure editors and publishers use for those languages anyway. **Is my Markdown uploaded to a server?** No. The whole calculation runs in your browser with JavaScript. Nothing is uploaded, stored or logged, so the tool is safe for unpublished drafts and internal documents. **What is the difference between character count and word count here?** Both are measured on the same cleaned text, after code blocks and URLs have been removed. The character count includes spaces and punctuation, which makes it the more reliable metric for non-English content. --- ## Markdown to LaTeX Converter URL: https://mdutil.com/tools/markdown-to-latex ### How do you write LaTeX math in Markdown? Wrap the formula in dollar signs: `$E = mc^2$` renders inline, and `$$...$$` on its own lines renders a centred display equation. Markdown has no math parser of its own, so the host does the work — GitHub, Jupyter, Obsidian and most site generators pass the content to KaTeX or MathJax. ```markdown The relation $E = mc^2$ appears inline. $$ \sum_{i=1}^{n} i = \frac{n(n+1)}{2} $$ ``` The first line typesets the formula inside the sentence; the block between the $$ delimiters becomes a centred display equation on a line of its own. ### LaTeX in Markdown: syntax explained Markdown and LaTeX meet at the dollar sign. The rules are short, but three details cause almost every rendering bug: whitespace next to the delimiters, underscores that Markdown eats as emphasis, and platforms that ship their own math syntax instead. #### Inline math with single dollar signs One dollar sign on each side keeps the formula in the flow of the sentence. Leave no space between the delimiter and the formula — with a space, most renderers treat the dollars as literal currency symbols and print them. ```markdown The relativistic energy $E = mc^2$ still surprises people. A price such as \$25 has to be escaped so it is not read as math. ``` The first line typesets E = mc² inline. The escaped dollar on the second line prints a literal $ instead of opening a formula. #### Display math with double dollar signs Two dollar signs produce a centred, block-level equation. Put the delimiters on their own lines and leave a blank line before and after the block — Jupyter and several static site generators refuse to render it otherwise. ```markdown The quadratic formula gives both roots: $$ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$ ``` Renders as a centred equation on its own line, visually separated from the paragraph above it. #### Matrices, cases and aligned environments Anything with several rows goes inside an amsmath environment. Rows are separated by a double backslash, columns by an ampersand, and the surrounding $$ still marks the whole thing as display math. ```markdown $$ \begin{cases} 3x + 5y + z = 0 \\ 7x - 2y + 4z = 0 \end{cases} $$ ``` Produces a braced system of two equations. Swapping cases for pmatrix, bmatrix or aligned gives matrices and multi-step derivations with the same row syntax. #### GitHub and GitLab math fences GitHub renders plain $ and $$ in files, issues and comments, but its documented syntax is a dollar-backtick span inline and a math code fence for blocks. GitLab uses the same two forms. The fenced version is the safest, because its contents are never parsed as Markdown first. ```markdown Inline: $`\sqrt{3x-1}+(1+x)^2`$ ```math \left| \vec{v} \right| = \sqrt{x^2 + y^2} ``` ``` Both forms render on GitHub and GitLab. The math fence removes escaping problems entirely, since everything inside it is handed to the math renderer untouched. #### Escaping underscores, dollars and backslashes An underscore means subscript to LaTeX and emphasis to Markdown, so a parser that runs Markdown first can swallow it. Escaping the character, or moving the formula into a math fence, fixes it. Doubling backslashes is only needed when the Markdown itself sits inside a string literal. ```markdown $x_1 + x_2$ may lose its underscores in strict parsers $x\_1 + x\_2$ safe in every renderer Cost: \$50 escaped dollar, no math ``` The escaped version typesets identically in KaTeX and MathJax while surviving Markdown's own emphasis pass. #### A complete LaTeX document for Overleaf To compile formulas outside Markdown you need a document wrapper. Load amsmath and amssymb, then put each display formula in an equation environment — this is exactly what the Overleaf tab of this converter generates from your document. ```markdown \documentclass{article} \usepackage{amsmath} \usepackage{amssymb} \begin{document} \begin{equation} \sum_{i=1}^{n} i = \frac{n(n+1)}{2} \end{equation} \end{document} ``` Compiles in Overleaf, pdflatex or tectonic with no further edits and produces a numbered equation. ### Where LaTeX math works in Markdown Math is the least portable part of Markdown. Every platform below renders it with a different engine, or not at all — check this table before you commit a formula to a README or a wiki. | Platform | Support | Notes | | --- | --- | --- | | GitHub | Full | Renders $, $$, $`...`$ and math fences in files, issues, PRs and discussions. | | GitLab | Full | Uses $`...`$ inline and math code fences; bare $$ also works in recent versions. | | Jupyter Notebook | Full | Markdown cells render $ and $$ via MathJax, plus align and cases environments. | | Obsidian | Full | MathJax-based. Put $$ on its own lines or the block renders inline. | | R Markdown / Quarto | Full | MathJax when knitting to HTML, a real LaTeX engine when knitting to PDF. | | VS Code preview | Partial | The built-in preview needs the Markdown+Math extension; MDX pipelines differ. | | Notion | Partial | Has its own inline equation and equation block; pasted raw $$ math is not converted. | | Discord / Slack | None | No math renderer at all. Paste an image or use a code block. | ### How to convert Markdown math to LaTeX 1. **Paste your Markdown** — Drop a document containing $...$ or $$...$$ math into the editor on the left. It is parsed with remark as you type, so nothing is uploaded anywhere. 2. **Check the live preview** — The preview tab renders the whole document with KaTeX, so you can confirm every formula is valid before you export it. 3. **Review the extracted formulas** — Open the LaTeX tab to see each inline and display equation pulled out of the document, rendered and listed with its own copy button. 4. **Export a compilable document** — The Overleaf tab wraps every formula in an article-class document with amsmath, amssymb, amsfonts and mathtools already loaded — copy it straight into Overleaf. ### Frequently asked questions **How do I write LaTeX formulas in Markdown?** Use dollar-sign delimiters. A single pair, $E = mc^2$, produces an inline formula that stays in the sentence; a double pair on its own lines produces a centred display equation. Markdown itself does not parse math, so the surrounding platform hands the content to KaTeX or MathJax. **How do I write LaTeX in a Jupyter notebook?** Put the formula in a Markdown cell and use $formula$ for inline math or $$formula$$ for display math, then run the cell so MathJax renders it. Jupyter also accepts amsmath environments such as align and cases directly. Unlike a Python string literal, a Markdown cell needs no double-escaped backslashes. **How do I use LaTeX in R Markdown?** R Markdown accepts the same $ and $$ delimiters in prose. Knitting to HTML renders them with MathJax; knitting to PDF passes them to a real LaTeX engine, so raw LaTeX commands and extra packages loaded through the header-includes YAML field also work. Math generated inside an R chunk needs cat() with results set to asis. **What is the difference between Markdown and LaTeX?** Markdown is a lightweight syntax for structure — headings, lists, links — and stays readable as plain text. LaTeX is a full typesetting system that controls pagination, cross-references, bibliographies and math with precision. Markdown with embedded LaTeX math gives you readable source for the prose and professional typesetting for the equations. **How do I convert Markdown with LaTeX to a PDF?** Pandoc is the standard route: run pandoc paper.md -o paper.pdf and the math is typeset by a LaTeX engine such as xelatex. Quarto, Typora and several VS Code extensions do the same thing behind a button. If you only need the equations, export the Overleaf document from this tool and compile that instead. **How do I convert LaTeX back to Markdown?** Pandoc handles the reverse direction as well: pandoc paper.tex -o paper.md. Math survives inside dollar delimiters, but LaTeX features with no Markdown equivalent — custom macros, floats, precise figure placement, bibliography styling — are flattened or dropped, so plan on reviewing the result. **Why is my LaTeX not rendering in Markdown?** The usual causes are a space between the dollar sign and the formula, a missing blank line around a display block, an underscore that Markdown consumed as emphasis before the math renderer saw it, or a platform with no math support at all. Moving the formula into a math code fence avoids most of these. **How do I write a matrix or a system of equations in Markdown?** Use an amsmath environment inside a display block. pmatrix, bmatrix and vmatrix produce matrices with round, square and vertical delimiters, while cases produces a braced system. Separate rows with a double backslash and columns with an ampersand. **Can I use LaTeX packages such as TikZ in Markdown?** Not in browser-rendered Markdown. KaTeX and MathJax implement math commands only, not the package system, so TikZ pictures and \usepackage lines are ignored. They do work when the Markdown is compiled to PDF through a real LaTeX engine, for example with Pandoc or Quarto. **Do I need to double-escape backslashes in Markdown LaTeX?** Not in a plain .md file — write \frac and \sum exactly as you would in LaTeX. Doubling is only required when the Markdown lives inside another string, such as a JavaScript template literal, a JSON field or a Python docstring, where the backslash is itself an escape character. --- ## HTML Table to Markdown Converter URL: https://mdutil.com/tools/html-to-markdown-table ### How do you convert an HTML table to Markdown? Paste the table's HTML into a converter and it rewrites each as a pipe-delimited Markdown row, promotes the first row to headers, and inserts a --- separator line beneath it. Cell text is kept, tags are stripped, and literal pipe characters are escaped so the column structure survives. ```markdown
NameAge
John25
| Name | Age | | --- | --- | | John | 25 | ``` The header cells become the first Markdown line, the dashed row defines the columns, and every remaining becomes one pipe-delimited data row. ### How HTML tables map to Markdown Markdown tables are far simpler than HTML tables: one line per row, pipes between cells, and a single dashed row that declares the columns. Most conversions are lossless, but a few HTML features have no Markdown equivalent — here is exactly what this converter does with each of them. #### Header cells and thead / tbody wrappers A row of cells becomes the Markdown header. The converter reads rows in document order, so and wrappers make no difference to the output. ```markdown
ProductPrice
Keyboard$79
``` Produces | Product | Price | followed by the | --- | --- | separator and one data row for the keyboard. #### Tables with no header row Markdown tables must have a header, so the first is always promoted — even when it contains only cells. If that row is real data, add a proper row to the HTML before converting. ```markdown
Keyboard$79
Mouse$29
``` Keyboard and $79 end up as the column headings, and only the mouse row remains as data. #### Pipe characters inside cells A raw pipe would split a cell into two columns. Every pipe found in cell text is escaped with a backslash automatically, so shell commands and regex patterns survive the conversion. ```markdown cat access.log | grep 500 ``` Becomes | cat access.log \| grep 500 | — the pipe prints as a character instead of creating a new column. #### colspan and rowspan Markdown has no merged cells. Rows that span columns come out short, so the converter pads every row with empty cells until all rows match the widest one. The table stays valid, but you may want to redistribute the values by hand. ```markdown
ItemQtyTotal
Subtotal$108
``` The second row becomes | Subtotal | $108 | | — three columns wide, with the merge flattened into a trailing empty cell. #### Links, bold text and images in cells Cells are converted using their text content, so inline HTML is flattened to plain text. Re-add the Markdown formatting afterwards if the link or emphasis matters. ```markdown Docs Sold out ``` You get | Docs | Sold out | with the anchor and the tag removed; the URL is not carried into the Markdown. #### Several tables in one paste Every in the input is converted in document order and separated by a blank line, so you can dump a whole page of HTML in at once instead of converting table by table. ```markdown
Q1
12%
Q2
18%
``` Outputs two independent Markdown tables, one for Q1 and one for Q2, separated by a blank line. ### Where Markdown tables actually render Tables are not part of core CommonMark — they come from the GitHub Flavored Markdown spec. That means the output of this converter renders beautifully in some places and shows up as raw pipes in others. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | GFM tables render in READMEs, issues, PRs, comments and wikis. | | Obsidian | Full | Renders in reading view and live preview; column alignment supported. | | VS Code | Full | The built-in Markdown preview renders GFM tables out of the box. | | Reddit | Full | Supported in the Markdown editor on both old and new Reddit. | | Notion | Partial | Pasting a Markdown table converts it into a Notion table block, not literal pipes. | | Discord | None | Discord has no table support — pipes show literally. Use a code block to keep columns aligned. | | Slack | None | No table syntax. Paste inside a code block or attach the table as a snippet. | ### How to convert an HTML table to Markdown 1. **Paste your HTML** — Drop the table markup into the HTML editor on the left. You can paste a single element or a whole page — only tables are converted. 2. **Or import a file** — Use the upload button to load an .html, .htm or .txt file straight from disk instead of pasting. 3. **Check the result** — The Markdown regenerates automatically as you type. Compare the Markdown code with the rendered preview underneath it to confirm the columns line up. 4. **Copy or download** — Copy the Markdown to your clipboard, or export it as a .md file ready to drop into a repository. ### Frequently asked questions **How do I convert an HTML table to Markdown?** Paste the HTML into the editor on this page. The converter parses every
element, turns each row into a pipe-delimited line, adds the dashed separator row under the header, and escapes any pipe characters found in cell text. The Markdown appears instantly and can be copied or downloaded as a .md file. **Can I just leave the HTML table in my Markdown file instead?** On GitHub and most static site generators, raw HTML inside a Markdown file does render. But it breaks in plain-text contexts, in editors that sanitise HTML, and in Markdown-to-PDF pipelines. A native pipe table is shorter, diffs cleanly in Git and stays readable in the source file, which is why converting is usually worth it. **What happens to colspan and rowspan when converting?** Markdown tables cannot merge cells, so spans are flattened. A row that spans two columns produces fewer cells than its neighbours, and the converter pads it with empty cells so every row has the same width. The table remains valid Markdown, but you should review merged headers and subtotal rows manually. **Can I convert an Excel or Google Sheets table to Markdown?** Yes. Copying a range from Excel, Numbers or Google Sheets puts an HTML table on your clipboard, so pasting it into the HTML editor works directly. The spreadsheet styling is discarded and you get a plain Markdown table with the first row as the header. **Are links and bold text inside cells preserved?** No. Cells are converted using their text content only, so an anchor becomes its link text and a element becomes plain words. This keeps the output predictable and safe to paste anywhere. If a link matters, add the Markdown link syntax back into that cell after converting. **Why is my Markdown table not rendering?** The three usual causes are a missing separator row of dashes directly under the header, a platform that does not support tables at all such as Discord or Slack, or an unescaped pipe character inside a cell that silently adds a column. A blank line before the table also helps in strict parsers. **Do the pipes need to line up in the source?** No. Markdown parsers only care about the number of pipes per row, not about visual alignment, so | Name | Age | and |Name|Age| render identically. Aligned columns are purely a readability convenience for whoever edits the raw file later. **How do I put a line break inside a table cell?** Markdown table rows cannot contain real newlines, so a cell with multiple lines of HTML is collapsed into a single space-separated line during conversion. To force a visual break afterwards, insert a
tag inside the cell — every GFM-compatible renderer honours it. **Can I convert more than one table at a time?** Yes. Paste as much HTML as you like: every
element is converted in document order and the resulting Markdown tables are separated by a blank line. This makes it practical to convert an entire documentation page in a single step. **Is my HTML uploaded to a server?** No. Parsing and conversion happen locally in your browser using the built-in DOM parser, so nothing leaves your machine. That makes the tool safe for internal reports and unpublished documentation, and it works offline once the page has loaded. --- ## Markdown Bold Generator URL: https://mdutil.com/tools/markdown-bold ### How do you make text bold in Markdown? Wrap the text in two asterisks on each side: `**bold text**`. Two underscores, `__bold text__`, produce exactly the same result. Both render as , so screen readers announce the text with emphasis. Asterisks are the safer default because they also work mid-word, which underscores do not. ```markdown **This text is bold** __This text is also bold__ ``` Both lines render identically as bold text, and both become elements in the generated HTML. ### Markdown bold syntax explained Markdown gives you two interchangeable delimiters for bold. They compile to the same HTML, but they behave differently in one important edge case — bold inside a word. #### Double asterisks (recommended) The most portable way to write bold. Supported by CommonMark, GitHub Flavored Markdown, Discord, Slack, Obsidian, Notion and every major static site generator. ```markdown Ship it **today**, not next quarter. ``` Renders as: Ship it today, not next quarter — with “today” in bold. #### Double underscores Functionally identical for whole words. Useful when your text already contains literal asterisks and you want to avoid escaping them. ```markdown __Warning:__ this action cannot be undone. ``` Renders as: Warning: this action cannot be undone — with “Warning:” in bold. #### Bold inside a word This is the one real difference. CommonMark only allows intra-word emphasis with asterisks, because underscores are common inside identifiers like snake_case_names. ```markdown un**bel**ievable un__bel__ievable ``` The first line bolds “bel”. The second renders literally as un__bel__ievable, underscores and all. #### Bold and italic together Three delimiters combine strong emphasis with italic emphasis. You can also nest one inside the other for clearer intent. ```markdown ***bold and italic*** **bold with _italic_ inside** ``` Produces bold and italic on the first line, and bold text containing an italic run on the second. #### Escaping literal asterisks Prefix each asterisk with a backslash when you want to show the characters rather than trigger formatting. ```markdown \*\*not bold\*\* ``` Renders literally as **not bold** with the asterisks visible. ### Where Markdown bold works Bold is one of the most universally supported Markdown features, but the intra-word rule and a few platform quirks are worth knowing before you publish. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | Both ** and __ work in READMEs, issues, PRs and comments. | | Discord | Full | ** works everywhere. __text__ renders as underline, not bold. | | Slack | Partial | Slack's own composer uses single *asterisks* for bold. | | Obsidian | Full | Both delimiters, plus intra-word bold with asterisks. | | Notion | Full | Typing **text** auto-converts as you type. | | Reddit | Full | Both delimiters supported in the Markdown editor. | ### How to bold text in Markdown 1. **Enter your text** — Type or paste the text you want to emphasise into the input box above. 2. **Choose a delimiter** — Pick double asterisks for maximum compatibility, or double underscores if your text already contains asterisks. 3. **Copy the Markdown** — Use the copy button to grab the generated syntax, or switch to the HTML tab if you need markup instead. 4. **Verify the preview** — Check the preview tab to confirm the emphasis lands on exactly the words you intended before you publish. ### Frequently asked questions **What is the difference between ** and __ in Markdown?** For whole words there is no difference — both render as . The difference appears inside a word: **un**bold**able** style intra-word emphasis only works with asterisks, because underscores are reserved to avoid breaking identifiers like snake_case_variable. **How do I make text bold and italic at the same time?** Use three delimiters on each side: ***bold and italic*** or ___bold and italic___. This produces nested tags. Mixing delimiters, such as **_text_**, works too and is often easier to read in raw form. **Why is my bold text not working in Markdown?** The three usual causes are: a space between the delimiter and the text (** text ** does not render), an unclosed delimiter, or the text sitting inside a code block or inline code span where Markdown formatting is deliberately ignored. **How do I bold text in GitHub Markdown?** GitHub Flavored Markdown supports both **text** and __text__ in READMEs, issues, pull requests, comments and wikis. GitHub also supports intra-word bold with asterisks. **How do I make text bold in Discord?** Discord uses **text** for bold. Be careful with underscores: __text__ renders as underlined text in Discord rather than bold, which differs from standard Markdown. **Does bold formatting work inside code blocks?** No. Markdown intentionally does not process formatting inside fenced code blocks or inline code spans. The asterisks appear literally, which is what you want when documenting code. **How do I show literal asterisks without making text bold?** Escape each asterisk with a backslash: \*\*text\*\* renders as **text**. Alternatively, wrap the text in backticks to make it inline code, which also disables formatting. **Is bold in Markdown good for SEO?** Bold text compiles to , which conveys importance to both browsers and assistive technology. It provides a mild semantic signal, but emphasising every other phrase dilutes that signal — reserve it for genuinely important terms. --- ## Markdown Italic Generator URL: https://mdutil.com/tools/markdown-italics ### How do you make text italic in Markdown? Wrap the text in a single asterisk on each side: `*italic text*`. A single underscore, `_italic text_`, renders identically. Both compile to an element, so screen readers announce the emphasis. Asterisks are the safer default because underscores are ignored inside words like snake_case_names. Never leave a space between the marker and the text. ```markdown *This text is italic* _This text is also italic_ ``` Both lines render identically as italic text, and both become elements in the generated HTML. ### Markdown italic syntax explained Markdown has two single-character delimiters for italics. They compile to the same HTML, but they part ways in one place that trips people up — emphasis inside a word. #### Single asterisks (recommended) The most portable way to write italics. Supported by CommonMark, GitHub Flavored Markdown, Discord, Reddit, Obsidian, Notion and every major static site generator. ```markdown The deadline is *not* negotiable. ``` Renders as: The deadline is not negotiable — with “not” in italics. #### Single underscores Functionally identical for whole words. Many writers prefer it because a lone underscore is easier to spot in raw text than a lone asterisk sitting next to a bullet or a list marker. ```markdown I finally finished _The Great Gatsby_ last night. ``` Renders as: I finally finished The Great Gatsby last night — with the title in italics. #### Italic inside a word This is the one real difference between the two markers. CommonMark only allows intra-word emphasis with asterisks, because underscores appear inside identifiers such as snake_case_names and file_name_v2. ```markdown re*structure*d re_structure_d ``` The first line italicises “structure”. The second renders literally as re_structure_d, underscores and all. #### Bold and italic together Three markers apply strong and emphatic formatting at once. Mixing the two delimiters is often clearer in raw form, because you can see which marker closes which. ```markdown ***bold and italic*** **bold with _italic_ inside** *italic with **bold** inside* ``` The first line produces bold and italic. The other two nest one emphasis inside the other. #### Escaping literal asterisks and underscores Prefix the character with a backslash when you want to show it instead of triggering emphasis. Inline code spans disable formatting too, which is usually the better choice for filenames and variables. ```markdown \*not italic\* `already_snake_case` ``` The first line renders literally as *not italic*. The second shows already_snake_case as inline code with no emphasis applied. #### Where italics silently fail Emphasis markers must hug the text. A space after the opening marker, an unclosed marker, or text inside a fenced code block all leave the characters visible instead of formatting them. ```markdown * not italic * *unclosed italic *correct italic* ``` Only the third line becomes italic. The first renders with visible asterisks — and in a list context a leading “* ” starts a bullet instead. ### Where Markdown italics work Italics are supported almost everywhere, but chat apps use their own dialects and the intra-word rule differs between parsers. Check the target platform before you publish. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | Both *text* and _text_ work in READMEs, issues, PRs, comments and wikis. | | Discord | Full | Both markers italicise. ***text*** gives bold italic; __text__ is underline, not bold. | | Slack | Partial | Slack's composer uses _underscores_ for italic. Asterisks mean bold there, not italic. | | Obsidian | Full | Both markers, plus intra-word italics with asterisks. | | Notion | Full | Typing *text* or _text_ auto-converts to italic as you type. | | Reddit | Full | Both markers supported in the Markdown editor and in old.reddit. | | VS Code preview | Full | Follows CommonMark, so intra-word italics need asterisks. | ### How to italicise text in Markdown 1. **Enter your text** — Type or paste the words you want to emphasise into the input box above. 2. **Choose a marker** — Pick asterisks for maximum compatibility, or underscores if your text already contains asterisks or you are writing for Slack. 3. **Copy the Markdown** — Use the copy button to grab the generated syntax, or switch to the HTML tab if you need an tag instead. 4. **Check the preview** — Open the preview tab to confirm the emphasis lands on exactly the words you intended before you publish. ### Frequently asked questions **How do you do italics in Markdown?** Put a single asterisk or a single underscore on each side of the text: *italic* or _italic_. Both render as an element. Do not leave spaces between the marker and the text — *this works* but * this does not *. **Is there a difference between asterisks and underscores for italics?** For whole words there is no difference; both produce . The difference is intra-word emphasis: re*structure*d italicises part of the word, while re_structure_d renders literally, because underscores are reserved so identifiers like snake_case_name are not broken. Slack is the other exception, where underscores mean italic and asterisks mean bold. **How do I make text bold and italic at the same time in Markdown?** Use three markers on each side: ***bold and italic*** or ___bold and italic___. Mixed forms such as **_text_** and *__text__* work too and are easier to read in raw Markdown because you can tell which marker closes which. **How do I create italic text in GitHub Markdown?** GitHub Flavored Markdown accepts both *text* and _text_ in READMEs, issues, pull requests, comments, releases and wikis. GitHub follows CommonMark, so italics inside a word require asterisks. **How do I italicise text in Discord?** Discord supports both *text* and _text_ for italics, and ***text*** for bold italic. Note that Discord differs from standard Markdown elsewhere: __text__ renders as underline rather than bold. **Why are my Markdown italics not working?** The usual causes are a space after the opening marker, a marker that is never closed, text sitting inside a code block or inline code span where formatting is deliberately ignored, or an underscore used inside a word, which most parsers refuse to treat as emphasis. **Can I italicise only part of a word in Markdown?** Yes, but only with asterisks. Writing re*structure*d italicises the middle of the word, while re_structure_d prints the underscores literally. This rule exists so that variable names and file names containing underscores survive unchanged. **How do I show a literal asterisk or underscore without making text italic?** Escape it with a backslash: \*text\* renders as *text*. Wrapping the content in backticks also works and is usually better for code, since inline code spans disable all Markdown formatting. **Does Markdown italic produce or ?** Standard Markdown parsers output , which carries semantic emphasis and is announced by screen readers. The tag is presentational only. If you specifically need , write the HTML tag directly, since most Markdown renderers allow inline HTML. **How do I write italics in Slack and Notion?** Slack's message composer uses _underscores_ for italic and single *asterisks* for bold, which is the reverse of standard Markdown. Notion follows the standard: typing *text* or _text_ converts to italic as you type. --- ## Markdown Underline Generator URL: https://mdutil.com/tools/markdown-underline ### How do you underline text in Markdown? Markdown has no underline syntax of its own. CommonMark, GitHub Flavored Markdown and most dialects leave underlining to HTML, so wrap the text in text for a plain visual underline, or text when the text is genuinely an insertion. Both work anywhere inline HTML is allowed. ```markdown This text is underlined This text is marked as inserted ``` Both lines render with a line under the text. additionally tells browsers and screen readers that the content was added to the document. ### How to underline in Markdown: every working method There is no asterisk-style operator for underline. John Gruber left it out on purpose, because underlined text is read as a hyperlink by almost everyone. So every method below reaches for HTML or for a platform-specific extension — pick the one your renderer actually supports. #### The tag (most reliable) A purely presentational underline. It works everywhere inline HTML is allowed: GitHub, GitLab, Obsidian, the VS Code preview, Jupyter notebooks, Jekyll, Hugo and Docusaurus. ```markdown Read the installation notes before upgrading. ``` Renders as: Read the installation notes before upgrading — with “installation notes” underlined. #### The tag (semantic) Browsers underline by default, but unlike it carries meaning: this content was inserted. It also accepts datetime and cite attributes, which makes it the right choice for changelogs and tracked revisions. ```markdown The endpoint now accepts bearer tokens in the header. Added in v2.4 ``` Both lines appear underlined. Assistive technology announces the run as inserted text rather than as generic decoration. #### Inline CSS for styled underlines A span with text-decoration gives you colour, thickness and dotted or wavy lines. The catch: many renderers sanitise HTML and strip the style attribute, so the text silently loses its underline instead of failing loudly. ```markdown verify this value ``` Underlined with a red dotted line in a full HTML renderer. On GitHub the style attribute is removed and the text renders plain. #### Combining underline with bold or italic Inline HTML does not switch Markdown parsing off, so ** and * still work inside the tags. Nest in whichever order reads better in the source. ```markdown **Critical:** restart the service after upgrading. **Bold and underlined** ``` Both lines produce text that is bold and underlined at the same time; the emphasis markers are still processed inside the tag. #### Discord: __text__ means underline Discord is the one common platform with a real underline shorthand. It reuses the double underscore that standard Markdown treats as bold, so the same string means two different things depending on where you paste it. ```markdown __underlined in Discord__ ***__bold, italic and underlined__*** ``` In Discord both lines are underlined. In CommonMark or on GitHub the first line renders as bold text instead, and HTML tags are printed literally by Discord. #### Pandoc: bracketed span If you convert Markdown to DOCX, LaTeX or PDF with Pandoc, a bracketed span with the underline class produces a native underline in the output format instead of raw HTML. ```markdown Sign here: [your full name]{.underline} ``` Pandoc emits a true underline in DOCX, LaTeX and HTML output. Other Markdown renderers show the brackets and the class literally. ### Where underline actually renders Underline is the least portable common formatting request in Markdown, because it depends entirely on how much raw HTML the renderer allows. Check your target before you publish. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Partial | and render in READMEs, issues and PRs. The style attribute is stripped, so inline CSS fails silently. | | Discord | Different syntax | __text__ underlines. HTML tags are shown literally, so does not work. | | Slack | None | No underline in messages at all. Use *bold* or _italic_ instead. | | Obsidian | Full | and render in reading and live preview. Ctrl/Cmd+U inserts the tags for you. | | Notion | No syntax | Underline exists as Ctrl/Cmd+U formatting, but typed or imported is not converted. | | Reddit | None | Reddit strips HTML and has no underline shorthand. Bold and italic are the only options. | | VS Code / Jupyter | Full | The built-in Markdown preview allows inline HTML, so both tags render as expected. | ### How to underline text in Markdown with this tool 1. **Pick a method** — Choose the tag for a plain underline, when the text is an insertion, or inline CSS when you need a custom line style. 2. **Enter your text** — Type or paste the words you want underlined into the input box. The output updates as you type. 3. **Copy the markup** — Use the Markdown tab for the snippet you paste into a .md file, or the HTML tab if you are writing HTML directly. 4. **Check the preview** — Open the preview tab to confirm the underline renders, then verify it again on the platform you are publishing to. ### Frequently asked questions **Does Markdown support underline?** No. Standard Markdown and CommonMark have no underline syntax. The original specification deliberately covered only emphasis and strong emphasis, because underlined text is universally read as a hyperlink. Underlining therefore falls back to HTML tags such as and . **How do I underline text in GitHub Markdown?** Use the HTML tag underlined text or underlined text. GitHub Flavored Markdown allows a safe subset of inline HTML, so both work in README files, issues, pull requests, comments and wikis. Inline CSS does not work, because GitHub removes the style attribute. **What is the difference between the u tag and the ins tag?** The u tag is purely visual: it draws a line and says nothing about meaning. The ins tag means the content was inserted into the document, is underlined by default, accepts datetime and cite attributes, and is announced as inserted text by screen readers. Prefer ins for changelogs and revisions. **How do I underline text in Discord?** Discord uses two underscores: __text__ produces underlined text, not bold. You can stack it with other markers, for example ***__text__*** for bold, italic and underlined at once. Discord ignores HTML, so tags appear as literal characters in the message. **Why is my u tag showing as plain text instead of underlining?** The renderer is sanitising or disabling raw HTML. Reddit and Discord strip it entirely, some static site generators need HTML explicitly enabled in the Markdown configuration, and MDX requires valid JSX with a properly closed tag. Check the renderer's HTML settings before assuming the syntax is wrong. **Can I combine underline with bold or italic in Markdown?** Yes. Markdown formatting is still parsed inside inline HTML, so **text** is bold and underlined, and *text* is italic and underlined. You can also nest the other way round, such as **text**, with identical results. **Can I underline a heading or a table cell?** Yes. Headings and table cells accept inline HTML, so ## Release notes and a cell containing pending both render underlined. Keep the tag inside the cell, and do not break the tag across multiple lines or the table row will not parse. **Is underlined text bad for accessibility?** It can be. Sighted users associate underlines with links, so underlining plain text invites mistaken clicks and adds cognitive load. If the meaning is emphasis, use bold or italic, which map to strong and em. If the meaning is an insertion, use ins, which carries that meaning explicitly. **What should I use instead of underline in Markdown?** Use **bold** for strong emphasis, *italic* for mild emphasis, `code` for identifiers and commands, and blockquotes for callouts. These are native Markdown, render everywhere including Slack, Reddit and Discord, and convey meaning rather than decoration. --- ## Markdown Strikethrough Generator URL: https://mdutil.com/tools/markdown-strikethrough ### How do you strikethrough text in Markdown? Wrap the text in double tildes: `~~text~~`. It renders as a element with a line through it. Strikethrough is a GitHub Flavored Markdown extension rather than core CommonMark, so GitHub, GitLab, Reddit and Discord support it, while strict CommonMark parsers need the HTML tag `text` instead. ```markdown ~~This text is struck through~~ ``` Renders as struck-through text and compiles to a element in the generated HTML. ### Markdown strikethrough syntax explained Strikethrough crosses a word out while leaving it readable, which is exactly what you want for corrections, superseded requirements, completed tasks and old prices. There are three ways to write it, and which one is safe depends on the parser rather than on personal taste. #### Double tildes (recommended) The canonical GitHub Flavored Markdown form. Use it for READMEs, issues, pull requests, Discord messages, Obsidian notes and anything rendered by a GFM-compatible parser. ```markdown Ship it ~~Monday at 3pm~~ Tuesday at 2pm. ``` Renders as: Ship it Monday at 3pm Tuesday at 2pm — with “Monday at 3pm” crossed out. #### Single tilde The GFM strikethrough extension accepts one or two tildes, so GitHub renders ~text~ as well. Many other parsers do not, and Slack's own composer uses single tildes exclusively — treat it as platform-specific, not portable. ```markdown ~Deprecated in v2~ ``` Crossed out on GitHub, GitLab and Slack. Rendered literally, tildes included, in Discord and most CommonMark-only parsers. #### HTML tag fallback Strikethrough is not part of the original Markdown spec or CommonMark. When your parser refuses tildes, drop down to raw HTML — every Markdown flavour that allows inline HTML accepts it. ```markdown Removed in the 2.0 rewrite Visually struck out, no semantic meaning ``` Both render with a line through the text. means the content was deleted; only means it is no longer accurate. #### Combining with bold, italic and links Strikethrough nests with other inline formatting, and the nesting order does not change the output. This is how you strike out an entire link label rather than just its text. ```markdown ~~**Critical bug**~~ fixed in 1.4 ~~[Old migration guide](https://example.com/v1)~~ ``` The first line shows bold text with a line through it; the second strikes out the whole clickable link label. #### Task lists and tables Inline strikethrough works inside every construct that accepts inline formatting, including checklists and table cells — a common pattern for changelogs and release checklists. ```markdown - [x] ~~Write first draft~~ - [ ] Review draft | Plan | Price | | --- | --- | | Pro | ~~$99~~ $79 | ``` The completed task and the old price appear crossed out; the remaining rows stay untouched. #### Escaping literal tildes Escape with a backslash, or wrap the text in backticks, when you need the tilde characters to show. Note that a home directory path like ~/projects is a single tilde and never triggers strikethrough on its own. ```markdown \~\~not struck through\~\~ `~~shown as code~~` ``` Both lines display the tildes literally instead of crossing the text out. ### Where Markdown strikethrough works Because strikethrough is an extension, support is good but not universal — and the single-tilde variant is where platforms genuinely disagree. Check the target before you publish. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | ~~text~~ works in READMEs, issues, PRs, comments and wikis. Single tildes also render. | | Discord | Full | Requires double tildes. Single tildes are shown literally, and HTML tags are never parsed. | | Slack | Partial | Slack's composer uses single ~tildes~ for strikethrough; double tildes are not its native syntax. | | Obsidian | Full | ~~text~~ renders in both edit and reading view, and inline HTML works too. | | Notion | Full | Typing ~~text~~ auto-converts to struck-through text as you type. | | Reddit | Full | Double tildes are supported in the Markdown editor and in old.reddit.com. | | VS Code preview | Full | The built-in Markdown preview follows GFM, so double tildes render as expected. | | CommonMark / classic Markdown | None | No tilde syntax at all. Use or enable a GFM strikethrough plugin. | ### How to strikethrough text in Markdown 1. **Enter your text** — Type or paste the words you want to cross out into the input field above. 2. **Pick a syntax** — Choose double tildes for GitHub and most platforms, single tilde for Slack, or the HTML tag when your parser does not support the GFM extension. 3. **Copy the output** — Use the copy button on the Markdown tab, or switch to the HTML tab if you need markup for a template or email. 4. **Check the preview** — Open the preview tab to confirm the line lands on exactly the words you meant to strike before you publish. ### Frequently asked questions **What does ~~ mean in Markdown?** Two tildes on each side of a phrase mark it as strikethrough — the text stays readable but is drawn with a horizontal line through it. It compiles to a element, which signals that the content was removed or superseded rather than simply deleted from the page. **Is strikethrough part of standard Markdown?** No. Neither the original 2004 Markdown specification nor CommonMark defines strikethrough. It was added by GitHub Flavored Markdown and then adopted almost everywhere, which is why it works on GitHub, GitLab, Reddit and Discord but fails silently in strict CommonMark parsers such as a default python-markdown install. **How do I strikethrough text in GitHub Markdown?** Wrap the text in double tildes, for example ~~outdated instructions~~. This works in READMEs, issues, pull requests, comments, releases and wikis. GitHub follows the GFM strikethrough extension, which also accepts a single tilde, but double tildes are the convention and are far more portable. **What is the difference between one tilde and two tildes?** The GFM extension treats one or two tildes as strikethrough, so on GitHub they behave the same. Elsewhere they diverge: Slack recognises only single tildes, Discord recognises only double tildes, and many parsers recognise only double tildes. Use two tildes unless you are writing specifically for Slack. **Why is my Markdown strikethrough not working?** The usual causes are a space between the tildes and the text, an unmatched or unclosed tilde pair, a parser without the GFM extension enabled, or text sitting inside a code block or inline code span where formatting is deliberately ignored. Three or more tildes at the start of a line are also read as a code fence. **How do I strikethrough text in Discord and Slack?** Discord uses double tildes: ~~text~~. Slack is the exception among major chat apps and uses a single tilde: ~text~. Neither app renders HTML, so the tag is shown literally in both. Copying the same snippet between the two is the most common cause of broken strikethrough in chat. **Can I combine strikethrough with bold, italic or links?** Yes. Strikethrough nests freely with other inline formatting and the order does not matter, so ~~**text**~~ and **~~text~~** produce the same result. Wrapping a whole link in tildes, as in ~~[label](https://example.com)~~, strikes out the clickable label while keeping the link functional. **Can strikethrough span multiple lines or paragraphs?** Tilde syntax is inline only and stops at a blank line, so each paragraph needs its own pair of tildes. To strike out a whole block at once, wrap it in HTML instead: put the paragraphs inside an opening and closing tag, which any Markdown flavour that allows inline HTML will honour. **How do I show a literal tilde without triggering strikethrough?** Escape each tilde with a backslash, or wrap the text in backticks to turn it into inline code, which disables all formatting. A lone tilde in a path such as ~/projects is harmless because strikethrough requires a matching closing pair on the same line. **What is the difference between and in HTML?** marks content that was actually removed from a document and can carry cite and datetime attributes, so it is the better choice for changelogs and revisions. only means the content is no longer accurate or relevant, such as an expired price. Markdown tildes normally compile to . --- ## Markdown Quote Generator URL: https://mdutil.com/tools/markdown-quote ### How do you quote text in Markdown? Start the line with a greater-than sign and a space: `> your quote`. Every consecutive line you prefix that way joins the same blockquote, which renders as an indented
element. Add a second `>` to nest a quote inside a quote, and use a lone `>` on a line to separate paragraphs. ```markdown > This is a quote in Markdown. > It continues on the next line. > > And this is a second paragraph of the same quote. ``` Renders as one indented blockquote containing two paragraphs, normally drawn with a vertical bar down the left edge. ### Markdown blockquote syntax explained A blockquote is a container, not an inline style. That single fact explains almost every blockquote question: what ends a quote, how nesting works, and why other Markdown keeps working inside it. #### Basic blockquote One greater-than sign at the start of a line quotes everything after it. The space after the > is optional, but every style guide and formatter adds it. ```markdown > Simplicity is the ultimate sophistication. ``` Renders as an indented block of text wrapped in a
element, usually with a vertical rule on the left. #### Multi-line quotes and lazy continuation Prefix every line to keep the quote explicit. CommonMark also allows lazy continuation, where an unprefixed line directly below is absorbed into the quote — convenient, but it breaks the moment someone inserts a blank line. ```markdown > Prefix every line explicitly. > This is the clearest and safest form. > Lazy continuation also works: this unprefixed line still joins the quote above. ``` Two separate blockquotes. In the second one the unprefixed line is swallowed into the quote, which is exactly the ambiguity you avoid by prefixing every line. #### Multiple paragraphs in one quote A genuinely blank line ends a blockquote. To keep several paragraphs inside the same quote, put a lone > on the separating line so the container never closes. ```markdown > First paragraph of the quote. > > Second paragraph of the same quote. ``` One
containing two

elements. Delete the lone > and you get two unrelated blockquotes stacked on top of each other. #### Nested blockquotes Add one > per level. This is how quoted email threads and forum replies are represented — and the blank separator lines need the deeper prefix too, or the nesting collapses. ```markdown > Original comment. > >> Reply nested one level deeper. >> >>> And a third level. > > Back to the outer level. ``` Three progressively indented blockquotes followed by a return to the outermost level; each level adds another

wrapper in the HTML. #### Other Markdown inside a quote Because a blockquote is a container, headings, lists, emphasis, tables and fenced code blocks all keep working inside it, as long as each line carries the > prefix. ```markdown > ### Release note > > - Fixes the export crash > - **Breaking:** renames the `--out` flag > > ```bash > npm i mdutil@latest > ``` ``` A single blockquote containing a heading, a bullet list with bold text, and a fenced code block, all inside one quoted region. #### Quoting a source with attribution Markdown has no dedicated citation syntax. The convention is an em dash plus the author as the last paragraph inside the quote, so the source travels with the words. ```markdown > The best way to predict the future is to invent it. > > — *Alan Kay* ``` The quotation and its attribution stay in the same blockquote, keeping the visual connection between the text and its source. ### Where Markdown blockquotes work The > character is understood everywhere, but nesting depth, multi-line shortcuts and callout extensions differ enough to matter before you publish. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | Nesting and embedded Markdown both work. GitHub adds alerts such as > [!NOTE] and > [!WARNING]. | | Discord | Full | > quotes one line; >>> quotes everything to the end of the message. Nesting is not supported. | | Slack | Partial | > works in the composer, but every level is flattened to a single indent. | | Obsidian | Full | Full nesting, plus callouts written as > [!info] Title on the first line. | | Notion | Partial | Typing > then a space creates a quote block; nested quotes are not available. | | Reddit | Full | > works in the Markdown editor and nests; the rich-text editor exposes a quote button instead. | ### How to create a blockquote in Markdown 1. **Paste the text you want to quote** — Type or paste your text into the box above. Every line you enter becomes one line of the blockquote. 2. **Use line breaks for structure** — Press Enter to start a new line. The generator prefixes each line with > so the whole passage stays inside a single quote instead of splitting apart. 3. **Copy the Markdown** — Use the copy button to grab the generated blockquote and paste it straight into a README, issue, pull request or note. 4. **Check the preview** — Switch to the preview tab to confirm the quote renders as one block, then add extra > characters by hand wherever you need a nested reply. ### Frequently asked questions **What is the difference between a blockquote and regular quotation marks in Markdown?** A blockquote is Markdown syntax: the > character creates a real
element that renderers indent and style. Quotation marks are ordinary text characters with no structural meaning. Use a blockquote when the quoted passage should be visually and semantically separated from your own prose, and quotation marks for short inline quotes inside a sentence. **How do I create a multi-line blockquote in Markdown?** Put > at the start of every line of the passage. Most parsers also accept lazy continuation, where only the first line is prefixed and the following lines are absorbed into the quote, but that stops working as soon as a blank line appears. Prefixing every line is the portable option. **How do I nest a quote inside a quote in Markdown?** Add one extra > for each level, so >> is the second level and >>> the third. The separator lines between paragraphs need the same depth: a line containing only > will drop you back to level one, which is the usual reason nested quotes collapse unexpectedly. **How do I put several paragraphs inside one blockquote?** Separate them with a line that contains a single > and nothing else. A completely blank line closes the blockquote, so two paragraphs split by an empty line become two separate quotes rather than one quote with two paragraphs. **How do blockquotes look on GitHub?** GitHub renders blockquotes with a grey vertical bar on the left and muted text, in READMEs, issues, pull requests, comments and wikis. GitHub also supports alert callouts: a blockquote whose first line is [!NOTE], [!TIP], [!IMPORTANT], [!WARNING] or [!CAUTION] is rendered as a coloured admonition box. **Does Discord support Markdown blockquotes?** Yes. A single > followed by a space quotes just that line, while >>> at the start of a message quotes everything after it until the end of the message. Discord does not render nested blockquotes, so >> shows up as a single-level quote containing a literal > character. **How do I add attribution to a Markdown quote?** There is no dedicated citation syntax. The common convention is to end the blockquote with a paragraph containing an em dash and the author, for example a line reading > — Alan Kay. Keep the attribution inside the quote so it stays visually attached to the passage it credits. **Can I use lists, code blocks or bold text inside a blockquote?** Yes. A blockquote is a block-level container, so headings, lists, tables, fenced code blocks and inline emphasis all work inside it. The only requirement is that every line of the nested content carries the > prefix, including the blank lines between list items and code fences. **Why does my Markdown blockquote not end where I expect?** Almost always lazy continuation. If the paragraph directly below your quote is not separated by a blank line, the parser treats it as a continuation of the quote and pulls it inside. Insert an empty line after the last quoted line, or prefix the following text explicitly, to break the block. **Can I change how blockquotes are styled in Markdown?** Not from Markdown itself. Appearance comes from the CSS of whatever renders the output, so on GitHub, Discord or Notion you get their built-in styling. On your own site you can target the blockquote element in CSS, and some platforms offer callout extensions that give you colour-coded variants. --- ## Markdown List Generator URL: https://mdutil.com/tools/markdown-list ### How do you create a list in Markdown? Start each line with `-`, `*`, or `+` for a bulleted list, or with `1.` for a numbered list, always followed by a space. Indent a child line by two spaces to nest it. Leave a blank line before the first item so the list separates from the paragraph above. ```markdown - Bulleted item - Another item - Nested item 1. Numbered item 2. Second item ``` The first block renders as a bulleted
    containing one indented child; the second renders as a numbered
      starting at 1. ### Markdown list syntax explained Markdown has exactly two list types, but most of the trouble people hit comes from three details: the space after the marker, the blank line before the list, and how far you indent a child item. #### Unordered (bullet) lists Start the line with a hyphen, asterisk or plus, then a space. All three markers render as the same bullet, so pick one and stay consistent — changing the marker mid-list silently starts a brand new list. ```markdown - Install the CLI - Run the migration - Deploy the app * Asterisks work too + So do plus signs ``` The first three lines become one bulleted list. The last two use different markers, so they become two further lists rather than joining the first. #### Ordered (numbered) lists Use a number, then a period or a closing parenthesis, then a space. Only the first number is read: Markdown renumbers everything after it sequentially, which is why writing 1. on every line is a common trick in documentation. ```markdown 1. Clone the repo 1. Install dependencies 1. Run the tests 5. Starts at five 6. Then six ``` The first block renders as 1, 2, 3 even though every line says 1. The second block starts at 5 because the first item does. #### Nested lists and indentation Indent a child item under its parent and keep that indentation for every item at the same depth. Two spaces is enough under a bullet; under a numbered item use three, so the child lines up with the parent's text. Never mix tabs and spaces in one list. ```markdown - Frontend - Components - Buttons - Backend 1. Frontend 1. Components 1. Buttons 2. Backend ``` Three levels of bullets, then three levels of numbers where each nested level restarts its own count at 1. #### Mixing ordered and unordered lists Nesting is not limited to one list type. A bulleted item can contain a numbered sub-list and vice versa, which is how most outlines and release checklists are written. ```markdown - Release checklist 1. Bump the version 2. Tag the commit 3. Publish the package - After release - Announce it - Watch the error rate ``` A bulleted outer list whose first item holds a numbered sub-list and whose second holds a bulleted one. #### Paragraphs and code inside a list item Extra content belongs to an item only if it is indented to line up with that item's text, with a blank line before it. Forget the indentation and the block ends the list, restarting the numbering at the next item. ```markdown 1. Install the package ```bash npm install mdutil ``` 2. Import it and you are done. ``` A two-step numbered list where step 1 contains a fenced code block that stays inside the item instead of breaking the list in half. #### Task lists (checkboxes) GitHub Flavored Markdown extends bullets with checkboxes: the marker, a space, then [ ] or [x], then another space. Useful for issue templates, PR descriptions and daily notes. ```markdown - [x] Write the spec - [ ] Review with the team - [ ] Ship it ``` Three checkbox items with the first one ticked. Renderers without the extension show the brackets as plain text. ### Where Markdown lists work Basic bullets and numbers are universal, but nesting depth, task lists and the blank-line rule are where platforms diverge. Check the target before you publish a deep outline. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | All markers, unlimited nesting and - [ ] task lists. Two-space indent is enough. | | Discord | Partial | Bullets and 1. numbers render, nesting is capped at a few levels, task lists are not supported. | | Slack | Partial | The composer has its own list buttons; pasted Markdown list syntax is not converted. | | Obsidian | Full | Every list type plus task lists, with automatic continuation when you press Enter. | | Notion | Full | Typing "- " or "1. " creates a native list block; Tab and Shift+Tab change the nesting level. | | Reddit | Full | Bullets and numbers work, but you must leave a blank line before the list or it merges upward. | ### How to make a list in Markdown 1. **Choose the list type** — Select Unordered for bullet points or Ordered for a numbered sequence, depending on whether the order of your items carries meaning. 2. **Pick a marker style** — Choose a hyphen, asterisk or plus for bullets, or numbers, letters and Roman numerals with a dot or parenthesis for ordered lists. 3. **Enter your items** — Edit each item field, add more rows with the add button, and remove the ones you do not need. 4. **Set the indentation** — Use the nesting slider to indent the list, and turn on custom indent size if your renderer expects something other than two spaces. 5. **Copy the result** — Copy the Markdown, switch to the HTML tab if you need
        or
          markup, and confirm the preview before publishing. ### Frequently asked questions **What is the difference between an ordered and an unordered list in Markdown?** An unordered list uses a bullet marker — a hyphen, asterisk or plus — and compiles to
            . An ordered list uses a number followed by a period or parenthesis and compiles to
              . Use ordered lists when the sequence matters, such as installation steps, and unordered lists when it does not. **How do I create a nested list in Markdown?** Indent the child item under its parent, then keep exactly that indentation for every item at the same depth. Two spaces is enough under a bullet; under a numbered item use three so the child aligns with the parent's text. You can nest several levels deep and mix bullets and numbers freely. **How many spaces should I indent a Markdown list?** Two spaces per level is the safest choice for bulleted lists and is accepted by GitHub, Obsidian, Notion and Reddit. Under an ordered item use three spaces so the child lines up after the marker. Four spaces also works under a hyphen bullet, but never mix tabs and spaces inside the same list. **Why is my Markdown list not rendering correctly?** The four usual causes are: no blank line between the list and the paragraph above it, so the first item gets swallowed; a missing space after the marker, since -item is plain text while - item is a list; inconsistent indentation on nested items; and a marker change mid-list, which quietly starts a second list. **Do the numbers in a Markdown ordered list have to be sequential?** No. Markdown reads only the first number to decide where the list starts, then renumbers the rest sequentially. Writing 1. on every line still renders 1, 2, 3, which keeps diffs small because inserting a step in the middle does not renumber every line below it. **How do I start a numbered list at a number other than 1?** Set the first item to that number. A list beginning with 5. renders as 5, 6, 7 and so on. CommonMark and GitHub Flavored Markdown both honour the offset, though a few older renderers ignore it and always start at 1. **Can I use letters or Roman numerals in a Markdown ordered list?** Not in standard Markdown. Markers like a. or i. are treated as literal text by CommonMark, and the output is still an ordinary numbered list. Use CSS with the list-style-type property, or a raw HTML
                element with its type attribute, when you genuinely need lettered or Roman numbering. **How do I add a paragraph or code block inside a list item?** Leave a blank line, then indent the extra content so it lines up with the list item's text — two spaces under a hyphen bullet, three under a numbered item. Paragraphs, fenced code blocks, images and tables all attach to the item this way. Without the indentation the block ends the list. **How do I create a checkbox or to-do list in Markdown?** Write a bullet, a space, then [ ] for unchecked or [x] for checked, then another space and the item text. This is a GitHub Flavored Markdown extension: GitHub, GitLab, Obsidian and VS Code render clickable checkboxes, while CommonMark-only renderers show the brackets literally. **Does Markdown support definition lists?** Not in standard Markdown or GitHub Flavored Markdown. Definition lists come from extensions such as PHP Markdown Extra, MultiMarkdown and Pandoc, where the term goes on one line and the definition on the next starting with a colon and a space. Elsewhere, use raw HTML
                ,
                and
                tags. --- ## Markdown Checkbox Generator URL: https://mdutil.com/tools/markdown-checkbox ### How do you make a checkbox in Markdown? Start a list item with a hyphen, then add square brackets: `- [ ] task` renders an unchecked checkbox and `- [x] task` a checked one. The space inside the empty brackets is required. This task list syntax comes from GitHub Flavored Markdown, so it works on GitHub, GitLab, Obsidian and Notion, but not in original Markdown. ```markdown - [ ] Unchecked task - [x] Completed task ``` Renders as a bulleted list where each item carries a checkbox — the first empty, the second ticked. On GitHub and GitLab the boxes are clickable and toggling one rewrites the underlying Markdown. ### Markdown checkbox syntax explained A checkbox is not a standalone element — it is a list item with a state marker. Get the list marker, the brackets and the spacing right and the checkbox appears; miss any of the three and you get literal square brackets on the page. #### Basic checked and unchecked items Any unordered list marker works: hyphen, asterisk or plus. Inside the brackets, a single space means unchecked and a lowercase x means checked. A capital X is also accepted by GitHub Flavored Markdown. ```markdown - [ ] Write the migration script - [x] Review the schema change * [ ] Asterisk markers work too + [x] So do plus signs ``` Four checkbox items in one list: items one and three unchecked, items two and four ticked. #### Nested subtasks Indent a child item by two spaces to nest it under its parent. GitHub counts nesting from the parent's content column, so keep indentation consistent — mixing tabs and spaces is the most common reason nesting silently flattens. ```markdown - [ ] Ship v2 release - [x] Freeze the API surface - [ ] Update the changelog - [ ] Add migration notes - [x] Cut the release branch ``` A two-level hierarchy. The parent tasks sit flush left, subtasks are indented one level, and the migration note is indented two levels. #### Formatting inside a task item Task item text is ordinary Markdown, so bold, links, inline code and strikethrough all work. Strikethrough on a completed item is a common convention for making done work visually recede. ```markdown - [x] ~~Migrate the legacy `users` table~~ - [ ] **Blocked:** waiting on [ticket #482](https://example.com/482) - [ ] Rename `getUserByID` to `getUserById` ``` The first item is ticked with struck-through text; the second shows a bold label plus a live link; the third shows two inline code spans. #### Mistakes that break the checkbox Three formatting errors account for almost every broken task list. All three render as plain text with the brackets visible instead of a checkbox. ```markdown - [] Missing the space inside the brackets - [x]No space after the closing bracket [ ] No list marker at the start of the line ``` None of these three lines produce a checkbox. Each is displayed literally, brackets and all. #### HTML fallback for parsers without task lists When a renderer does not support GitHub Flavored Markdown task lists but does allow raw HTML, use an input element. Add disabled so readers cannot toggle a state that is never saved anywhere. ```markdown
                • Unchecked task
                • Completed task
                ``` Produces the same visual list of checkboxes, rendered by the browser rather than the Markdown parser, with the boxes greyed out and non-interactive. #### Checkboxes in an ordered list The bracket marker also attaches to numbered list items, which is useful when steps must be followed in order rather than picked off in any sequence. ```markdown 1. [x] Install the CLI 2. [x] Authenticate 3. [ ] Run the first deploy ``` A numbered list where each step carries a checkbox; the first two are ticked. GitHub and GitLab both support this form. ### Where Markdown checkboxes work Task lists are a GitHub Flavored Markdown extension, not part of the original Markdown spec, so support is far less universal than for bold or headings. Interactivity varies even among platforms that render the boxes. | Platform | Support | Notes | | --- | --- | --- | | GitHub | Full | Clickable in issues, PRs, comments and wikis; toggling edits the source. Read-only in README files. | | GitLab | Full | Clickable in issues, merge requests and wikis, with a progress counter on the list. | | Obsidian | Full | Clickable in reading and live preview modes; custom states such as [/] are supported by themes. | | Notion | Partial | Pasting - [ ] converts it into a native to-do block rather than keeping Markdown syntax. | | VS Code preview | Partial | Boxes render but are not clickable; extensions add toggling in the editor. | | Discord / Slack | None | Neither supports task lists. Use a bullet list with ☐ and ☑ characters instead. | | Reddit | None | The Markdown editor renders - [ ] as literal text with the brackets visible. | ### How to generate a Markdown checkbox list 1. **Enter the task text** — Type the label for your tasks. The generator numbers each item so you get a ready-to-edit skeleton rather than repeated identical lines. 2. **Set the first item state** — Choose unchecked or checked to see exactly how the [ ] and [x] markers differ in the output. 3. **Pick the item count and indent level** — Choose how many items to generate, and set an indent level if the list is meant to nest under an existing parent task. 4. **Copy the output** — Copy the Markdown, or switch to the HTML tab if your platform does not support GitHub Flavored Markdown task lists. 5. **Check the preview** — Open the preview tab to confirm the boxes render and the nesting lands where you expect before pasting into your issue or README. ### Frequently asked questions **How do I create a checkbox in Markdown?** Write a list item whose text begins with square brackets: - [ ] for an unchecked box and - [x] for a checked one. The hyphen, the space after it, the bracket pair and the space after the closing bracket are all required. Asterisks and plus signs work as list markers too. **Why is my Markdown checkbox not rendering?** There are four common causes. You wrote - [] with no space inside the brackets. You omitted the space after the closing bracket. You forgot the list marker at the start of the line. Or the platform does not support GitHub Flavored Markdown task lists at all, in which case the brackets always show literally. **How do I create nested or indented checkboxes?** Indent the child item by two spaces relative to its parent, then write the checkbox as normal. Each additional level adds another two spaces. Keep the indentation consistent and avoid mixing tabs with spaces, because a mismatch makes the child item render as a sibling instead of a subtask. **Which platforms support Markdown checkboxes?** GitHub, GitLab, Obsidian, Typora, Notion, Joplin, Bitbucket and most static site generators that use a GitHub Flavored Markdown parser. Discord, Slack, Reddit and strict CommonMark parsers do not support them and will show the brackets as plain text. **Does a capital X work in a Markdown checkbox?** Yes. GitHub Flavored Markdown treats - [X] and - [x] identically, both producing a checked box. Lowercase is the more common convention and is what most editors and formatters normalise to, so prefer it for consistency across a repository. **How do I make Markdown checkboxes clickable?** Clickability is a platform feature, not a syntax feature. On GitHub and GitLab, task lists inside issues, pull requests, merge requests and wiki pages are clickable, and toggling a box rewrites the stored Markdown. In README files and static sites the same syntax renders read-only. **What can I use if my platform does not support checkboxes?** Two workarounds cover most cases. Use the Unicode ballot characters in a normal bullet list, such as ☐ for open and ☑ for done. Or, if raw HTML is allowed, write an input element with type checkbox and the disabled attribute so the box renders without being interactive. **Can I use bold text, links or code inside a task list item?** Yes. Everything after the closing bracket is parsed as normal inline Markdown, so bold, italics, inline code, links, images and strikethrough all work. Marking a finished item with strikethrough is a common convention for visually retiring completed work. **What is the difference between a Markdown checkbox and a task list?** They describe the same feature at different scopes. A checkbox is one list item written as - [ ] or - [x]; a task list is the list containing them. The specification name is task list, while checkbox is what most people search for. **Do Markdown checkboxes work in Discord or Slack?** No. Neither platform implements GitHub Flavored Markdown task lists, so - [ ] appears as literal text with the brackets visible. Use a bullet list with the ☐ and ☑ characters, or with emoji, to convey the same open and done states in chat. --- ## Markdown Code Block Generator URL: https://mdutil.com/tools/markdown-code-block ### How do you create a code block in Markdown? Wrap your code in triple backticks on their own lines, and put the language name directly after the opening fence. The language identifier is what switches on syntax highlighting. For a short snippet inside a sentence, use single backticks instead. Four-space indentation also creates a code block, but it cannot carry a language. ```markdown ```python print("Hello, Markdown!") ``` ``` Renders as a fenced code block with Python syntax highlighting, and compiles to
                .
                
                ### Markdown code block syntax explained
                
                Markdown has three ways to show code: fenced blocks, indented blocks and inline spans. Fenced blocks are the modern default because they are the only ones that accept a language identifier.
                
                #### Fenced code block with a language
                
                Three backticks open the block, three close it, and the language name goes immediately after the opening fence with no space. This is the form GitHub, GitLab, Obsidian, Discord and every static site generator understand.
                
                ```markdown
                ```javascript
                export function slugify(title) {
                  return title.toLowerCase().replace(/\s+/g, "-");
                }
                ```
                ```
                
                A highlighted JavaScript block. Without the language tag the same code renders as plain, unhighlighted text.
                
                #### Language identifiers for syntax highlighting
                
                The identifier is just a short name the highlighter recognises. These are the ones you will reach for most often; GitHub accepts more than 200 through its Linguist library, including aliases such as js, ts, py, sh, yml, cs and c++.
                
                ```markdown
                ```javascript   ```typescript   ```python   ```java
                ```c            ```cpp          ```csharp   ```go
                ```rust         ```swift        ```kotlin   ```php
                ```ruby         ```bash         ```sql      ```json
                ```yaml         ```html         ```css      ```diff
                ```
                
                Each name selects a different grammar. Unknown identifiers are not an error — the renderer simply falls back to unhighlighted text.
                
                #### Indented code block (four spaces)
                
                Indenting every line by four spaces or one tab is the original Markdown code block, from before fences existed. It still works everywhere, but it accepts no language and breaks as soon as your code contains its own indentation.
                
                ```markdown
                    int main(void) {
                        printf("Hello, Markdown!\n");
                        return 0;
                    }
                ```
                
                A plain, unhighlighted code block. The four leading spaces are stripped from every line.
                
                #### Inline code inside a sentence
                
                Single backticks mark a short span of code inside running text — a variable, a flag, a command. Use double backticks as the delimiter when the span itself contains a backtick.
                
                ```markdown
                Run `npm run build` before deploying.
                
                The `` ` `` character opens an inline code span.
                ```
                
                The first line shows npm run build in monospace; the second displays a literal backtick without ending the span.
                
                #### Diff blocks for showing changes
                
                The diff identifier colours lines by their first character: minus for removals, plus for additions, space for untouched context. It is the cleanest way to show a patch in a README or pull request comment.
                
                ```markdown
                ```diff
                - const timeout = 1000;
                + const timeout = 5000;
                  retry(request, { timeout });
                ```
                ```
                
                GitHub and GitLab tint the removed line red and the added line green; the unchanged line stays neutral.
                
                #### Escaping backticks and nesting fences
                
                To show a fenced block inside a fenced block, make the outer fence longer than the inner one. Four backticks can contain three, five can contain four, and so on.
                
                ```markdown
                ````markdown
                ```js
                console.log("this fence stays visible");
                ```
                ````
                ```
                
                The inner triple backticks are printed literally instead of closing the block early.
                
                ### Where Markdown code blocks work
                
                Fenced blocks are near-universal, but the size of the language list and the extras built on top of it vary a lot between platforms.
                
                | Platform | Support | Notes |
                | --- | --- | --- |
                | GitHub / GitLab | Full | 200+ languages via Linguist, diff colouring, and collapsible blocks inside 
                . | | Discord | Full | ```lang works in messages, limited to the languages highlight.js ships with. | | Slack | Partial | ``` creates a code block, but the language tag is ignored and nothing is highlighted. | | Obsidian | Full | Prism-based highlighting, plus code blocks that render as diagrams, e.g. mermaid. | | Notion | Full | Typing ``` converts to a code block; the language is then set from a dropdown. | | Reddit | Full | Fenced blocks work in the current editor; old.reddit.com needs four-space indentation. | | VS Code | Full | Highlighted in the Markdown preview and inside the editor itself. | ### How to make a code block in Markdown 1. **Choose a block type** — Pick a fenced block for anything multi-line, an indented block for legacy Markdown processors, or inline code for a snippet inside a sentence. 2. **Select a language** — Choose the language identifier that matches your code so the renderer applies syntax highlighting. Leave it as plain text for logs and console output. 3. **Add a filename (optional)** — For fenced blocks, type a filename to emit a title attribute — useful when a snippet belongs to a specific file in a tutorial. 4. **Paste your code and copy** — Paste the code into the editor, check the preview tab, then copy the Markdown, or switch to the HTML tab if you need
                 markup.
                
                ### Frequently asked questions
                
                **How do I create a code block in Markdown?**
                
                Put three backticks on the line before your code and three backticks on the line after it. Add a language name straight after the opening fence, such as python or javascript, to turn on syntax highlighting. Indenting every line by four spaces also produces a code block, but it cannot carry a language.
                
                **How do I specify a language in a Markdown code block?**
                
                Write the identifier immediately after the opening triple backticks, with no space between them, for example ```python. The identifier is case-insensitive on most renderers. Indented code blocks have nowhere to put a language, which is the main reason fenced blocks are preferred.
                
                **What languages are supported in Markdown code blocks?**
                
                The list depends on the renderer. GitHub recognises more than 200 through its Linguist library. The identifiers you will use most are javascript, typescript, python, java, c, cpp, csharp, go, rust, swift, kotlin, php, ruby, bash, powershell, sql, json, yaml, toml, html, css, xml, markdown and diff. Common aliases such as js, ts, py, sh, yml and cs also work.
                
                **What is the language identifier for C in Markdown?**
                
                Use c for C, cpp for C++ and csharp for C#. GitHub also accepts the aliases c++ and cs. Because the identifier is only a hint to the highlighter, an unrecognised name is never an error — the block simply renders without colouring.
                
                **What is the difference between fenced and indented code blocks?**
                
                Fenced blocks use triple backticks and accept a language identifier, a filename and other metadata, so they support syntax highlighting. Indented blocks use four spaces per line, come from the original 1.0 Markdown spec, and support none of that. Indented blocks are still handy inside list items, where a fence can confuse older parsers.
                
                **How do I escape backticks inside a code block?**
                
                Make the fence longer than the backtick run you want to display. Four backticks can wrap a block that contains three, and five can wrap one that contains four. For inline code, use double backticks as the delimiter and leave a space next to the content, so that a single backtick inside stays visible.
                
                **How do I show a diff in Markdown?**
                
                Use diff as the language identifier, then prefix removed lines with a minus sign, added lines with a plus sign, and leave unchanged lines starting with a space. GitHub, GitLab and most GitHub Flavored Markdown renderers colour the result red and green automatically.
                
                **How do I add a filename to a Markdown code block?**
                
                There is no single standard. GitHub and many documentation themes read a title attribute after the language, as in ```js title="app.js". VuePress uses ```js:app.js, and some Jekyll setups use fileName="app.js". Renderers that do not understand the extra text ignore it, so the block still displays correctly.
                
                **Can you add line numbers to Markdown code blocks?**
                
                Not in plain Markdown. Line numbers come from the syntax highlighter, not the Markdown spec, so they depend on the platform. Prism and highlight.js both offer line-number plugins, and site generators such as Hugo, MkDocs and Docusaurus expose a setting for them. GitHub does not render line numbers inside code blocks.
                
                **How do I put a code block inside a list item?**
                
                Indent the whole fenced block to line up with the text of the list item, usually by four spaces for a numbered list or two for a bullet, and keep a blank line before and after it. Without that indentation the fence ends the list and the block escapes to the top level.
                
                ---
                
                ## Markdown Comment Generator
                
                URL: https://mdutil.com/tools/markdown-comments
                
                ### How do you write a comment in Markdown?
                
                Markdown has no comment syntax of its own, so use an HTML comment: ``. Every major processor, including GitHub, GitLab and VS Code, keeps it in the source file and strips it from the rendered output. For a single line, the reference-style form `[//]: # (note)` works too.
                
                ```markdown
                
                
                This paragraph is visible to readers.
                ```
                
                The comment vanishes from the rendered page; only the paragraph is displayed. The note stays in the raw Markdown for anyone editing the file.
                
                ### Markdown comment syntax explained
                
                Because CommonMark never defined a comment token, every method below is a workaround that exploits something the renderer already throws away. They differ in how widely they are supported and in how visible they are in the raw source.
                
                #### HTML comments (recommended)
                
                The most portable option by a wide margin. Markdown passes raw HTML through to the renderer, and the renderer discards comments. Works in GitHub, GitLab, VS Code, Obsidian, Jekyll, Hugo, Pandoc and virtually every static site generator.
                
                ```markdown
                
                
                Install the CLI with npm.
                ```
                
                Renders as: Install the CLI with npm. The comment produces no output at all.
                
                #### Multi-line comments
                
                The same delimiters span as many lines as you need. Keep a blank line between the closing `-->` and the following paragraph so the parser does not treat them as one block.
                
                ```markdown
                
                
                ## Getting started
                ```
                
                Renders as: a Getting started heading. Every line inside the delimiters is hidden.
                
                #### Commenting out a block of Markdown
                
                Wrapping existing Markdown in an HTML comment hides it without deleting it — the usual answer to “how do I comment out a section”. The one rule: the hidden text must not contain a double hyphen, which would close the comment early.
                
                ```markdown
                ## Current pricing
                
                
                ```
                
                Only the Current pricing heading is rendered. The legacy section stays in the file but is invisible to readers.
                
                #### Reference-style comments
                
                An unused link definition. The parser recognises the label, finds nothing referencing it, and outputs nothing. It must sit on its own line with a blank line before it, otherwise it is treated as ordinary paragraph text.
                
                ```markdown
                [//]: # (Internal note: numbers come from the Q3 export)
                
                Revenue grew 15% quarter over quarter.
                
                [//]: # "Double quotes work as well"
                ```
                
                Only the revenue sentence is rendered. Both definition lines disappear.
                
                #### Empty link comments
                
                A variation that points the definition at an empty destination. Functionally the same as the reference style; the label can be any unused string, which some teams use to tag the comment's author.
                
                ```markdown
                [comment]: <> (Draft copy, do not publish)
                [review-sarah]: <> (Check this claim against the changelog)
                
                The API is backwards compatible.
                ```
                
                Renders as: The API is backwards compatible. Both labelled notes are hidden.
                
                #### Obsidian and MDX comments
                
                Two ecosystems ship their own syntax. Obsidian hides anything between double percent signs. MDX v2 parses JSX, where HTML comments are a syntax error, so you need a JSX expression comment instead.
                
                ```markdown
                %% Obsidian-only comment, single or multi-line %%
                
                {/* MDX / Docusaurus comment */}
                ```
                
                Each line is hidden in its own ecosystem, and printed literally in the other — neither is portable.
                
                ### Where Markdown comments work
                
                Comment support tracks whether a platform allows raw HTML. Chat apps that strip HTML have no comment mechanism at all, so check this table before you rely on one.
                
                | Platform | Support | Notes |
                | --- | --- | --- |
                | GitHub / GitLab | Full |  is hidden in READMEs, issues, PRs and wikis. [//]: # also works. |
                | VS Code | Full | Hidden in the Markdown preview. Ctrl+/ inserts  around the selection. |
                | Obsidian | Full | Supports HTML comments plus its own %% comment %% syntax. |
                | Reddit | Partial | Raw HTML is disabled, so  shows literally. Use [//]: # instead. |
                | Discord / Slack | None | No comment syntax exists; the delimiters are posted as visible text. |
                | Notion | None | Pasted comment syntax becomes plain text. Use Notion's own comment feature. |
                | MDX / Docusaurus | Partial | MDX v2 rejects . Use the JSX form {/* comment */}. |
                
                ### How to add a comment in Markdown
                
                1. **Choose a comment method** — Start with HTML comments unless you have a reason not to — they are the only form that works nearly everywhere.
                2. **Write the note** — Type the reminder, TODO or reviewer note into the comment box. Line breaks are preserved for multi-line comments.
                3. **Copy the Markdown** — Use the copy button to grab the generated syntax and paste it into your README, issue or documentation file.
                4. **Confirm it is hidden** — Open the preview tab to verify the comment produces no visible output before you commit or publish.
                
                ### Frequently asked questions
                
                **Does Markdown have a comment syntax?**
                
                No. Neither the original Markdown specification nor CommonMark defines a comment. Every approach in use is a workaround: HTML comments rely on the renderer discarding them, and reference-style comments rely on an unused link definition producing no output.
                
                **How do I comment out a section in Markdown?**
                
                Wrap the section in an HTML comment: put  on the line after it. The content stays in the file but is not rendered. Make sure the hidden text contains no double hyphen, because that can close the comment early in strict parsers.
                
                **Are GitHub comments Markdown?**
                
                Yes. Issue comments, pull request comments, review comments and discussions on GitHub are all written in GitHub Flavored Markdown, so headings, lists, tables, task lists and code fences all work. Hidden comments inside those boxes use the same  syntax as READMEs.
                
                **Can I write multi-line comments in Markdown?**
                
                Yes, with HTML comments. Open with  on its own line. Reference-style comments do not span lines; each line needs its own definition.
                
                **Are Markdown comments visible in the source code?**
                
                Yes. Comments are hidden only in the rendered output. Anyone who opens the raw file, views it on GitHub in raw mode, or clones the repository can read them. Never put credentials or confidential information in a Markdown comment.
                
                **Which Markdown comment method has the best compatibility?**
                
                HTML comments. They work in GitHub, GitLab, VS Code, Obsidian, Pandoc, Jekyll, Hugo and most other processors. Reference-style comments are the best fallback for platforms that strip raw HTML, such as Reddit. Obsidian's %% syntax and MDX's JSX comments are ecosystem-specific.
                
                **Why is my reference-style comment showing up as text?**
                
                Link definitions are only recognised at the start of a line with a blank line separating them from surrounding paragraphs. If [//]: # (note) is indented, or sits directly under a sentence, the parser reads it as ordinary text and prints it.
                
                **Do comments work inside code blocks?**
                
                No. Markdown deliberately does not process any syntax inside fenced code blocks or inline code spans, so the delimiters appear literally. To comment code that you are displaying, use the comment syntax of that language, such as two slashes for JavaScript or a hash for Python.
                
                **How do I add a line break inside a Markdown comment?**
                
                Just press Enter. Everything between  is ignored by the renderer, so line breaks, indentation and blank lines inside the comment have no effect on the output and are purely for readability in the source.
                
                **Do search engines see Markdown comments?**
                
                No. The comment is removed when Markdown is compiled to HTML, so it never reaches the served page and crawlers cannot index it. An HTML comment written directly into a published HTML file is a different case: it is delivered to the browser, just not displayed.
                
                ---
                
                ## Markdown New Line Generator
                
                URL: https://mdutil.com/tools/markdown-newline
                
                ### How do you add a new line in Markdown?
                
                End the line with two spaces and press Enter — Markdown turns that into a single line break inside the same paragraph. A trailing backslash does the same thing in CommonMark and GitHub. For a new paragraph instead, leave one completely blank line between the two blocks of text.
                
                ```markdown
                Roses are red.  
                Violets are blue.
                
                This is a new paragraph.
                ```
                
                The first two lines sit inside one paragraph separated by a 
                ; the third becomes its own

                element. ### Every way to create a new line in Markdown Markdown distinguishes a line break (same paragraph, tight spacing) from a paragraph break (new block, real spacing). There are four ways to get a newline, and each one fails in a different place. #### Two trailing spaces (the standard line break) End a line with exactly two spaces, then press Enter. Every CommonMark-compliant renderer turns that into a
                inside the current paragraph. The spaces are invisible, which is the single most common reason a Markdown new line silently fails. ```markdown Roses are red. Violets are blue. ``` Two lines inside one paragraph. In HTML: Roses are red.
                Violets are blue. #### Backslash at the end of the line A trailing backslash produces the same hard line break, and unlike spaces it is visible in your source and survives editors that trim whitespace on save. CommonMark, GitHub, GitLab, Pandoc and the VS Code preview all support it. ```markdown Roses are red.\ Violets are blue. ``` Identical output to the two-space version, but the break is obvious when you read the raw Markdown. #### Blank line for a new paragraph One completely empty line closes the current paragraph and opens a new one. This is a paragraph break rather than a line break: you get a separate

                element with real vertical spacing, and it works in every Markdown flavour without exception. ```markdown This is the first paragraph. This is a second paragraph. ``` Two separate

                elements with a margin between them, instead of one paragraph split over two lines. #### HTML
                tag Markdown lets raw HTML through, so
                is the escape hatch when a formatter strips your trailing spaces or when the Markdown syntax simply cannot reach. Platforms that sanitise HTML, such as Discord, Slack and Reddit, ignore it. ```markdown Line one.
                Line two.
                Line three. ``` Three lines inside one paragraph.
                and
                are equivalent; the self-closing form matters only in strict XHTML. #### New line inside a table cell A Markdown table row has to stay on one physical line, so pressing Enter inside a cell ends the row instead of breaking the text. The HTML tag is the only option here — trailing spaces and backslashes are swallowed by the table parser. ```markdown | Step | Detail | | --- | --- | | Install | Run npm install
                then restart the dev server | ``` The second cell shows “Run npm install” on one line and “then restart the dev server” on the next, inside a single cell. #### Line break inside a list item Trailing spaces work inside list items, but the continuation line must be indented to line up with the item text. Without that indentation the renderer closes the list and starts a new paragraph. ```markdown - First bullet, first line. First bullet, second line. - Second bullet. ``` One bullet containing two lines, followed by a second bullet — rather than three separate items. ### Where each Markdown newline method works The biggest surprise is that the same platform can behave differently in two places. GitHub renders a single Enter as a line break in comments but collapses it in a README, so always test the method where the content will actually live. | Platform | Support | Notes | | --- | --- | --- | | GitHub issues & comments | Full | A single Enter already becomes a line break; two spaces are not needed. | | GitHub README / .md files | Partial | Rendered as CommonMark, so a single newline is collapsed. Use two spaces, a backslash or
                . | | GitLab | Full | Two spaces, backslash and
                all work in issues, MRs and repository files. | | Discord | Partial | Shift+Enter inserts the break. Trailing spaces and HTML tags do nothing. | | Slack | Partial | Shift+Enter only. Slack's mrkdwn has no trailing-space or
                syntax. | | Obsidian | Full | Single newlines break lines by default; enable Strict line breaks for CommonMark behaviour. | | Notion | Partial | Shift+Enter breaks a line inside a block; trailing spaces are stripped on paste. | | Reddit | Partial | A blank line is the reliable separator; HTML tags are removed by the sanitiser. | | VS Code preview | Full | CommonMark by default; set markdown.preview.breaks to render single newlines as breaks. | ### How to add a new line in Markdown with this tool 1. **Choose a line break method** — Switch between trailing spaces, backslash, paragraph break and the HTML
                tag using the tabs. Each tab loads a working example into the editor. 2. **Edit the example** — Type over the sample text. The two spaces or the backslash at the end of the line are what create the break, so keep them when you rewrite the sentence. 3. **Check the live preview** — The panel on the right renders your Markdown as you type, so you can confirm the newline lands where you expect before publishing. 4. **Copy the Markdown** — Use the copy button to put the exact syntax on your clipboard, invisible trailing spaces included. ### Frequently asked questions **Why is my new line not working in Markdown?** Almost always because the two trailing spaces were removed. Most editors and formatters trim trailing whitespace on save, and a lone Enter is collapsed into an ordinary space by CommonMark. Switch to a backslash at the end of the line, or an HTML
                tag, if you need a break that survives auto-formatting. **How many spaces do you need for a new line in Markdown?** Exactly two spaces at the end of a line, followed by Enter. More than two also works in most renderers, but two is the specified minimum and the safest choice. Spaces on an otherwise empty line do nothing at all. **What is the difference between a line break and a paragraph break in Markdown?** A line break keeps the text in the same paragraph and compiles to a
                element, so the lines sit tightly together. A paragraph break, made with one blank line, closes the paragraph and opens a new

                with real vertical spacing. Use line breaks for addresses and poetry, paragraph breaks for separate ideas. **Does pressing Enter once create a new line in Markdown?** It depends on the renderer. Plain CommonMark treats a single newline as a soft break and collapses it into a space. GitHub comment boxes, GitLab, Discord, Obsidian and Notion turn hard breaks on, so one Enter is enough there. Rendered README files on GitHub do not. **How do I add a new line inside a Markdown table cell?** Use the HTML
                tag. A table row must stay on one physical line, so a real newline would end the row instead of breaking the text. Trailing spaces and backslashes are consumed by the table parser and produce nothing. **How do I add a line break inside a list item?** End the line with two spaces and indent the continuation line so it aligns with the item text, usually by two or four spaces. Without that indentation the renderer closes the list and treats the following line as a new paragraph. **How do I see trailing spaces in my editor?** Turn on whitespace rendering. In VS Code set editor.renderWhitespace to all; Sublime Text, JetBrains IDEs and Vim have the same option under names like Show Whitespace or list. Also check that trim trailing whitespace on save is disabled for Markdown files. **Can I use the HTML
                tag in Markdown?** Yes, in anything that renders Markdown to HTML, including GitHub, GitLab, Obsidian, Jekyll, Hugo and MkDocs. It is ignored on platforms that sanitise HTML, such as Discord, Slack and Reddit, where the tag either disappears or shows up as plain text. **How do I add extra blank space between paragraphs in Markdown?** Repeated blank lines are collapsed into one, so stacking them changes nothing. Put a line containing only   between the paragraphs, or use two
                tags in a row. On a documentation site a CSS class or spacer component is the cleaner fix. **How do I add a new line in a GitHub README?** README files are rendered as CommonMark, so a single Enter is collapsed. End the line with two spaces or a backslash, or insert
                . This differs from GitHub issues and pull request comments, where a single Enter already produces a line break. --- ## Markdown Table Generator URL: https://mdutil.com/tools/markdown-table-generator ### How do you create a table in Markdown? A Markdown table is built from pipe characters and one row of dashes. Write the header cells between pipes, add a separator row of dashes beneath it, then list one row of data per line. Colons in the separator row set column alignment. GitHub, GitLab, Obsidian and most static site generators render it automatically. ```markdown | Name | Role | Commits | | :---- | :--------: | ------: | | Ada | Engineer | 128 | | Grace | Maintainer | 64 | ``` Renders a three-column table with Name left-aligned, Role centred and Commits right-aligned, and the first row styled as a bold header. ### Markdown table syntax explained Tables come from GitHub Flavored Markdown rather than the original spec, so the rules are stricter than for most Markdown features. Two rows are mandatory — the header and the dashes underneath it — and every row must contain the same number of columns. #### Basic table structure Pipes divide the columns; a separator row of at least three dashes turns the first line into a header. The dashes do not have to line up with the text above them — the renderer only counts columns, so ragged raw source still produces a tidy table. ```markdown | Package | Version | Status | | --- | --- | --- | | next | 16.0.1 | stable | | react | 19.2.0 | stable | ``` Renders a three-column table with Package, Version and Status as bold header cells and two data rows beneath them. #### Column alignment with colons Colons in the separator row control how each column is aligned. Left is the default, so :--- and --- behave identically; centre and right need the extra colon. Right alignment is the convention for numeric columns. ```markdown | Item | Qty | Price | | :------- | :-: | -----: | | Keyboard | 2 | 89.00 | | Monitor | 1 | 249.50 | ``` Item stays left-aligned, Qty is centred and Price is right-aligned, so the decimal points line up down the column. #### Escaping pipes inside a cell A raw pipe splits the cell in two. Escape it with a backslash, or use the HTML entity | when the pipe sits inside inline code, where backslash escapes are not processed. ```markdown | Command | Meaning | | --- | --- | | a \| b | a or b | | `grep x | wc -l` | count matches | ``` Both rows keep exactly two columns; the pipe characters show up as literal text inside the cells instead of creating a third column. #### Formatting and line breaks inside cells Cells accept inline Markdown — bold, italic, links, images and inline code all work. Block-level content does not, so use a
                tag when a cell needs a second line. ```markdown | Option | Notes | | --- | --- | | `--watch` | **Recommended.**
                Rebuilds on save. | | `--quiet` | Hides progress output. | ``` The first Notes cell shows bold text with a second line underneath it; the option names render as inline code. #### Tables without a header row GitHub Flavored Markdown always requires the header and separator rows, but the header cells themselves may be left empty. Do that when the table is a layout grid rather than labelled data. ```markdown | | | | ----- | -------- | | Ada | Engineer | | Grace | Compiler | ``` Renders a two-column table with a visually blank header strip above two data rows. Most renderers still reserve the header row's height. #### Merged cells via HTML Markdown has no rowspan or colspan. When you genuinely need merged cells, drop an HTML table into the document — GitHub, GitLab and most static site generators render inline HTML inside Markdown files. ```markdown

Environment
Node22.x
pnpm10.x
``` Produces one header cell spanning both columns followed by normal two-column rows. Markdown syntax inside the HTML block is not processed. ### Where Markdown tables render Because table syntax belongs to GitHub Flavored Markdown and not to CommonMark, support is excellent on developer platforms and effectively absent in chat apps. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | Renders in READMEs, issues, pull requests, wikis and release notes, with all three alignments. | | Obsidian | Full | Renders GFM tables and ships a built-in table editor that preserves alignment. | | VS Code | Full | The built-in Markdown preview renders tables; a formatter extension keeps the raw pipes tidy. | | Notion | Partial | Pasting table syntax creates a native Notion table; the raw pipes are not kept as text. | | Reddit | Full | Supported in the Markdown editor; the rich-text editor builds tables from its toolbar instead. | | Discord | None | Messages do not render tables. Wrap the table in a code block so the columns stay lined up. | | Slack | None | No table syntax at all. Post the table as a code block, a snippet, or an image. | ### How to build a Markdown table with this generator 1. **Set the table size** — Enter how many rows and columns you need, then press Apply. Cell content you already typed is preserved whenever the grid grows. 2. **Fill in the cells** — Type straight into the grid. The top row is the header row and renders in bold once the table is published. 3. **Choose column alignment** — Use the L, C and R buttons under each header cell to align that column left, centre or right. The separator row updates as you click. 4. **Edit the raw Markdown (optional)** — Switch to the code editor to paste an existing table or hand-tune the syntax. Your edits are parsed straight back into the visual grid. 5. **Copy or export** — Copy the generated Markdown to the clipboard, or download it as a .md file that you can drop into a README. ### Frequently asked questions **How do I create a table in Markdown?** Write your header cells between pipe characters, put a separator row of dashes underneath, then add one data row per line. The smallest working example is | Name | Role | on the first line, | --- | --- | on the second, and | Ada | Engineer | on the third. The generator above assembles all of that for you. **How do I align text in a Markdown table?** Add colons to the separator row: :--- for left, :---: for centre and ---: for right. Left is the default, so plain --- and :--- render identically. Alignment is set per column and applies to the header cell as well as every data cell below it. **Do Markdown tables work on GitHub?** Yes. Tables are part of GitHub Flavored Markdown and render in README files, issues, pull requests, discussions, wikis and release notes. All three column alignments are supported, and cells accept inline formatting such as bold text, links and inline code. **Can I create a Markdown table without a header?** Not in standard GitHub Flavored Markdown, because the header and separator rows are both required. The usual workaround is to leave the header cells empty, which produces a blank strip above the data. For a genuinely header-free grid, use an HTML table instead. **Can I merge cells in a Markdown table?** No. Markdown tables have no equivalent of rowspan or colspan, and every row must contain the same number of columns. If you need merged cells, write an HTML table with colspan or rowspan attributes — GitHub and most static site generators render it inside a Markdown file. **How do I convert CSV data into a Markdown table?** Switch to the code editor, paste the CSV, then replace each comma with a pipe character and insert a row of dashes below the first line. The preview updates as you type, so a row that split incorrectly is obvious immediately. You can also load an existing .md or .txt file with the import button. **Can I convert a Markdown table to Excel?** Yes, indirectly. Replace the pipes with commas, delete the dashes row, and save the file with a .csv extension, which Excel and Google Sheets open directly. Selecting the rendered table in a browser preview and pasting it into a spreadsheet also keeps the column structure. **Do Markdown tables work in Slack or Discord?** Neither app renders them. Slack has no table syntax at all, and Discord ignores pipe tables in messages. The standard workaround is to wrap the table in a triple-backtick code block so the columns stay aligned in a monospaced font, or to share a screenshot instead. **How do I make a table of contents in Markdown?** List one link per heading and point each link at the heading's anchor, for example a bullet reading Installation linking to #installation. GitHub creates those anchors automatically by lowercasing the heading text and replacing spaces with hyphens. A single-column table works too if you want a boxed look. **Why is my Markdown table not rendering?** The three usual causes are a missing separator row of dashes under the header, rows that contain a different number of columns than the header, and a missing blank line before the table when it directly follows a paragraph. Unescaped pipe characters inside a cell also split that row into extra columns. --- ## Markdown Hyperlink Generator URL: https://mdutil.com/tools/markdown-hyperlink-generator ### How do you create a hyperlink in Markdown? Put the visible text in square brackets and the destination in parentheses directly after it: `[link text](https://example.com)`. Nothing may sit between the closing bracket and the opening parenthesis. Add a quoted title inside the parentheses for a hover tooltip. The same pattern accepts relative paths, #anchors and mailto: addresses. ```markdown [MDUtil](https://mdutil.com) [MDUtil](https://mdutil.com "Free Markdown tools") ``` Both lines render as a clickable link labelled MDUtil. The second also carries a title attribute, which most renderers show as a tooltip on hover. ### Markdown hyperlink syntax explained Markdown has four link forms plus a handful of platform-specific rules. They all compile to an element, but they differ in where the URL lives and which renderers accept them. #### Inline link (the standard form) The everyday syntax: link text in square brackets, destination in parentheses, and an optional title in double quotes. A single space between the bracket and the parenthesis breaks it. ```markdown Read the [CommonMark spec](https://commonmark.org "CommonMark 0.31") before arguing about edge cases. ``` Renders a sentence in which “CommonMark spec” links to commonmark.org and shows “CommonMark 0.31” on hover. #### Autolink and bare URLs Angle brackets turn a raw URL into a link whose text is the URL itself. GitHub Flavored Markdown also auto-links bare URLs, but strict CommonMark does not, so the angle brackets are the portable choice. ```markdown ``` The first line links to https://mdutil.com and displays the URL as its own text. The second becomes a mailto: link without you typing mailto:. #### Reference-style link Move the URL out of the sentence and replace it with a short label defined elsewhere in the file, usually at the bottom. Long paragraphs stay readable and one definition can serve many links. ```markdown [CommonMark][spec] defines the syntax, and the [spec][] shortcut points at the same place. [spec]: https://commonmark.org "CommonMark" ``` Both link texts resolve to commonmark.org. Labels are case-insensitive and the definition line never appears in the rendered output. #### Anchor link to a heading Link inside the same document with a fragment built from the heading: lowercase the text, swap spaces for hyphens and drop punctuation. GitHub, GitLab and most static site generators create these slugs for you. ```markdown Jump to [Quick Setup](#quick-setup), or to a section of another file with [requirements](./install.md#requirements). ``` The first link scrolls to the “Quick Setup” heading on the same page; the second opens install.md and scrolls to its “Requirements” heading. #### Image links and formatted link text An exclamation mark in front turns the link into an image, and nesting an image inside a link makes the image clickable — the pattern behind every README badge. Emphasis markers belong inside the brackets. ```markdown ![MDUtil logo](/images/logo.png "MDUtil") [![Build passing](https://img.shields.io/badge/build-passing-green)](https://ci.example.com) [**Bold link text**](https://mdutil.com) ``` Line one shows an image with alt text, line two is a badge that links to the CI dashboard, and line three is a link whose text is bold. #### Discord and chat-app hyperlinks Discord calls the inline form a masked link and renders it in ordinary messages as well as bot and webhook embeds. Angle brackets have a second meaning there: they suppress the preview card. Slack does not parse Markdown links at all. ```markdown [Join the server](https://discord.gg/example) ``` In Discord the first line shows only “Join the server” as a clickable link; the second posts the plain URL with its preview embed suppressed. ### Where Markdown hyperlinks work Inline links are universal, but reference links, relative paths and heading anchors are handled differently from one platform to the next. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | Inline, reference, autolink and relative repo paths all work; heading anchors are generated automatically. | | Discord | Partial | Masked links [text](url) render in messages and embeds. Reference links do not work; hides the preview. | | Slack | Partial | The composer ignores [text](url). Slack's own format is . | | Obsidian | Full | Standard Markdown links plus [[wiki links]] and ![[embeds]] for notes inside the vault. | | Notion | Full | Typing [text](url) auto-converts, and pasting a URL onto selected text links it. | | Reddit | Full | Inline and reference links both work in the Markdown editor on new and old Reddit. | ### How to create a hyperlink in Markdown 1. **Choose a link type** — Pick standard, automatic, reference or image depending on whether you need inline text, a bare URL, a reusable label or an embedded picture. 2. **Enter the text and URL** — Type the words readers should see, then paste the destination. Absolute URLs, relative paths, #anchors and mailto: addresses are all accepted. 3. **Add the optional extras** — Set a title to show a tooltip on hover, give reference links an ID, or switch on “open in new window” to add target and rel attributes to the HTML output. 4. **Copy the result** — Copy the generated Markdown, switch to the HTML tab if you need an tag, and open the preview tab to confirm the link points where you expect. ### Frequently asked questions **How do I create a hyperlink in Markdown?** Put the visible text in square brackets and the destination in parentheses immediately after it, like [Link text](https://example.com). There must be no space between the closing bracket and the opening parenthesis. To add a tooltip, place a quoted title inside the parentheses after the URL. **How do I make a Markdown link open in a new tab?** Markdown has no syntax for it. Use inline HTML instead: an tag with target="_blank" and rel="noopener noreferrer". Some renderers, such as MkDocs or markdown-it with the attrs plugin, let you append {target=_blank} to a normal link. Platforms that sanitise HTML, including GitHub READMEs, strip the attribute. **What is the difference between standard and reference-style links?** They render identically. A standard link keeps the URL inline, which suits one-off links. A reference link puts a short label in the sentence and defines the URL elsewhere in the file, which keeps paragraphs readable and lets you update a URL used in ten places by editing a single line. **How do I link to a heading within the same document?** Use a fragment built from the heading text: lowercase it, replace spaces with hyphens and remove punctuation, so “Quick Setup” becomes [Quick Setup](#quick-setup). GitHub, GitLab and most static site generators create these anchors automatically, and duplicate headings get a numeric suffix such as #quick-setup-1. **How do I create an email link in Markdown?** Write a normal link with a mailto: URL, for example [Email support](mailto:support@example.com). You can prefill a subject with a query string such as mailto:support@example.com?subject=Bug%20report. Wrapping a bare address in angle brackets also produces a mailto link automatically. **How do I hyperlink in Discord?** Discord supports masked links: [Click here](https://example.com) shows only the words and hides the URL. They work in normal messages and in bot or webhook embeds, but reference-style links do not work. To post a URL without the large preview card, wrap it in angle brackets. **Can I use HTML for links inside Markdown?** Yes in most renderers. An tag lets you set target, rel, class or id, which plain Markdown cannot express. The exceptions are platforms that sanitise or forbid HTML, such as Discord, Slack, Reddit comments and some static site configurations, where the tag is escaped or removed. **Why is my Markdown link not working?** The usual causes are a space between the closing bracket and the opening parenthesis, unencoded spaces or parentheses inside the URL, a missing scheme such as https://, or the link sitting inside a code block where formatting is ignored. Percent-encode spaces as %20, or wrap the URL in angle brackets inside the parentheses. **How do I link to another Markdown file in the same repository?** Use a relative path, for example [Installation](./docs/install.md). GitHub, GitLab and VS Code resolve relative links against the current file, so the link keeps working after the repository is cloned or the docs are moved together. Append a fragment such as ./docs/install.md#requirements to jump straight to a heading. **How do I make an image a clickable link?** Nest the image syntax inside a link: [![Alt text](image.png)](https://example.com). The outer brackets supply the destination and the inner exclamation-mark syntax supplies the image. This is how README badges link to build dashboards and package pages. --- ## Markdown Image Generator URL: https://mdutil.com/tools/markdown-image-generator ### How do you change image size in Markdown? Standard Markdown has no syntax for image size, so use an HTML tag instead: Alt text. GitHub, GitLab and most renderers pass that HTML straight through. Setting only the width keeps the original aspect ratio. To center the image, wrap the tag in a div with align="center". ```markdown Alt text
Alt text
``` The first tag renders the image 300 pixels wide with the height scaled automatically; the second renders the same image centered on the page. ### Markdown image syntax, sizing and alignment Inserting an image takes one line. Controlling how big it is and where it sits takes HTML, because CommonMark deliberately leaves presentation out of the spec. Here is every form you actually need. #### Standard image syntax An exclamation mark, alt text in square brackets, then the path in parentheses. The optional quoted title becomes a tooltip on hover. ```markdown ![Alt text](/images/photo.png "Optional title") ``` Renders the image at its natural size, falling back to “Alt text” if the file cannot be loaded. #### Set the image size with an HTML tag There is no width or height in Markdown itself, so switch to an tag — almost every renderer, GitHub included, passes plain HTML through untouched. Give only a width and the browser scales the height for you. ```markdown Alt text Alt text ``` The first image is 300 pixels wide; the second fills half of its container and stays responsive. Both keep their original proportions. #### Center, left or right align Wrap the image in a div carrying an align attribute. This is the most portable technique because GitHub strips inline style attributes but keeps align. Keep a blank line inside the div if you want Markdown syntax to still be parsed there. ```markdown
Alt text
``` Centers the image on the page. Swap center for left or right to push the image against that edge instead. #### Make the image clickable Nest the image inside link syntax to turn it into a thumbnail that opens a full-size version or another page. A clickable image that also needs a fixed size has to be written as nested HTML. ```markdown [![Alt text](/images/thumb.png)](https://example.com)
Alt text ``` Both lines produce a clickable image, but only the HTML version can be constrained to 200 pixels wide. #### Reference-style images Move long URLs out of the prose and point at them by label. Useful when the same screenshot appears several times, or when the URL is a long CDN path that ruins readability. ```markdown ![Alt text][logo] [logo]: /images/photo.png "Optional title" ``` Renders identically to the inline form. The definition line itself outputs nothing and can sit at the bottom of the file. #### Editor-specific size shortcuts Several editors invented their own sizing syntax. It is convenient locally but breaks on GitHub and most static site generators, so keep it out of anything you publish. ```markdown ![Alt text](/images/photo.png =300x200) ![[photo.png|300]] ``` The first works in Typora and in markdown-it with the imsize plugin; the second is Obsidian's wiki-link form. GitHub prints both as literal text. ### Where image sizing and alignment work Basic image syntax is universal. Sizing and alignment are not, because they depend on how much HTML each platform allows through its sanitizer. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Full | with width and height works, as does
. Inline style attributes are stripped. | | Obsidian | Full | Supports ![[photo.png|300]] and ![alt|300](photo.png) shorthand as well as raw HTML. | | VS Code preview | Full | Renders HTML img tags. The =300x200 shortcut is not recognised. | | Notion | Partial | Pasted Markdown becomes an image block; you resize by dragging handles, not by syntax. | | Reddit | Partial | No HTML allowed, so no sizing or alignment. Images are uploaded through the editor. | | Discord | None | Image syntax is not rendered. Paste the raw URL and Discord embeds a preview itself. | ### How to size and align an image in Markdown 1. **Pick an image type** — Choose standard, reference-style or linked, depending on whether the image is inline, defined once by label, or should be clickable. 2. **Fill in the URL and alt text** — Paste the image URL or a relative path, then write alt text that describes the image for screen readers and for readers whose image fails to load. 3. **Set the size and alignment** — Enter a width, a height, or both, and choose center, left or right. The generator switches to the HTML form automatically, because plain Markdown cannot express size. 4. **Copy the result** — Copy the Markdown or the HTML output, and use the preview tab to confirm the image lands where you expect before you commit. ### Frequently asked questions **How do I change image size in Markdown?** Standard Markdown has no size syntax, so use an HTML tag: Alt text. Setting only the width lets the browser scale the height and preserve the aspect ratio. Percentage widths such as 50% also work and stay responsive on narrow screens. **How do I center an image in Markdown?** Wrap it in a div with an align attribute:
, then the image tag, then
. This works on GitHub and GitLab because they keep the align attribute while removing inline CSS. In renderers that allow style attributes you can instead use style="display: block; margin: 0 auto". **How do I resize an image in GitHub Markdown?** GitHub accepts HTML inside Markdown, so an tag with width and height renders correctly in READMEs, issues, pull requests and wikis. GitHub does not support the ![alt](image.png =300x200) shortcut and it strips style attributes, so always use the width and height attributes. **How do I add an image in Markdown?** Write an exclamation mark, the alt text in square brackets, and the path in parentheses: ![Alt text](image.png). Add a quoted title after the path for a hover tooltip. The path can be a full URL, a site-root path such as /images/photo.png, or a relative path. **How do I add a local image in Markdown?** Use a path relative to where the document is rendered rather than where it is stored: ./images/photo.png for the same folder, ../images/photo.png for the parent folder. On GitHub, relative paths resolve inside the repository, so images keep working in forks and in cloned copies. **How do I make an image clickable in Markdown?** Nest the image inside link syntax: [![Alt text](thumb.png)](https://example.com). The image becomes the link content. If the clickable image also needs a fixed size, write it as HTML instead: an anchor wrapping an img tag that carries the width attribute. **How do I add a caption to an image in Markdown?** There is no caption syntax. The usual solution is the HTML figure element: an img tag followed by a figcaption element, both inside figure. Most static site generators render that correctly. A fallback that works everywhere is a short italic line placed directly under the image. **Why is my Markdown image not showing?** The common causes are a wrong relative path, a private or hotlink-protected URL, a missing exclamation mark before the brackets, and a space between the closing bracket and the opening parenthesis. On GitHub, link to the raw file rather than the page that displays it. **Does the ![alt](image.png =300x200) size syntax work?** Only in some editors. Typora and markdown-it with the imsize plugin support it, but CommonMark, GitHub, GitLab and the built-in VS Code preview do not, and they print the syntax as literal text. Use an HTML img tag for any document that has to travel between tools. **Does alt text actually matter?** Yes. Alt text is what screen readers announce, what browsers display when an image fails to load, and one of the signals search engines use to understand the image. Describe the content rather than the file: Deployment pipeline diagram beats screenshot.png. --- ## Markdown Cheat Sheet URL: https://mdutil.com/tools/markdown-cheatsheet ### What is the basic syntax of Markdown? Markdown formats text with ordinary punctuation: # for headings, **text** for bold, *text* for italic, > for blockquotes, - or 1. for lists, backticks for code, [text](url) for links and ![alt](url) for images. Extended syntax adds tables, fenced code blocks, task lists, footnotes and strikethrough. ```markdown # Heading 1 **bold** *italic* ~~strikethrough~~ > Blockquote - Bullet item 1. Numbered item - [ ] Task item `inline code` [link](https://example.com) ![alt text](image.png) | Column A | Column B | | -------- | -------- | | Cell | Cell | ``` Renders an H1 heading, bold, italic and struck-through text, a quoted paragraph, a bulleted, a numbered and a checkbox list, inline code, a hyperlink, an image and a two-column table. ### Markdown syntax reference, element by element Markdown splits into two layers. Basic syntax comes from John Gruber's original 2004 design and works in every parser. Extended syntax — tables, fenced code, task lists, footnotes — comes mostly from GitHub Flavored Markdown and CommonMark extensions, and support varies. The groups below cover both, along with the rules people most often get wrong. #### Headings, paragraphs and line breaks One to six hash characters set the heading level, and the space after the hashes is required. Paragraphs are separated by a blank line — a single newline is only a space in most parsers. To force a break inside a paragraph, end the line with two spaces or a backslash. ```markdown # Heading 1 ## Heading 2 ###### Heading 6 First paragraph. Second paragraph with a hard break on the line above. ``` Produces h1, h2 and h6 elements, two separate paragraphs, and a
where the two trailing spaces appear. #### Emphasis: bold, italic and strikethrough One delimiter is italic, two are bold, three are both. Asterisks and underscores are interchangeable around whole words, but only asterisks work inside a word, because underscores appear in identifiers like snake_case. Strikethrough with double tildes is GFM, not core Markdown. ```markdown *italic* and _italic_ **bold** and __bold__ ***bold italic*** ~~struck through~~ un**bel**ievable ``` Renders em, strong, nested strong+em, del, and bold applied to the middle of a single word. #### Lists, nesting and task lists Use -, * or + for bullets and any number followed by a dot for ordered lists; the renderer renumbers automatically, so 1. on every line is valid. Indent nested items by two to four spaces. A [ ] or [x] right after the bullet turns the item into a checkbox on GitHub-compatible platforms. ```markdown - First item - Second item - Nested item 1. First step 1. Second step 1. Third step - [x] Done - [ ] Not done ``` Produces a bulleted list with one nested level, an ordered list numbered 1 to 3, and a task list with one checked box. #### Links, images and reference style Inline links put the text in brackets and the URL in parentheses; an image is the same with a leading exclamation mark, where the bracketed text becomes alt text. Reference style moves URLs to the bottom of the document, which keeps long paragraphs readable. Bare URLs autolink in GFM. ```markdown [Inline link](https://example.com "Optional title") ![Alt text](/images/example.png) [Reference link][docs] [docs]: https://example.com/docs ``` Renders a titled hyperlink, an image with alt text, and a second hyperlink resolved from the definition at the bottom. #### Inline code, fenced blocks and escaping Single backticks mark inline code; if the code itself contains a backtick, wrap it in double backticks. Fenced blocks use three backticks with an optional language hint that drives syntax highlighting. Nothing inside code is parsed as Markdown, which makes it the simplest way to show literal symbols. ```markdown Run `npm install` first. Use ``a `b` c`` for nested backticks. ```js function hello() { console.log("Hello"); } ``` \*not italic\* ``` Renders two inline code spans, a JavaScript block with highlighting, and the literal text *not italic* with visible asterisks. #### Tables, footnotes and other extended syntax Tables need a header row and a dash row; colons in the dash row set alignment. Footnotes, definition lists, heading IDs, highlighting, subscript and superscript are extensions — useful in Obsidian or a documentation generator, but they fall back to raw characters where they are unsupported. ```markdown | Left | Center | Right | | :--- | :----: | ----: | | a | b | c | A claim that needs a source.[^1] [^1]: The footnote text. ### Custom anchor {#custom-id} ``` Renders a three-column table with left, centre and right alignment, a superscript footnote marker linked to a note at the end, and an h3 with the id custom-id where heading IDs are supported. ### Which Markdown syntax works where Basic syntax is safe everywhere. Extended syntax is where documents break: the same file can render perfectly in Obsidian and show raw symbols in a chat app. Check the target platform before you rely on anything below the Basic Syntax section. | Platform | Support | Notes | | --- | --- | --- | | GitHub / GitLab | Basic + most extended | Tables, task lists, strikethrough, footnotes and autolinks. No definition lists, highlight or sub/superscript. | | Discord | Partial | Headings, lists, quotes, code blocks, spoilers and masked links. No tables, images or footnotes. | | Slack | Partial | Uses its own mrkdwn: *bold*, _italic_, ~strike~. No headings, tables or images. | | Obsidian | Basic + extended | Adds ==highlight==, callouts, [[wikilinks]], footnotes and LaTeX math. | | Notion | Partial | Typing basic syntax converts as you type. Footnotes, definition lists and heading IDs are dropped on paste. | | Reddit | Partial | Tables, strikethrough and ^superscript^ work. No footnotes or heading IDs. | | VS Code preview | Basic + extended | CommonMark plus GFM tables, task lists and math; extensions cover the rest. | ### How to use this Markdown cheat sheet 1. **Find the element** — Browse Basic Syntax for the elements every parser supports, or Extended Syntax for GitHub-era additions such as tables, footnotes and task lists. 2. **Compare code with output** — Each block shows the raw Markdown on the left and the live rendered result on the right, so you can confirm exactly what a symbol produces before using it. 3. **Copy the snippet** — Press the copy button in a block header to put that exact syntax on your clipboard. 4. **Paste and adapt** — Replace the placeholder text with your own. If you used extended syntax, check the compatibility table for your target platform first. ### Frequently asked questions **What is Markdown?** Markdown is a lightweight markup language that formats plain text using ordinary punctuation. John Gruber created it in 2004 so documents stay readable in their raw form. A parser converts the text to HTML, which is why the same .md file renders on GitHub, in Obsidian, in static site generators and in many chat apps. **What is the difference between basic and extended Markdown syntax?** Basic syntax covers the original elements: headings, paragraphs, bold, italic, blockquotes, lists, code, horizontal rules, links and images. Every parser supports them. Extended syntax, popularised by GitHub Flavored Markdown, adds tables, fenced code blocks, footnotes, definition lists, strikethrough, task lists, emoji and heading IDs, and support varies by platform. **Is Markdown syntax the same on GitHub?** GitHub uses GitHub Flavored Markdown, a superset of CommonMark. All basic syntax behaves identically, and GFM adds tables, task lists, strikethrough, footnotes, automatically linked URLs and syntax highlighting in fenced code blocks. GFM does not support definition lists, highlighting with equals signs, or subscript and superscript. **How do I create a line break in Markdown?** End the line with two spaces before pressing Enter, or end it with a backslash. Both force a break inside the same paragraph. A single newline on its own is treated as a space by most parsers, and a blank line starts a new paragraph rather than a line break. **How do I make a table in Markdown?** Write a header row with cells separated by pipes, then a row of dashes, then one line per data row. Colons in the dash row set alignment: :--- is left, :---: is centre and ---: is right. Tables are extended syntax, so they need a GitHub Flavored Markdown compatible parser. **Can I use HTML inside Markdown?** Usually yes. Inline tags such as kbd or sub work inside a paragraph, and block-level HTML works when it is surrounded by blank lines. Markdown syntax is normally not parsed inside block-level HTML, and platforms such as GitHub sanitise tags, so scripts and style attributes are stripped. **How do I escape Markdown characters?** Put a backslash in front of the character. Escaping works for the characters Markdown treats specially, including backslash, backtick, asterisk, underscore, curly braces, square brackets, parentheses, hash, plus, minus, dot, exclamation mark and pipe. Wrapping the text in backticks also disables formatting. **Do I need a space after the hash in a Markdown heading?** Yes. In CommonMark and GitHub Flavored Markdown, #Heading renders as literal text while # Heading renders as a heading. The same rule applies to other block markers: a list item needs a space after the dash and a blockquote needs a space after the angle bracket. **What file extension do Markdown files use?** The standard extension is .md, and .markdown is equally valid. Both are plain text, so any editor can open them. GitHub renders README.md automatically, and static site generators expect .md, or .mdx when the file also contains components. **Why does my Markdown look different on another site?** Platforms implement different feature sets. Highlighting, subscript, superscript, footnotes and definition lists are extensions rather than standard Markdown, so a page that renders correctly in Obsidian can show raw symbols on GitHub or Reddit. Stick to basic syntax when a document has to travel between tools. ---