Vibeleaderboard
Index / tool

Pinhead Map Icons

pinhead.ink
Visit pinhead.ink
Category
Developer Tools
Rank
Pricing
Open Source
Type
TOOL
Use case
Design & Media
Interfaces
Web
GitHub
190 stars
Latest release
v15.25.0
Date

About

A public domain icon library specifically designed for map pins, providing 1,000+ visually consistent vector icons that remain legible at small sizes. Includes standardized versions of popular cartographic icon sets like Maki, Temaki, and OSM Carto.

What it does

Pinhead is a symbol collection built for pins on digital maps, where every glyph must still read clearly when shrunk to the size of a fingernail. Rather than drawing everything from scratch, its build pipeline pulls symbols from several existing open cartography projects, normalizes each one to a single small canvas, flattens shapes into one filled outline, and strips strokes and transforms. The result ships as raw graphics, a generated font, and browsable JSON data.

Why it's ranked here

Real projects vouch for this one. OpenStreetMap's iD editor ships Pinhead symbols for its tagging-schema icons, and OpenTrailMap retired its own custom set once Pinhead covered the same ground. The project also polices itself: a validation script rejects any submitted graphic that uses a stroke, a transform, or an attribute outside an approved list, forcing every contributor's work through the same narrow shape before it ships. That kind of enforced consistency is rare in a community-built set, where drift between contributors is the usual failure mode.

What's good

The fifteen-pixel legibility target forces real craft: every graphic has to read clearly at the size an actual map pin renders, not just as an isolated dashboard image. Compound names are parsed automatically into a category tree, so a graphic combining two ideas, say a car paired with a wrench, groups sensibly with other repair-related symbols without anyone hand-building a taxonomy. It also reconciles graphics pulled from a dozen separate public domain projects into one consistent visual language, sparing a mapmaker from hunting across sources for whichever set happens to have the shape they need.

Tradeoffs

The category system infers groupings from filenames through a fairly intricate set of pattern rules, which is clever but also opaque: it is not obvious which words trigger a match, and a wrong one changes how a symbol surfaces with no explicit index for outsiders to check. Assembling the library depends on network access to a dozen upstream repositories at build time, cloning each fresh, so it inherits any outage or history rewrite on their end. The tool that syncs approved symbols to Wikimedia Commons also still authenticates with a plain username and password rather than a token, a dated pattern for an otherwise active pipeline.

How to use it well

This fits a web map or desktop GIS project that needs point marker graphics, not a general app icon set: everything here is tuned for a marker's tiny footprint, not a toolbar button. Pull the published package for programmatic access to individual graphics, or grab the generated font when a mapping library already renders labels through a font layer. Check the published coverage comparison before adding a duplicate marker of your own, since the project already tracks overlap against the sources it draws from. Anyone contributing a new symbol should read the design guidelines first, since the automated check rejects anything outside the required single-path, stroke-free format.

Technical notes+

package.json declares the package as an ES module with a devDependency stack built around svgicons2svgfont, svg2ttf, sharp, and xmlbuilder2, showing the pipeline actually builds a font and rewrites SVG XML rather than just hosting static files. scripts/check_icons.js walks every SVG under icons/, requires a single svg root with viewBox "0 0 15 15", converts circles, rects, and polygons into path data via svg-path-parse, and hard-fails on any stroke, transform, or attribute outside an allow-list. scripts/build_dist.js then flattens that source tree into dist/icons, writing a compact manifest plus a fuller companion that inlines each SVG string, using per-icon data from src/ChangelogReader.js to flag icons marked sensitive. src/ExternalSourceManager.js clones each upstream repository listed in metadata/external_sources.json into a tmp directory (optionally pinned to a specific commit), copies its configured icon directory, and filters filenames by suffix or an ignore regex before indexing them. src/CategoryReader.js infers each icon's categories from its filename by splitting on prepositions and relational or state verbs, then matching the remaining parts against per-category regexes built from prefix, suffix, and pluralization rules, falling back to explicit entries in metadata/categories.json. src/CommonsConnection.js authenticates to the Wikimedia Commons API with a plain username and password (COMMONS_BOT_USERNAME / COMMONS_BOT_PASSWORD via dotenv) rather than a bot token, then reuses the resulting session cookie and CSRF token for uploads and file description edits.

Observed

License
CC0-1.0 (LICENSE file, and the license field in package.json).
Language
JavaScript, distributed as an ECMAScript module (type: module in package.json).
Packaging
published npm package plus a separately generated icon font (built via svg2ttf and svgicons2svgfont) and static JSON manifests.
Interfaces
no CLI or API; consumed as raw SVG files, a webfont, or JSON manifest data.
Structural
the build clones upstream icon-source repositories from metadata/external_sources.json at build time rather than vendoring them in the repo.
Structural
scripts/check_icons.js enforces a fixed viewBox, single-path output, and forbids stroke or transform attributes on every icon before build.
Funding
GitHub Sponsors and Ko-Fi links declared in package.json, both pointing to a single maintainer account.

Read from README.md, package.json, docs/index.js, metadata/categories.json, metadata/external_sources.json, src/CategoryReader.js, src/ChangelogReader.js, src/CommonsConnection.js, src/ExternalSourceManager.js, src/LegacyAssetManager.js, scripts/build_dist.js, scripts/check_icons.js, CHANGELOG.md, LICENSE.

What it can do

  • Provide map pin icons for cartographic applications

    Icon selection criteria or requirements → Vector map pin icons from library of 1,000+ options

  • Supply standardized versions of Maki icon set

    Request for Maki-style icons → Standardized Maki vector icons optimized for map pins

  • Supply standardized versions of Temaki icon set

    Request for Temaki-style icons → Standardized Temaki vector icons optimized for map pins

  • Supply standardized versions of OSM Carto icon set

    Request for OSM Carto-style icons → Standardized OSM Carto vector icons optimized for map pins

  • Deliver vector icons optimized for small size legibility

    Need for small-scale map markers → Vector icons designed to remain clear at small sizes

  • Provide public domain licensed icons

    Need for copyright-free map icons → Public domain vector icons with no usage restrictions

Tags

iconsmapspublic-domainvectorcartographydesignpinheadmapping

Tech Stack

Node.js

Media

Pinhead Map Icons

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.