Pinhead Map Icons
pinhead.ink- Category
- Developer Tools
- Rank
- No. 843Tools index
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Design & Media
- Interfaces
- Web
- Builder
- waysidemapping
- 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
Tech Stack
Media

Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.