Skip to content
ChartForgeX

Topology icon packs

Portable stencil manifests, SVG imports, palettes and validation.

Topology icon packs are portable stencil libraries for ChartForgeX topology diagrams. A pack can be handwritten, generated by a product adapter, or imported from a vendor/community SVG source. The recommended generated layout keeps manifests readable and assets editable:

my-vendor-pack/
  LICENSE
  SOURCE.md
  _reports/
    import-report.json
  networking/
    manifest.json
    svg/
      firewall.svg
      switch.svg
    previews/
      firewall.png
      switch.png

manifest.json is the contract ChartForgeX loads. svg/*.svg is the source artwork the renderer uses after the manifest is loaded. previews/*.png is optional picker/gallery artwork and should be treated as generated output. A host can ship only a manifest with inline SVG for small custom packs, but sidecar SVG files are preferred for large vendor packs because reviews stay readable and designers can edit artwork without touching JSON.

Manifest Artwork

Use artwork.svgPath for pack-local SVG sidecars and artwork.previewPath for optional thumbnails:

{
  "schema": "chartforgex.topology.iconPack",
  "version": 1,
  "id": "acme-network",
  "label": "Acme Network",
  "vendor": "Acme",
  "metadata": {
    "source.url": "https://example.com/acme-icons",
    "source.revision": "2026.05.09",
    "source.license": "MIT"
  },
  "icons": [
    {
      "id": "firewall",
      "label": "Acme Firewall",
      "nodeKind": "Gateway",
      "shape": "Firewall",
      "symbol": "FW",
      "color": "#D92D20",
      "category": "Network",
      "artwork": {
        "svgViewBox": "0 0 48 48",
        "svgPath": "svg/firewall.svg",
        "previewPath": "previews/firewall.png"
      },
      "tags": [ "firewall", "security", "gateway" ]
    }
  ]
}

Asset paths are intentionally relative to the manifest directory. Do not use absolute paths, parent-directory traversal, file URLs, or remote URLs for sidecar artwork. ChartForgeX validates paths before resolving them and loads sidecar SVGs through the same SVG sanitizer used by the importer.

Curated Packs

The repository ships first-party curated packs under assets/topology-icons/ using the same auditable layout. For curated packs, svg/*.svg is the authored source of truth. After changing SVG artwork, use the .NET icon-import tool to refresh derived PNG previews and validation reports:

dotnet run --project .\ChartForgeX.Tools.IconImport\ChartForgeX.Tools.IconImport.csproj -c Release -- --refresh-pack .\assets\topology-icons\chartforgex-ad-network-premium --preview-size 128
  • chartforgex-ad-network-premium covers richer AD/network diagrams: Forest, Domain, Child Domain, Domain Controller, Read-Only Domain Controller, Global Catalog, FSMO roles, AD Site, AD Site Link, Site Link Bridge, Subnet, Bridgehead Server, Replication Connection, KCC, GPO, OU, Trust, DNS Zone, DNS Record, Certificate Authority, Certificate Template, ADFS, LAPS, users, privileged/disabled users, security/distribution/dynamic groups, computers, server computers, domain-joined devices, contacts, service accounts, MSA/gMSA/dMSA, foreign security principals, containers, printers, shares, password settings objects, BitLocker recovery keys, service connection points, AdminSDHolder, schema classes, and Sites and Services.
  • backup covers generic backup and recovery roles such as backup server, proxy, repository, scale-out repository, hardened repository, recovery lab, backup manager, mount server, and WAN accelerator.
  • network-security covers generic network security roles such as firewall, switch, access point, security manager, log analyzer, VPN, SD-WAN, authenticator, MFA token, WAF, mail security, endpoint detection, sandbox, SIEM, cloud security, and security fabric.
  • cloud-productivity covers generic cloud productivity roles such as tenant, cloud identity, conditional access, mail service, content sites, team collaboration, cloud drive, governance, threat protection, device management, low-code platform, subscription, resource group, secret vault, private endpoint, private circuit, and security analytics.
  • network-infrastructure covers device-like physical infrastructure roles such as rack switch, core switch, layer 3 switch, PoE switch, edge router, branch router, wireless AP, mesh AP, firewall appliance, load balancer appliance, VPN gateway, patch panel, fiber uplink, and SFP transceiver.
  • chartforgex-geo-incidents-world-events covers map, route, hazard, incident, response, intelligence-feed, monitoring, and logistics roles for situational-awareness charts.
  • chartforgex-charts-analytics covers visualization, analytics, KPI, dashboard, report, threshold, anomaly, comparison, and drilldown roles.
  • chartforgex-topology-network covers generic topology, connectivity, link, datacenter, service, and edge infrastructure roles.
  • chartforgex-security-risk-certificates covers identity, access, certificate, trust, finding, incident, exposure, compliance, evidence, and forensics roles.
  • chartforgex-data-ownership-intelligence covers datasets, internet intelligence, ownership, entities, correlation, evidence, reporting, integration, and governance roles.
  • chartforgex-people-org-workflow covers people, roles, org structure, lifecycle, goals, approvals, workflow, collaboration, and HR data roles.
  • chartforgex-identity-directory covers directory structures, principals, sites, directory services, access, authentication, certificates, and protocol-flow roles.
  • chartforgex-microsoft-365-collaboration covers generic Microsoft 365-style tenant, messaging, productivity, compliance, integration, and lifecycle-governance roles without vendor logos.

Each curated pack keeps manifest.json, svg/*.svg, generated previews/*.png, SOURCE.md, LICENSE, and _reports/refresh-report.json beside each other. Vendor or product names should only be used for truly branded or imported packs with explicit provenance and license notes; generic first-party artwork should stay under neutral pack ids.

Imported vendor packs are kept under their own provenance folder beside first-party packs. assets/topology-icons/tabler-icons/tabler-icons-outline contains 5,093 MIT-licensed Tabler Icons outline SVGs imported from @tabler/icons 3.44.0, with SOURCE.md, LICENSE, and _reports/import-report.json kept next to the manifest.

Import Tool

ChartForgeX.Tools.IconImport converts a folder tree of SVG files into ChartForgeX-compatible packs. It is tooling only; SkiaSharp and Svg.Skia are not runtime dependencies of ChartForgeX.

dotnet run --project .\ChartForgeX.Tools.IconImport\ChartForgeX.Tools.IconImport.csproj -c Release -- `
  --source C:\Source\VendorStencils `
  --output .\assets\topology-icons\vendor-stencils `
  --source-url https://example.com/vendor/stencils `
  --source-revision 2026.05.09 `
  --source-license MIT `
  --source-license-url https://example.com/vendor/stencils/LICENSE `
  --source-license-path LICENSE `
  --vendor Vendor `
  --pack-id-prefix vendor-stencils `
  --pack-label-prefix "Vendor Stencils" `
  --generate-png `
  --preview-size 128

The importer:

  • creates one generated pack per top-level source category that contains SVG files
  • writes sanitized svg/*.svg sidecars instead of embedding large SVG strings in JSON
  • optionally writes previews/*.png thumbnails for stencil browsers and picker UIs
  • records pack-level provenance such as source URL, source revision, license, and license URL
  • records icon-level provenance such as source path, source file name, and detected viewBox
  • skips unsafe SVGs rather than importing scriptable or externally dependent artwork
  • writes SOURCE.md and _reports/import-report.json so an asset PR can be audited later without placing non-manifest JSON beside pack manifests

Use --help to print the current command-line options.

Review Checklist

For a generated vendor pack PR, verify:

  • the upstream source revision is pinned
  • the source license is copied or clearly linked
  • vendor/product names are used only when the artwork is truly branded or imported from a licensed/provenance-tracked source
  • generic original artwork uses neutral pack ids and labels instead of vendor/product names
  • generated manifests do not contain local machine paths
  • generated manifests use artwork.svgPath instead of large inline artwork.svg payloads
  • svg/*.svg files are sanitized, pack-local, and reviewable
  • previews/*.png files are generated artifacts, not runtime requirements
  • ChartForgeX core builds without adding asset-conversion dependencies

Useful checks:

git diff --check
rg -n '"svg"\s*:' assets\topology-icons\vendor-stencils
rg -n "C:\\|AppData|Temp" assets\topology-icons\vendor-stencils
dotnet build .\ChartForgeX\ChartForgeX.csproj -c Release --no-restore -p:UseSharedCompilation=false -m:1 -nr:false
dotnet build .\ChartForgeX.Tools.IconImport\ChartForgeX.Tools.IconImport.csproj -c Release --no-restore -p:UseSharedCompilation=false -m:1 -nr:false

Edit this page on GitHub