How do I insert an image in Markdown?
Use an exclamation mark, alt text in brackets, and the image URL in parentheses: .
Embed an image in Markdown with an exclamation mark, alt text in brackets, and the image URL in parentheses: . The syntax is identical to a link with a leading ! — that exclamation mark is the only difference.
Everything renders in your browser — nothing is uploaded. Need more room? Open the full editor or the Markdown viewer.
The bracket text is the alt attribute, and it matters more than most people realize: screen readers speak it, search engines index it, and it displays in place of the image when the file fails to load. Write what the image shows ("Bar chart of monthly downloads, peaking in March"), not a filename or the word "image". Purely decorative images can use empty alt text (), which tells assistive technology to skip them.
Like links, images accept an optional hover title in quotes —  — and the URL can be absolute or relative. In a GitHub repository, relative paths like ./assets/screenshot.png resolve against the file location on the current branch, which keeps images working in forks. One caveat for README badges and screenshots: GitHub proxies all images through its Camo CDN, so dynamically generated images may be cached for a while.
To make an image clickable, nest the image inside a link: the image becomes the link text. [](https://example.com) reads inside-out — the inner  is the image, the outer [...](...) is the link. This is the standard pattern for CI badges that link to build pages, and thumbnails that link to full-size versions.
Pure Markdown cannot resize images — there is no width syntax in CommonMark or GFM. Where raw HTML is allowed (GitHub READMEs, most static site generators), use an img tag: <img src="image.png" alt="alt text" width="400">. GitHub also supports <picture> with prefers-color-scheme media queries to swap images between light and dark mode. Obsidian has its own shorthand (), but it is non-portable.
Embed an image with alt text.
Add a tooltip title to an image.
<img src="https://placehold.co/600x200" alt="Wide banner" width="300">Markdown has no native sizing syntax; use an HTML img tag on platforms that allow it.
[alt text](image.png)Without the leading exclamation mark you get a hyperlink to the image file instead of an embedded image.
 for a meaningful imageEmpty alt text on informative images hides them from screen readers and loses SEO value. Reserve empty alt for purely decorative images.
Spaces in the URL break the parser. Percent-encode spaces as %20, or rename the file to avoid spaces.
Relative paths resolve within the repo; all images are proxied through the Camo CDN. Drag-and-drop into issues/PRs uploads the file and inserts the Markdown for you.
Image Markdown syntax does not render in normal messages — attach or paste images instead.  only works inside bot embeds.
Uses ![[image.png]] embeds for vault files, with a size shorthand ![[image.png|400]]. Standard  also works for external images.
Pasted Markdown image syntax converts to image blocks on import; in normal editing you add images as blocks, not with Markdown syntax.
Use an exclamation mark, alt text in brackets, and the image URL in parentheses: .
Standard Markdown has no sizing syntax. On platforms that allow HTML (like GitHub), use <img src="image.png" width="400" alt="...">. Obsidian supports .
Wrap the image in link syntax: [](https://example.com). The inner part is the image, the outer brackets and parentheses are the link.
Describe what the image shows and why it matters in context — for example "Line chart showing response time dropping after the cache change". Skip phrases like "image of".
Markdown itself cannot center images. Where HTML is allowed, wrap the image: <p align="center"><img src="..." alt="..."></p> works on GitHub.
Copy-paste link examples with rendered output: inline, reference-style, autolinks and titles, plus how to escape parentheses that silently break a URL.
Copy-paste table examples with rendered output, colon alignment for each column, escaping pipes inside cells, and workarounds for what tables cannot do.
Copy-paste code examples with rendered output: inline backticks, fenced blocks with syntax highlighting, and how to nest backticks inside a code block.