Shields.io Badges: Build a Tech Stack Display That Actually Looks Good
Stop listing your skills as a boring wall of text. Here is how to use Shields.io badges, custom colors, and HTML grids to make your tech stack pop.
I still remember setting up my first GitHub profile back in 2021. I dropped a plain bulleted list of my skills right at the top—JavaScript, React, Node.js, and CSS. Honestly, it looked like a grocery list.
Here's the thing: nobody wants to read a wall of unformatted text. Dropping your tech stack as a raw text list just doesn't grab attention. But when you swap those plain bullets for custom Shields.io badges, you turn a boring section into a tight, professional display that hiring managers actually notice. It draws the eye instantly. I've seen profiles go from forgettable to standout just by fixing this one section.
While Shields.io can do dynamic stuff like pulling your latest build status, we're focusing on static metadata badges today. These are the colorful, branded rectangles that make up a proper skills matrix.
The Anatomy of a Static Badge URL
Every time a browser loads a custom badge, it's firing off an HTTP request to the Shields server. The basic structure of that URL looks like this:
https://img.shields.io/badge/<LABEL>-<MESSAGE>-<COLOR>?style=<STYLE>&logo=<LOGO>&logoColor=<LOGO_COLOR>
Let's break down exactly what each piece does:
- LABEL: The text on the dark left side of the badge. You don't have to use this. If you leave it out, you just get a single solid color block with the message.
- MESSAGE: The main text. This is where you put "React" or "PostgreSQL".
- COLOR: The hex code for the background. Leave out the
#symbol. Just61DAFBworks perfectly. - style: How the badge physically looks. I usually stick to:
for-the-badge(Big, blocky, all caps. This is what most modern profiles use.)flat(The default look. A bit smaller with rounded corners.)flat-square(Like flat, but sharp corners.)
- logo: The name of the icon. Shields pulls directly from Simple Icons, so you have access to thousands of brand logos out of the box.
- logoColor: The hex code for the icon itself. Usually, you want this to be
whiteso it pops against brand colors.
Watch out for escaping: I've broken my README so many times by forgetting this. If you put a regular space, dash, or underscore in your label or message, the URL will break. You have to replace spaces with underscores or use%20. If you actually want a dash to show up, you need to write it as a double dash (--). For instance, "C++" needs to be written asC%2B%2Bbecause standard plus signs break things.
Custom Social Badges
Besides tech stack skills, you should absolutely use these badges for your social links at the top of your profile. A row of standard blue links looks messy, but a clean row of social badges gets clicked way more often.
For example, adding your LinkedIn profile looks like this:
[](https://linkedin.com/in/yourusername)
And your Twitter or X profile:
[](https://x.com/yourusername)
Wrapping the markdown image tag in brackets and appending a link in parentheses makes the whole badge clickable.
Picking Color Hex Codes That Don't Hurt to Look At
Look, you can't just pick random neon hex codes and call it a day. If your badges clash, your profile looks chaotic.
I've run through dozens of color combinations on my own repos. You have two main routes to go here. The most common approach is matching the official brand color. It makes the logos instantly recognizable. For example, AWS is always that familiar orange (FF9900), and React is that soft blue (61DAFB).
But if you want a cleaner, more minimalist vibe, try standardizing your colors. I once redesigned a client's README using a monochromatic dark theme. We set every single badge background to a sleek dark gray (1A1B27) and kept all the logos their original brand colors. The contrast looked incredible.
If you're going for official colors, here are some combinations that look great together in a row:
- The Modern Frontend: React (
20232A), Tailwind CSS (38B2AC), Vercel (000000). - The Heavy Backend: Node.js (
339933), PostgreSQL (4169E1), Redis (DC382D). - The DevOps Stack: Docker (
2496ED), GitHub Actions (2088FF), Terraform (7B42BC).
Branded Badges Code Reference
I've put together a reference list of the exact Markdown code blocks for some of the most popular tools. These use the for-the-badge style because, frankly, it just looks better. You can copy and paste these directly.
| Technology | Markdown Snippet |
|---|---|
| React |  |
| Next.js |  |
| TypeScript |  |
| Python |  |
| Go |  |
| Docker |  |
| AWS |  |
| MongoDB |  |
Formatting and Grid Alignment
So you've got your badge URLs ready. If you just paste them into your markdown file one after another, it's going to look terrible on a phone. The line wrapping gets messy, and the spacing feels completely random.
To keep things looking sharp, wrap your badges inside standard HTML tags. GitHub's markdown parser handles basic HTML perfectly fine. My favorite trick is wrapping the whole stack in a centered div tag. It forces everything into a nice, readable block.
Here's exactly how I set up a centered grid for my own profile:
<div align="center">
<img src="https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript" />
<img src="https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB" alt="React" />
<img src="https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white" alt="Next.js" />
<br />
<img src="https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white" alt="Node.js" />
<img src="https://img.shields.io/badge/Express.js-000000?style=for-the-badge&logo=express&logoColor=white" alt="Express" />
<img src="https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white" alt="MongoDB" />
</div>
Notice that little <br /> tag in the middle? That's a lifesaver. You can use it to force a line break, grouping your frontend skills on one row and backend skills on the next. It instantly creates structure without messing with messy CSS tables.
If you want something even more rigid, use a standard markdown table. Tables keep everything strictly aligned, no matter what screen size someone is viewing your profile on. Just put your category names (like "Frontend" or "Database") in the first column and your row of badges in the second.
Try building your stack layout today. Grab a few of those markdown snippets above, tweak the hex codes if you want, and drop them into your README. You'll be surprised how much better it looks. Trust me, spending ten minutes formatting your tech stack pays off huge when recruiters are scanning your page.
Need a starting template?
Browse 9 professional, developer-tested templates in our gallery.