Icon packs

What ships in the repo, what you fetch, what you provide — with the licensing reasoning behind each.

Roughly 2,850 icons across seven packs. They fall into two groups by how you get them, and the split is entirely about redistribution rights.

Committed — redistributed with the repo

PackIconsSourceLicense
cisco973jgraph/drawio stencilsApache-2.0 — attribution: JGraph Ltd — plus one clause
affinity107ecceman/affinityMIT — attribution: ecceman
k8s33kubernetes/communityCC-BY-4.0 — attribution: The Kubernetes Authors
generic5Original Marrow assetsMIT

These work on a fresh clone with no fetch. affinity splits into two styles: affinity/symbol/* (plain line symbols) and affinity/tile/* (blue tiles). Pick one per diagram.

The cisco pack is not Cisco's artwork

It is jgraph's own vector re-creation of Cisco-style topology shapes, shipped with draw.io under Apache-2.0. Copyright protects a specific piece of artwork, not the idea that a router is drawn as a cylinder with four arrows — so redrawing the shape produces a new work, which jgraph licenses freely. That is why Marrow can ship 973 Cisco-style icons that Cisco itself does not license for redistribution.

The pack is named cisco because that is the visual language network engineers already read. It does not imply endorsement, and Apache-2.0 §6 grants no trademark rights.

The cisco pack is not MIT

Fetched — downloaded from the vendor

PackIconsInstallTerms
aws~790marrow icons fetch awsAWS Site Terms
azure~710marrow icons fetch azureMicrosoft terms
gcp~235marrow icons fetch gcpGoogle terms
npm run marrow -- icons fetch              # all three, with a consent prompt
npm run marrow -- icons fetch aws --yes    # one, non-interactive

Each vendor grants use of their icons in architecture diagrams — which is what Marrow's built HTML embeds — but not redistribution of the icon library itself. So the SVGs are gitignored and each user obtains them directly from the vendor's own servers. Vendor URLs live in icon-sources.json; the AWS and Azure links rotate, so fetch discovers the current package by reading the vendor's official page.

GCP's current-style icons live under gcp/current/….

What this means for you

Only the icons a topology actually references are inlined into its output. A diagram with 12 distinct icons carries 12 sprite definitions, not 2,850.

Not available

  • Juniper, Fortinet — publish stencils only in Visio format (.vss/.vssx). Convert via draw.io: import the stencil, export SVG, drop the results into your own pack. Note that converting a vendor's stencil gives you the vendor's artwork in a new format — unlike the cisco pack, which is jgraph's own redrawn shapes. Check the vendor's terms before redistributing the result.
  • Palo Alto — no public icon library.

Manifest format

Every directory under icon-packs/ containing a manifest.json is discovered automatically. The manifest lists ids, keywords, and file paths; keywords come from the SVG filenames, which is why descriptive names matter.

Regenerate after adding files:

npm run gen:icons

Full walkthrough: Adding an icon pack.

Attribution details are in icon-packs/LICENSES.md.