Skip to content

mattqdev/stackfingerprint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

42 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

πŸ” Stack Fingerprint

Scan any public GitHub repo and generate a beautiful, embeddable SVG card of its tech stack.

Zero auth. Zero config. Paste a repo, get a badge.

Live Demo Stars License: MIT


Stack Fingerprint card for this repo


✨ Design Your Card Visually

You don't need to touch a line of code to get the perfect look. The Interactive Visual Builder lets you customise your fingerprint in real-time:

  • Real-time preview β€” see changes instantly as you toggle themes and layouts
  • 10+ designer themes β€” from the deep tones of Obsidian to the vibrant Sakura
  • 5 distinct layouts β€” choose Terminal for dev tools or Banner for project headers
  • One-click copy β€” grab the Markdown or HTML snippet and drop it straight into your README

Try the Visual Builder β†’


πŸ“„ Quick embed (no Action required)

If you just want to try it without setting up the Action, paste this into your README:

![Stack Fingerprint](https://stackfingerprint.vercel.app/api/card?repo=OWNER/REPO)

Customise with query parameters (see API reference):

![Stack Fingerprint](https://stackfingerprint.vercel.app/api/card?repo=vercel/next.js&theme=ocean&layout=classic&size=lg&categoryFilter=prodonly)

πŸ”΄ Common Problems

The community reported these most common problems, we have decided to fix all:

❌ Problem βœ… Fix
The embed is from an uncontrolled third-party domain Host it yourself easily with Vercel or just paste .github/workflows/stack-fingerprint.yml in your repo (recommended)
Some of the stacks detected are unused/false positive/insignificant You can choose to show: Top 5 stacks, Core only, Prod only etc; If this isn't enough you can decide to exclude singular stacks with "ignore" in .stackfingerprint.json
Full-repo scan surfaces signals from unrelated sub-projects ?path= query parameter scans a specific sub-directory;
Long signal lists discourage contributors and misrepresent the actual stack categoryFilter=prodonly hides all dev signals; categoryFilter=top shows only lang + framework, capped at 5; dev-only signals visually dimmed even in all mode. You have the FULL CONTROL of WHAT TO SHOW.

βš™οΈ Configuration file

Drop a .stackfingerprint.json file at your repo root (or at the sub-path you are scanning) to tune detection without touching any API parameter:

{
  "ignore": ["babel", "webpack", "terraform"],
  "pin": ["nextjs", "typescript"],
  "labels": { "nextjs": "Next.js 14" },
  "path": "apps/web"
}
Key Type Description
ignore string[] Signal IDs to suppress from the card, even if detected
pin string[] Signal IDs to always show, even if not auto-detected
labels object Override the display label for any signal ID
path string Default sub-path for monorepo scans (overridden by the ?path= query param)

See DOCS.md β†’ Configuration file for the full schema.


πŸ›‘ Supply-chain safety & self-hosting

⚠️ Self-hosting recommended for production use. See Supply-chain safety below.

Embedding an image from a third-party domain (stackfingerprint.vercel.app) in a high-profile README introduces supply-chain risk: the domain owner can change what the URL serves at any time. The recommended approach is to commit the SVG directly to your repository so it is served from GitHub's own CDN.

The easiest way to do this is with the included GitHub Action.

GitHub Action (recommended)

Drop .github/workflows/stack-fingerprint.yml into your repo:

Then reference the committed file in your README:

![Stack Fingerprint](./assets/stack-fingerprint.svg)

The SVG is now served from raw.githubusercontent.com β€” GitHub's own CDN β€” with no runtime dependency on stackfingerprint.vercel.app.

Deploy your own instance

For complete control, deploy a private instance in one click:

Deploy with Vercel

Point the Action's URL at your own domain and you own the entire pipeline.


πŸ— Monorepo support

For monorepos, add ?path=apps/web to scan a sub-directory instead of the repository root:

![Stack Fingerprint](https://stackfingerprint.vercel.app/api/card?repo=myorg/monorepo&path=apps/web)

The path parameter is also accepted by the GitHub Action as a workflow_dispatch input and as a key in .stackfingerprint.json.


🎨 Card options at a glance

Parameter Values Default Description
repo owner/repo β€” Required. GitHub repository to scan
theme See themes ocean Visual colour theme
layout classic compact minimal terminal banner classic Card layout
size sm md lg md Card size
iconStyle color mono outline color Icon rendering style
pillShape round square round Shape of tech pills
categoryFilter all prodonly top all Signal filter (see below)
path apps/web etc. (root) Monorepo sub-path

categoryFilter options

Value What it shows
all Every detected signal; dev-only signals are dimmed at 55 % opacity
prodonly Production signals only β€” all devDependencies-sourced signals are hidden
top Only lang + framework categories, capped at 5 signals β€” the minimal meaningful badge

πŸ›  Contributing & support

This project thrives on community input. Before opening a pull request, please open an issue first so we can discuss the goal and make sure it is a good fit.

Help grow the signal database

Is your favourite framework missing? Adding a new detection signal is as easy as adding a JSON object to src/data/signals.js:

{
  id: "astro",
  label: "Astro",
  category: "framework",
  iconSlug: "astro",
  color: "#FF5D01",
  match: {
    files: ["astro.config.mjs", "astro.config.js"],
  },
}

See DOCS.md β†’ Adding a signal for the full signal schema.


License

MIT β€” see LICENSE.


Built by mattqdev · If this saved you time, a ⭐ goes a long way.

About

Scan any public GitHub repo and generate a beautiful, embeddable SVG card of its tech stack. Zero auth, zero config.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Contributors

Languages