shieldcn
Docs
Studio
Showcase
Sponsor
jal-co/shieldcn597
shieldcn

Member of the Vercel OSS Program

Analytics provided by OpenPanel

Monitored by Sentry

Powered by Neon.

Community

GitHubjal-co/uiStatsllms.txtPrivacyContact

Product

DocumentationAPI ReferenceToken PoolGeneratorAgent Skill

inspired by shields.io and badgen.net

Made with in by Justin Levine

shieldcn
Docs
Studio
Showcase
Sponsor
jal-co/shieldcn597

Search documentation

Search all badge providers, guides, and reference docs.

Getting Started

IntroductionREADME StudioCLIAgent SkillNewSelf-HostingAPI ReferenceToken PoolSponsor

Badges

Badge GroupStatic BadgeDynamic JSONHTTPS Endpoint

Charts

OverviewStar history

Headers

OverviewGenerator

Sponsors

OverviewGenerator

Contributors

OverviewGenerator
shieldcn

Member of the Vercel OSS Program

Analytics provided by OpenPanel

Monitored by Sentry

Powered by Neon.

Community

GitHubjal-co/uiStatsllms.txtPrivacyContact

Product

DocumentationAPI ReferenceToken PoolGeneratorAgent Skill

inspired by shields.io and badgen.net

Made with in by Justin Levine

Charts

Shadcn-styled graphs for GitHub issues, lifetime commit history, npm downloads, and your own JSON data — rendered as portable SVGs.

Shadcn-styled line/area charts you can drop in a README, docs site, or anywhere an image works — plain SVG, no JavaScript, no iframe. Four kinds: GitHub issues over time, lifetime commit history (a homage to commit-history), npm downloads, and arbitrary JSON.

Star history charts are retired. GitHub restricted the stargazers API to repo admins and collaborators in June 2026, so timestamped star data can no longer be fetched for arbitrary repos. Existing /chart/github/stars/... URLs now render a 100×1 transparent image so they don't break READMEs — swap them for an npm downloads or commit history chart.

