Adding an icon pack
Drop in your own SVGs — directory layout, manifest generation, naming, and licensing rules.
Packs are drop-in. Every directory under icon-packs/ containing a
manifest.json is discovered automatically — no registration step.
This is how you add your company's own device artwork, or a vendor library you converted yourself.
Lay out the SVGs
The directory under svg/ becomes the category; the filename becomes the
name and the search keywords.
Filenames are your search index. edge-router.svg is findable;
rtr_v2_final.svg is not. Use descriptive kebab-case or plain words — this is
the single highest-leverage decision in the whole process.
Generate the manifest
Arguments are <packDir> <packName> <title> [svgSubdir]. The subdirectory
defaults to svg.
The generated manifest looks like:
Wire it into the regeneration script
Add the pack to gen:icons in the root package.json so it's rebuilt with the
others:
Then:
Verify
Use the id in a topology and validate.
Writing SVGs that behave
- Use
fill="currentColor"where you want the shape to follow the theme. Hard-coded colors stay fixed in both light and dark, which is right for a logo and wrong for a device glyph. - Keep a square-ish viewBox. Icons are drawn into a chip; extreme aspect ratios get letterboxed.
- No embedded raster, no external references. Anything pointing outside the document breaks the offline guarantee and is stripped.
- Strip editor metadata. Illustrator and Figma exports carry a lot of dead weight; every byte is inlined into every diagram that uses the icon.
Licensing
Do not commit AWS, Azure, or GCP SVGs. Those vendors permit using their icons in diagrams but not redistributing the libraries, which is why they are fetched per-clone — see ADR-0005.
The cisco pack is committed, because it is not Cisco's artwork: it is
jgraph's Apache-2.0 draw.io stencils. It carries an Atlassian-marketplace
restriction that the rest of Marrow does not — see the
amendment.
If you're contributing a pack upstream rather than keeping it local, it must be
under a permissive or attributed license, with the attribution recorded in
icon-packs/LICENSES.md.
Private packs in your own fork are your call.
Converting vendor stencils
Juniper and Fortinet publish Visio stencils (.vss, .vssx) only.
draw.io reads them: import the stencil, then export as SVG. The result needs
the cleanup above — the exports are verbose and often carry hard-coded colors.
Palo Alto has no public icon library.