Concise, consistent, and legible badges in SVG and raster format
JavaScript Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.circleci Try to fix greenkeeper-lockfile not updating (#1562) Mar 19, 2018
.github Use a better OpenCollective link Dec 1, 2017
__snapshots__ Add snapshot tests for SVG and JSON (#1557) Mar 11, 2018
doc Documentation typos (#1647) Apr 15, 2018
frontend Add [dynamic-yaml] badge (#1623) Apr 8, 2018
lib set expires header corresponding to maxAge (#1651) Apr 22, 2018
logo Add Stack Exchange logos (#1636) Apr 6, 2018
pages Extract examples from new-style services (#1582) Mar 30, 2018
public Add monitoring platform Dec 3, 2017
services [librariesio] Missing try/catch block and tests (#1644) Apr 14, 2018
spec fix inline image path (#1427) Jan 6, 2018
static Improve search performance (#1393) Dec 27, 2017
templates Optimization + cleanup in makeBadge (#1405) Dec 29, 2017
.buildpacks Node engine version information. Deployment files. Jan 3, 2014
.dockerignore Improve Docker run (envsubst, Alpine, documented env file) (#870) May 7, 2017
.editorconfig .editorconfig file to help all contributers to align to a common proj… Nov 5, 2015
.eslintignore Add snapshot tests for SVG and JSON (#1557) Mar 11, 2018
.eslintrc-frontend.yml Fix dynamic badge URL generator (#1344) Dec 6, 2017
.eslintrc-preferred.yml Adopt Chai for assertions (#1419) Jan 8, 2018
.eslintrc.yml New API for registering services: #963 #1423 #1425 #1450 #1451 #1544 #… Mar 12, 2018
.gitignore Extract examples from new-style services (#1582) Mar 30, 2018
.nycrc.json Upgrade coverage CLI from istanbul to nyc (#1148) Oct 11, 2017
.prettierignore Move gh-badges CLI into lib/ Oct 31, 2017
.prettierrc.yml Configure prettier and eslint-config-standard (#1123) Oct 9, 2017
CNAME CNAME for Feb 24, 2014 Documentation typos (#1647) Apr 15, 2018
Dockerfile Fix docker run (#1439) Jan 15, 2018 Files related to the switch to the shields repo. Feb 23, 2014
Makefile Commit index.html and _next on gh-page deployment Feb 25, 2018 "commits to be deployed" replaced "last deployed" (#1605) Mar 30, 2018
app.json Frontend: Allow BASE_URL to be unset (#1306) Dec 1, 2017 Speed up font-width computation in most cases (#1390) Dec 27, 2017
dangerfile.js Move service tests alongside code (#1563) Mar 21, 2018
favicon.png favicon.png recompress with zopflipng losslessly Mar 12, 2016
next.config.js Extract examples from new-style services (#1582) Mar 30, 2018
now.json Configure for deployment with zeit now (#1308) Dec 4, 2017
package-lock.json Add [dynamic-yaml] badge (#1623) Apr 8, 2018
package.json Add [dynamic-yaml] badge (#1623) Apr 8, 2018
secret.tpl.json Improve Docker run (envsubst, Alpine, documented env file) (#870) May 7, 2017
server.js update [pypi] to use warehouse (closes #1569) (#1648) Apr 15, 2018
server.spec.js Adopt async-await for most promise-based code (#1565) Mar 15, 2018
shields.example.env Redirect the root only when configured (#1270) Nov 17, 2017

build status commits to be deployed chat on Discord follow on Twitter

This is home to, a service for concise, consistent, and legible badges in SVG and raster format, which can easily be included in GitHub readmes or any other web page. The service supports dozens of continuous integration services, package registries, distributions, app stores, social networks, code coverage services, and code analysis services. Every month it serves over 470 million images.

In addition to hosting the frontend and server code, this monorepo hosts an NPM library for generating badges, and the badge design specification.


  • build status: build | failing
  • code coverage percentage: coverage | 80%
  • stable release version: version | 1.2.3
  • package manager release: gem | 1.2.3
  • status of third-party dependencies: dependencies | out-of-date
  • static code analysis GPA: code climate | 3.8
  • SemVer version observance: semver | 2.0.0
  • amount of Gratipay donations per week: tips | $2/week

Make your own badges! (Quick example:

Browse a complete list of badges.


Shields is a community project. We invite your participation through issues and pull requests! You can peruse the contributing guidelines.

When adding or changing a service please add tests.

This project has quite a backlog of suggestions! If you're new to the project, maybe you'd like to open a pull request to address one of them:

GitHub issues by-label

You can read a tutorial on how to add a badge.

Using the badge library

npm install -g gh-badges
badge build passed :green .png > mybadge.png
const badge = require('gh-badges')

// Optional step, to have accurate text width computation.
const format = {
  text: ['build', 'passed'],
  colorscheme: 'green',
  template: 'flat',

badge.loadFont('/path/to/Verdana.ttf', err => {
  badge(format, (svg, err) => {
    // svg is a string containing your badge

View the documentation for gh-badges.

Note: The badge library was last released in 2016.

npm version


  1. Install Node 8 or later. You can use the package manager of your choice. Tests need to pass in Node 8 and 9.
  2. Clone this repository.
  3. Run npm install to install the dependencies.
  4. Run npm run build to build the frontend.
  5. Run npm start to start the server.
  6. Open http://[::]:8080/ to view the home page.

To generate the frontend using production cache settings – that is, badge preview URIs with maxAge – run LONG_CACHE=true npm run build.

To analyze the frontend bundle, run npm install webpack-bundle-analyzer and then ANALYZE=true npm start.

Snapshot tests ensure we don't inadvertently make changes that affect the SVG or JSON output. When deliberately changing the output, run SNAPSHOT_DRY=1 npm run test:js:server to preview changes to the saved snapshots, and SNAPSHOT_UPDATE=1 npm run test:js:server to update them.

The server can be configured to use Sentry.

Hosting your own server

There is documentation about hosting your own server.

History was the original website for this service. Heroku back then had a thing which made it hard to use a toplevel domain with it, hence the odd domain. It used code developed in 2013 from a library called gh-badges, both developed by Thaddée Tyl. The project merged with by making it use the code and closed

The original badge specification was developed in 2013 by Olivier Lacan. It was inspired by the Travis CI and similar badges (there were a lot fewer, back then). In 2014 Thaddée Tyl redesigned it with help from a Travis CI employee and convinced everyone to switch to it. The old design is what today is called the plastic style; the new one is the flat style.

You can read more about the project's inception, the motivation of the SVG badge specification, and the specification itself.

Project leaders

espadrine is the sysadmin.

These contributors donate time on a consistent basis to help guide and maintain the project:

Related projects


All assets and code are under the CC0 LICENSE and in the public domain unless specified otherwise.

The assets in logo/ are trademarks of their respective companies and are under their terms and license.


This project exists thanks to all the people who contribute. [Contribute].


Thank you to all our backers! 🙏 [Become a backer]


Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]