Cloud Icons Guide

Cloud icons in a README: sharp, readable in dark mode, and never stale

By the engineer who builds Datadef, from client work on data platforms · Reviewed August 21, 2026

A README architecture diagram gets about twenty seconds of attention from someone deciding whether to keep reading. Three things reliably waste those seconds: an image exported too small, dark strokes on a transparent background that vanish under GitHub dark theme, and a picture that describes a system two refactors old. All three have specific fixes.

6 min readFor maintainers whose README opens with a diagram, or should

See it as a diagram

Everything below, as a diagram you can edit. Describe yours and see it in seconds.

183/20003 credits left
Try:

No account needed · Editable canvas, not a picture

Resolution: the 900 pixel column

GitHub renders README content in a column around 900 pixels wide on a desktop browser. On a high-density display, that column is painted with roughly twice as many device pixels, so an image exported at 900 pixels is being asked to cover 1800 and looks soft. Export at 1800 pixels wide or more and the problem disappears.

The same number covers most other destinations. A Confluence page body and a Notion column are both narrower than a GitHub README, so a single 1800 pixel export serves all three. Going much beyond 2400 buys nothing except a slower page.

Icon sharpness inside the image follows from the same maths. If the source icons are vector, an 1800 pixel export renders them crisply at any node size. If somebody built the diagram from 32 pixel rasters, no export width will rescue them, which is where the SVG or PNG decision actually gets made.

Dark mode: transparency is the trap

A PNG with a transparent background and dark grey text looks correct in the editor and disappears against GitHub dark theme. It is the most common README diagram bug and it is invisible to the person who shipped it, because they read their own repository in light mode.

The reliable fix is an explicit background. Give the diagram a solid light background so it renders as a light card on a dark page, which every reader can see. It looks deliberate rather than broken, and it needs one file rather than two.

GitHub does support per-theme images through a picture element with prefers-color-scheme media attributes, and it works well. The cost is that you now have two exports to keep current, and the second one is the one that gets forgotten. Take that route only if the diagram is a permanent centrepiece.

## Architecture

![Platform architecture](PASTE_LIVE_EMBED_URL_HERE)

<!-- The embed URL comes from the project share panel.
     The image re-renders from the canvas, so this line
     stays correct after the architecture changes. -->

Staleness: the failure that actually costs you

A blurry diagram is annoying. A confidently wrong diagram sends a new contributor down a path that no longer exists, and it is worse than no diagram, because it carries the authority of being committed to the repository.

A live embed is one markdown image line whose image follows the canvas, and viewers need no account to see it. Update the diagram and every README, wiki page and Notion doc that references it updates with it. There is no export to redo and no binary to re-commit, which also keeps diagram churn out of the diff.

For repositories where the architecture is declared in code, repository sync closes the loop: connect the repository read-only on GitHub, GitLab or Azure DevOps, pick a branch or a tag, and the diagram plus an architecture document regenerate on a daily sync.

The reason that does not turn into daily churn is worth stating precisely, because "regenerates daily" usually means "moves daily". Each sync hashes the parsed draw plan rather than the commit. A commit that touches a README, a test or a comment changes the sha and leaves that fingerprint identical, and a sync with an identical fingerprint skips generation entirely: no redraw, no tokens spent. When the structure genuinely did change, the previous diagram's node ids, labels and zones are handed back to the generator so one new consumer reads as one new node rather than a new composition. And any node somebody dragged more than twelve pixels from where the last sync left it keeps the coordinates they gave it. A README image that only moves when the architecture moves is the difference between a diagram people trust and one they stop looking at.

Why the icons matter more here than anywhere else

In a deck you get to narrate. In a README nobody is talking, so recognition has to happen from the image alone. Official service marks let a reader identify a managed Postgres, a queue and an object store without reading a single label, which is the difference between twenty seconds spent understanding the system and twenty seconds spent parsing boxes.

That is also why a README diagram should use the marks the reader already knows rather than a house icon style. The library behind the generator covers 439 AWS, 624 Azure and 226 Google Cloud icons alongside 373 tech-stack marks and 32 data tooling marks, so the ordinary README stack of a web service, a Postgres, a Redis and a Kafka is drawn with the logos a contributor already recognises rather than four identical rectangles.

FAQ

What resolution should a README architecture diagram be?

At least 1800 pixels wide. GitHub renders README content in a column of roughly 900 pixels on desktop, and high-density displays paint that column with about twice as many device pixels, so a 900 pixel export looks soft on most modern screens.

Why does my diagram disappear in GitHub dark mode?

Because it was exported with a transparent background and dark text. On a dark page there is nothing behind the strokes, so they blend into the background. Export with an explicit light background so the diagram renders as a light card, which stays readable in both themes from a single file.

Should I commit the diagram image into the repository?

A committed image is a snapshot that has to be re-exported and re-committed on every architecture change, and diagram binaries make diffs noisy for everyone reviewing unrelated code. Referencing a live embed image keeps the README line permanent while the picture behind it stays current, and keeps the repository free of a binary that changes on every redraw.

Do readers need an account to see an embedded diagram?

No. A live embed renders as a plain image at a URL, so anyone who can read the README can see it, including anonymous visitors on a public repository and crawlers indexing it. That matters for an open source project, where requiring a login to see the architecture picture would exclude most of the people the README is written for.

Can the README diagram update itself when the code changes?

Yes, when the diagram comes from repository sync. Connect the repository read-only on GitHub, GitLab or Azure DevOps, choose a branch or a tag, and the diagram and its architecture document regenerate on a daily sync. The sync compares a fingerprint of the parsed structure rather than the commit sha, so a README or test-only commit skips regeneration entirely and the picture stays put.