Design

Stack Swag

Drag icons onto the canvas, arrange them, and export as SVG or Markdown.

Loading icons...
Canvas

Click icons on the left to start

Drag icons on the canvas to reposition

Arrange

Theme

Settings

Icon size48px
Spacing12px

Background

Export

What you are actually building: a canvas of positioned icon SVGs, not a fixed badge template

Every icon added gets its own x, y, and size on an internal canvas — not a slot in a predefined badge layout. That is why dragging an icon anywhere on the canvas just works, and why the final export is a single SVG assembled directly from those coordinates rather than from a template with fixed icon positions. The icon artwork itself comes from the simple-icons library, loaded and cached in the browser the first time the picker opens, and searched by title or slug while typing.

Search ranks results before it filters by popularity: an exact title or slug match scores highest, then a prefix match, then a plain substring match, then a match against one word inside a multi-word title, and only within a tie does a fixed popularity table (JavaScript, TypeScript, and React sit at the top) break the order. Category chips along the top of the picker swap the whole result list for a curated set of slugs in that category instead of running a text search at all.

Five arrangement algorithms, and how Scatter stays reproducible

Applying an arrangement recomputes every icon's position from scratch using the current icon order: Row lines everything up left to right at a fixed size and gap; Grid wraps into however many columns are set; Arc bends the row into a semicircle whose radius grows with the icon count; Bento packs icons into a 4-column grid where some cells span two columns or two rows for a magazine-style mix of sizes, following one of five sizing presets (Auto, Hero First, Hero Last, Balanced, Pyramid).

Scatter looks the most random of the five, but it is not actually random on each click — it seeds a small pseudo-random generator from a hash of the exact icon slugs selected, so the same set of icons in the same order always spreads into the identical organic layout, run after run. Changing one icon changes the seed with it, which is why removing and re-adding the same icon can shift the whole arrangement even though nothing else changed.

  • Row — a single horizontal line, evenly spaced
  • Grid — wraps into a fixed number of columns
  • Arc — bends the same row into a semicircle
  • Bento — a 4-column grid with some cells enlarged per preset
  • Scatter — a deterministic pseudo-random spread seeded from the exact icon selection

Four color themes, and the one that allows a single icon override

Color theme uses each icon's actual simple-icons brand hex value — the same color the company itself specifies for its logo, not an approximation. Monochrome instead uses currentColor, meaning the icons render in whatever color the surrounding context provides (and export as literal SVG fill="currentColor", not a baked-in hex). Dark and Light are fixed near-black and near-white fills meant for placing icons against the opposite background.

Per-icon color overrides only appear in the interface when the theme is set to Monochrome — selecting an icon on the canvas then reveals a color picker that replaces that one icon's fill directly, independent of every other icon's color, with a Reset button that removes the override and lets the icon fall back to the theme's color again.

Export formats: what Markdown and HTML actually have in common

SVG export is the raw vector markup, generated straight from the canvas's current placements. Data URI is that same SVG base64-encoded into a data:image/svg+xml;base64,... string. Markdown and HTML are presented as two separate export options, with different descriptions in the interface, but as implemented today they produce exactly the same output: an <img src="data:..." alt="..."> tag built from that same base64 data URI. Neither one currently emits actual Markdown image syntax — picking either button gives an identical HTML tag.

The alt text for both is generated automatically from the titles of every icon currently on the canvas, joined by commas, so a stack of TypeScript, React, and PostgreSQL exports with alt="TypeScript, React, PostgreSQL" with no extra typing required.

The share link is the save file

There is no server-side save — every setting (which icons, their exact positions, the layout, theme, background, spacing) is continuously encoded into the page's own URL while working, replacing the browser's address bar entry without adding new history entries. The Share button copies that live URL to the clipboard; opening it later, in any browser, on any device, reconstructs the identical canvas from scratch by parsing those same URL parameters back into a configuration on load.

Building a three-icon stack end to end

Adding TypeScript, React, and PostgreSQL in that order under the default Row layout (48px icons, 12px gaps) places them at x=0, x=60, and x=120 — each icon offset from the last by exactly size-plus-gap — producing a single 168×48 SVG with no background. Each icon renders with its real brand fill pulled straight from simple-icons: #3178C6 for TypeScript, #61DAFB for React, #4169E1 for PostgreSQL. Switching the theme to Monochrome replaces all three fills with currentColor in one step; switching layout to Bento instead rearranges the same three icons into differently sized cells without changing which colors or which icons are on the canvas.

Common use cases

GitHub README tech-stack badge

Arrange a project's core technologies in Row or Grid layout and export as an HTML img tag that renders correctly wherever GitHub allows embedded images.

A "tools I use" section on a portfolio site

Build a Bento layout that highlights a few primary tools at larger size, then export the raw SVG to drop directly into a page.

Documenting a project's supported integrations

Search and add every integration icon by name, arrange in Grid, and export a Data URI to embed inline without hosting a separate image file.

Sharing an exact stack layout with a teammate

Copy the share link instead of exporting a file — opening it reproduces the identical icon selection, positions, theme, and background on the other end.

Frequently asked questions

How many icons does the picker actually have?

It is pulled live from the simple-icons library bundled with the app rather than a fixed count the generator defines itself, so the real number tracks whatever version of that library ships with the site rather than a number worth quoting here.

What is the difference between the Markdown and HTML export buttons?

Today, nothing in the actual output — both produce the identical img tag with a base64 data URI. The Markdown label describes what it is worded around (plain Markdown image syntax for GitHub), but the current implementation routes both buttons through the same code path.

Is the Scatter layout different every time I click Apply arrangement?

No — it is seeded from a hash of the exact icon selection, so the same icons in the same order always scatter into the same positions. Only changing which icons are selected (adding, removing, or reordering) changes the seed and therefore the layout.

Can I recolor just one icon instead of the whole stack?

Yes, but only while the theme is set to Monochrome — selecting an icon on the canvas then exposes a color picker for that icon alone, with a Reset button to remove the override.

Does the background option add a transparent margin, or a solid card behind the icons?

A solid, colored rectangle behind the icons, with its own configurable corner radius and padding — turning it off removes the rectangle entirely and the exported SVG becomes exactly as large as the icons themselves.

What happens to my layout if I reload the page?

Nothing is lost — every setting lives in the page's own URL, which updates continuously while working, so reloading the same URL restores the identical canvas without needing the Share button at all.

Do the Color-theme icon colors match each company's real brand color?

Yes — they are pulled directly from the simple-icons dataset's own hex values for each brand, the same values the icon library itself ships as canonical.

Is this only useful for GitHub READMEs?

No — SVG and Data URI exports work anywhere an image or inline SVG is accepted, including portfolio sites, internal documentation, and slide decks; GitHub is simply the use case the HTML and Markdown export options are worded around.

You might also like