Embed an image with , swap in a title if you want hover text, and choose one of three workflows: store the file in your repo, link to a hosted URL, or let your editor upload and paste the Markdown for you. Whichever route you pick, write real alt text every time. It's not optional polish. It's what makes the image readable to screen readers and indexable by search engines.
TL;DR:
- Using repo-stored images ensures longevity, version control, and survival across forks, branches, and platform migrations, unlike external hosting.
- Pasting or dragging screenshots into editors like VS Code or GitHub uploads images instantly, but consider long-term storage for primary documentation needs.
- Raw HTML is necessary only when precise sizing, alignment, or advanced layout is required, with attention to renderer compatibility and accessibility.
- Avoid overwriting image files to prevent stale content due to CDN caching; renaming files helps ensure the latest version displays.
- For quick sharing of non-permanent documents, platforms like Markbin enable instant upload and rendering without repo setup or CDN configuration.
Table of Contents
- How Do You Upload Images in Markdown?
- Should You Store Images in Your Repository?
- What's the Fastest Way to Upload Screenshots in an Editor?
- When Should You Use HTML Instead of Markdown Syntax?
- Where Should You Host Your Markdown Images?
- What Are the Best Practices for Reliable Markdown Images?
- Markbin's Take on Uploading and Sharing Markdown Images
- Skip the Repo Setup: Share Rendered Markdown Instantly
- Sources
How Do You Upload Images in Markdown?
The syntax is short by design: . The exclamation point is what separates it from a regular link, and the text in brackets is your alt description, not a caption. You can add a title too, which most browsers show as a hover tooltip: . If an image is purely decorative and adds nothing a reader needs to know, use empty brackets ![] so screen readers skip over it instead of reading a meaningless filename aloud.
A few variations come up constantly once you're past the basics:
- Titled image:
adds a tooltip without cluttering the alt text. - Decorative image:
tells assistive tech there's nothing worth announcing. - Clickable image: wrap the image syntax inside a link:
[](target_url). Clicking the picture takes the reader to the target URL instead of opening the image full size, which is how most sites turn a thumbnail into a working link.
That clickable pattern trips people up the first time because it looks like nested brackets gone wrong. It isn't. The image is the link's visible content.
Should You Store Images in Your Repository?
If you're writing documentation or a README, yes. Repo-stored images survive forks, branch changes, and platform migrations that break externally hosted links overnight. Here's the setup:
- Create an
images/orassets/folder at the root of the project, or nested next to the document that uses it. - Reference the file with a relative path:
./images/diagram.pngfor a sibling folder, or../assets/logo.pngwhen climbing up a level. - Commit the actual image file to the repo. Never point Markdown at a local OS path like
C:\Users\you\Pictures\shot.png, which means nothing outside your machine. - Push the change and confirm the image renders on the platform you're targeting, since rendering behavior varies across environments.
Pro Tip: If you update an image but the old version keeps showing up, it's almost always CDN caching, not a broken link. Rename the file (banner-v2.png instead of banner.png) rather than overwriting the original, and the cache problem disappears on its own.
What's the Fastest Way to Upload Screenshots in an Editor?
Typing out file paths by hand is the slow way to do this. Most editors will happily do the upload and insertion for you.
- VS Code: paste a screenshot directly into a Markdown file and it prompts you to save it, usually dropping it into a local assets folder and auto-inserting the syntax. Holding Shift while pasting can change whether it inserts as Markdown or plain text, depending on your settings. Dragging a file from the explorer panel into the editor works the same way.
- GitHub and Gist: paste or drag an image into an issue, pull request comment, or Gist, and GitHub uploads it to its own asset storage and writes the Markdown link for you automatically.
- GitPaste: this VS Code extension takes clipboard images and pushes them straight to a GitHub repository, then inserts a ready-made Markdown link at your cursor. You configure the target repo, branch, path, and filename format once, and it runs in both desktop and web VS Code afterward.
The real decision is permanence versus speed. Editor automation is a genuine productivity win for fast screenshots and iterative docs where you're editing constantly. But if the image needs to survive long after the editing session, that is, it's going into a public README or a shared knowledge base, make sure the automated upload lands somewhere permanent rather than a throwaway paste bin.
Pro Tip: Set GitPaste's output path to match your existing images folder structure. That way automated uploads and manually committed images live in the same place, and nobody on your team has to hunt for assets later.
When Should You Use HTML Instead of Markdown Syntax?
Markdown's image syntax has no way to control size or alignment. There's no width parameter, no centering, nothing. When you need an image smaller than its native dimensions, or lined up a specific way, drop into raw HTML instead: <img src="diagram.png" alt="Architecture diagram" width="400">.
A couple of details matter here:
- Alt vs title:
altis the accessibility description, always required.titleis optional hover text. They serve different readers, so don't use one to duplicate the other. - Width and height are set in pixels, and true positioning or advanced layout needs CSS that your host may or may not support.
- Portability is the catch. Not every Markdown renderer allows raw HTML, and some strip it outright for security reasons. Before you build a document around
<img>tags, verify the renderer actually supports them in every place you plan to publish it.
If you're writing something that needs to render identically across GitHub, a static site generator, and a Markdown viewer, minimize the HTML and lean on plain Markdown wherever the layout allows it.
Where Should You Host Your Markdown Images?
Three practical options cover almost every situation, and picking the wrong one is how documentation ends up full of broken image icons six months later.
- Repo-stored images win for anything versioned: READMEs, technical docs, internal wikis. You get history, rollback, and a link that survives as long as the repo does.
- Dedicated hosts and CDNs make sense for blog posts, marketing pages, or anywhere load speed and external reach matter more than version history.
- Instant upload hosts are built for the fast case: you screenshot something, need it in a Markdown doc in the next ten seconds, and don't care about long-term ownership. Upload the file and copy the generated Markdown snippet straight into your document.
Whichever you choose, confirm you're linking the direct image URL, not a landing page that happens to display the image inside a viewer. And before you commit to a host for anything permanent, think about privacy. Free instant-upload tools are often public by default, which is fine for a diagram, less fine for a screenshot with sensitive data in it.
What Are the Best Practices for Reliable Markdown Images?
Most broken-image complaints trace back to five recurring mistakes. Fix these and you'll rarely see one again:
- Write alt text that describes the actual content, not a vague label like "image1". This is the single biggest lever for accessibility and search visibility, and it costs you nothing extra to get right the first time.
- Use unique filenames for every update. Overwriting
chart.pngin place is the number one cause of stale images showing up after a CDN caches the old version. - Optimize file size and format before uploading. WebP gives you smaller files at comparable quality; keep a PNG or JPEG fallback if you're not sure the target renderer supports WebP.
- Test the raw URL directly in a browser before dropping it into Markdown. If it doesn't load on its own, it won't load embedded either.
- Check rendering on every platform you publish to, since GitHub, GitLab, and Bitbucket each handle Markdown flavors slightly differently, and a syntax quirk that works on one can silently fail on another.
Quick gut check: if an image looks fine in your local preview but breaks once pushed, the cause is almost always a relative path issue or a host that blocks hotlinking, rarely a syntax mistake.
Markbin's Take on Uploading and Sharing Markdown Images
Most of the workflows above assume you're maintaining a repo. Plenty of writing doesn't need one. If you're drafting a tutorial, a set of notes, or a document you want to hand off with a single link, uploading images and juggling relative paths is more infrastructure than the job requires.
Markbin lets you drop assets directly into a document, write full GitHub Flavored Markdown around them, and get back an instant shareable link, no repo, no account, no CDN configuration. It supports the same syntax highlighting, tables, and task lists covered in this piece, plus password protection when a document shouldn't be public. For a quick tutorial or an internal writeup where repo permanence doesn't matter, that removes an entire layer of setup between a screenshot and a finished, rendered document.
The tradeoff runs the other way for long-lived technical documentation, where repo versioning still wins. Markbin fits the gap those workflows leave open.
— Zack
Skip the Repo Setup: Share Rendered Markdown Instantly
If your document is a one-off tutorial, a shared note, or something you need a colleague to see in five minutes rather than after a pull request review, none of the repo or CDN setup covered above is worth the overhead. Markbin gives you a faster path: paste your Markdown, upload the images inline, and get a rendered, shareable link back immediately, no account required.

Markbin supports full GitHub Flavored Markdown, so the syntax highlighting, tables, and task lists you'd use in a repo carry over exactly. Add password protection when a document needs to stay private, or let it self-destruct after someone views it. For anyone who just needs to get a well-formatted document with images in front of another person fast, that's a real shortcut compared to committing files and managing paths by hand.
Head to Markbin and paste your first document to see the rendered link generate in seconds.
Sources
- Basic Syntax | Markdown Guide
- How To Add Images in Markdown | DigitalOcean
- GitPaste — Visual Studio Marketplace
- Markdown Image Hosting - Upload and Copy Markdown Image Link