![zod npm downloads](https://shieldcn.dev/chart/npm/zod.svg?theme=blue)

Builder

Pick a chart kind, tweak the styling, and copy the URL or markdown.

GET/chart/npm/:package.svg
![chart](https://shieldcn.dev/chart/npm/zod.svg)
chart preview

URL format

/chart/github/issues/{owner}/{repo}.svg    → GitHub issues over time
/chart/github/commits/{user}.svg            → lifetime commit history
/chart/github/commits/{user1},{user2}.svg   → compare users
/chart/npm/{package}.svg                    → npm weekly downloads
/chart/json.svg?values=1,2,3                → inline JSON data
/chart/json.svg?url=...&query=...           → remote JSON data

Every endpoint also serves .png and .json (the raw time series).

Use it in markdown:

![npm downloads](https://shieldcn.dev/chart/npm/zod.svg)

Or as a clickable image linking back to the package:

[![npm downloads](https://shieldcn.dev/chart/npm/zod.svg)](https://www.npmjs.com/package/zod)

GitHub issues over time

Cumulative issues opened, sampled from the GitHub search API (pull requests excluded).

/chart/github/issues/{owner}/{repo}.svg

Issues opened over time

![honojs/hono issues over time](https://shieldcn.dev/chart/github/issues/honojs/hono.svg?theme=rose)

GitHub commits over time

A whole coding career as one rising curve — every public commit since the account was born, accumulated month by month (the same data as the green contribution graph, not the noisy issues/PRs calendar). This is a loving homage to commit-history by Peet von Zweigbergk — "a star-history, but for commits".

/chart/github/commits/{user}.svg

Lifetime public commits, accumulated month by month

![torvalds lifetime commit history](https://shieldcn.dev/chart/github/commits/torvalds.svg?theme=green)

Compare users

Pass comma-separated logins to race several trajectories on one chart.

/chart/github/commits/{user1},{user2},{user3}.svg

Comma-separated logins compare users on one chart

![gaearon vs sindresorhus commit history](https://shieldcn.dev/chart/github/commits/gaearon,sindresorhus.svg)

Add ?align=true for aligned mode — every user lines up at "month zero" (their own account birth) regardless of when they actually joined, so you're comparing trajectories rather than calendar dates.

Aligned mode — everyone starts at their own month zero

![aligned commit history comparison](https://shieldcn.dev/chart/github/commits/gaearon,sindresorhus.svg?align=true&theme=violet)

npm downloads

Weekly download buckets over the last year (configurable with ?days=).

/chart/npm/{package}.svg
/chart/npm/@scope/{package}.svg

Weekly npm downloads

![zod npm downloads](https://shieldcn.dev/chart/npm/zod.svg?theme=emerald)

Your own data (JSON)

Bring numbers inline with ?values= (comma-separated). Add ?dates= for a time axis or ?labels= for category ticks — omit both and points are spaced evenly and labelled 1, 2, 3, ….

/chart/json.svg?values=120,180,150,210,260&title=Latency&label=ms
/chart/json.svg?values=10,20,30&dates=2024-01-01,2024-02-01,2024-03-01

Inline values, evenly spaced index axis

![inline JSON chart](https://shieldcn.dev/chart/json.svg?values=120,180,150,210,260,240,300,280,340&title=Latency&label=ms&theme=violet)

Or pull from a remote endpoint with JSONPath, exactly like the dynamic JSON badge. query selects the value array; optional dateQuery selects a parallel date array.

/chart/json.svg?url=https://api.example.com/metrics.json&query=$.points[*].count&dateQuery=$.points[*].date

Query parameters

ParamValuesDefaultDescription
modedark, lightdarkSurface and text colors
themeblue, green, rose, orange, violet, purple, cyan, emerald, …—Accent color from the shadcn palette
colorhex (no #)3b82f6Line + end-dot color (wins over theme)
fillhex (no #)line colorArea fill color, independent of the line
areatrue, falsetrueShow the gradient area fill under the line
bg / backgroundtransparent, hexmode surfaceCard background
bordertrue, falsetrueDraw the rounded card border
fontinter, geist, geist-mono, jetbrains-mono, fira-code, roboto, space-groteskinterFont-family stack (same keywords as badges)
logofalseshownShow/hide the shieldcn corner watermark
logoColorhex (no #)mutedWatermark color
iconSimpleIcons slug, ri:Name, falseauto (github/npm)Icon left of the title
iconColorhex (no #)title colorTitle icon color
yScalelinear, loglinearY-axis scale type
yMinnumber0 (auto)Force the y-axis minimum
yMaxnumberautoForce the y-axis maximum
yTicks1–104Number of y-axis gridline intervals
xTicks2–123Number of x-axis labels
width200–2000800Chart width in px
height120–1200400Chart height in px
titlestringper kindOverride the chart title
aligntrue, falsefalseCommit charts: line users up at their account birth (month zero)
days30–540365npm download window
valuescomma numbers—Inline JSON data points
datescomma dates—Inline JSON x-axis dates
labelscomma strings—Inline JSON x-axis labels
url + queryURL + JSONPath—Remote JSON data source

Note — font only swaps the family stack. Charts are raw SVG (needed for the line paths), and a sandboxed <img> SVG can't load embedded fonts — so the rendered typeface depends on what's available to the viewer.

What happened to star history?

Star history charts reconstructed the curve from GitHub's stargazers endpoint (/repos/{owner}/{repo}/stargazers with the star+json media type), which returned a starred_at timestamp per stargazer. In June 2026 GitHub restricted that endpoint to repo admins and collaborators, so the data is no longer accessible for arbitrary repos.

The data is still accessible in one place: a GitHub Actions workflow running in the repo itself, where the automatic GITHUB_TOKEN has collaborator access. The shieldcn starchart action fetches the history there, renders the same chart card, and commits the SVG to your repo.

To keep existing READMEs from breaking, /chart/github/stars/... URLs now return a 100×1 transparent image (and .json returns 410 Gone pointing at the action). If you'd rather stay on hosted charts, swap in an issues, commits, or npm downloads chart. The plain stars count badge still works — it uses the repo metadata endpoint, which is unaffected.

How commit history works

The commit curve is a homage to commit-history, and works the same way it does. GitHub's GraphQL user.contributionsCollection.totalCommitContributions returns the public commit count for a window of at most a year, so a lifetime is sliced into monthly windows — batched a year at a time into aliased queries — then the counts are accumulated into the rising curve. Only public commits are counted. Requests go through the donated token pool with a 6-hour fresh window and a 30-day last-known-good fallback.

Data sources

ChartSourceCache
IssuesGitHub Search API (type:issue)6h fresh · 30d last-known-good
CommitsGitHub GraphQL API (contributionsCollection)6h fresh · 30d last-known-good
npmnpm downloads API1h
JSONinline, or your url5m (remote)

GitHub requests are distributed across the donated token pool and serve a last-known-good copy if the upstream is briefly unavailable.

On This Page

BuilderURL formatGitHub issues over timeGitHub commits over timeCompare usersnpm downloadsYour own data (JSON)Query parametersWhat happened to star history?How commit history worksData sources