All pages

Library reference

The palette of ready-made nodes in the studio's Library tab. Thirteen read-only packs ship bundled; your own entries merge over them.

For how to use it, see Use the icon library.

Bundled packs

1,882 entries in 78 categories, rendered in this order:

Pack Entries Categories Assets
C4 31 5 /library/shapes/person.svg (the rest are coloured boxes)
Activity 10 1 none — renderer-drawn glyphs, not images
Second-order thinking 4 1 none — renderer-drawn glyphs, not images
Fishbone 3 1 none — renderer-drawn looks, not images
Threat model 4 1 none — renderer-drawn shapes, not images
Deployment 16 1 none — renderer-drawn shapes, not images
Plan 4 1 none — renderer-drawn shapes, not images
Data 1 1 none — it seeds columns, not an image
Shapes 3 1 /library/shapes/ — tintable silhouette masks
Tech 98 10 /library/tech/
Kubernetes 39 1 /library/k8s/
AWS 772 26 /library/aws/, /library/aws-resources/, /library/aws-groups/, /library/aws-categories/
Azure 636 25 /library/azure/
Google Cloud 261 3 /library/gcp/, /library/gcp-products/, /library/gcp-categories/

C4

One category per C4 diagram level. Every entry carries a c4-* node type that the renderer styles.

Category Entries
C4 · Context Person, External Person, Software System, External Software System, Enterprise Boundary, System Boundary, Group
C4 · Container Container, External Container, Web Application, Single-Page Application, Mobile App, Desktop App, API Application, Serverless Function, Console / CLI, Database, Blob Store, Search Index, Message Bus, Container Boundary
C4 · Component Component, External Component, Component Database, Component Queue
C4 · Deployment Deployment Node, Infrastructure Node, Container Instance
C4 · Code Class, Interface, Enumeration

Reference palette: person #08427b, external person #686868, system #1168bd, external system #999999, container #438dd5, external container #b3b3b3, component #85bbf0, external component #cccccc, boundaries #444444, group #888888, deployment node #666666.

Dynamic diagrams reuse whichever level's elements they describe — what makes them dynamic is numbered relation labels, authored on the connector, not a separate stencil.

Activity

One category, UML · Activity — the flow elements of the activity diagram stencil: Activity frame, Action, Decision, Fork/join bar, Start, End, Send signal, Receive signal, Object, Note. Every entry carries an activity-* node type that the renderer draws as a glyph (diamond, bar, dot, …), not an image.

Lanes and regions are not here — they are structural (a lane must live inside a frame, a region inside a lane) and are created from the frame's own panel, which parents them correctly in one batch, rather than dropped loose from the palette.

Second-order thinking

One category, Second-order thinking — the four stencils behind an and-then-what tree: Decision, Good consequence, Bad consequence, Neutral consequence. Valence is the node's type (so-decision, so-consequence-positive, so-consequence-negative, so-consequence-neutral), not a separate field, so turning a consequence from good to bad is a type change in the node panel. Every entry carries an so-* node type that the renderer draws as a glyph, not an image.

Fishbone

One category, Fishbone — the three stencils behind a fishbone diagram: Effect, Category, Cause. Every entry carries an fb-* node type (fb-effect, fb-category, fb-cause) that the renderer draws as part of the fish, not an image. A dropped Cause waits in the stray row under the fish until it is connected to a bone.

Threat model

One category, Threat model — the four STRIDE data-flow stencils behind a threat model: External entity, Process, Data store, Trust boundary. Every entry carries a tm-* node type (tm-entity, tm-process, tm-store, tm-boundary) the renderer draws itself — a box, an ellipse, the open-ended store glyph, a red dashed outline — not an image. dfd, stride and threat are keywords on all four, so any of them finds the set.

A dropped Trust boundary is an empty box: it holds elements through ordinary containment, added with the node panel's Memberships picker.

Deployment

One category, Deployment — the sixteen stencils behind a deployment diagram: the zones (Environment, Region, Availability zone, Network, Public subnet, Private subnet, Cluster, Host) and what runs in them (Service, Database, Queue, Storage, Load balancer, Gateway, Firewall, External network). Every entry carries a deploy-* node type the renderer draws itself, not an image. deployment and infrastructure are keywords on all sixteen. A dropped zone other than Host is an empty 320 × 220 box; add its contents with the node panel's Memberships picker.

Plan

One category, Plan — the four stencils behind a plan: Zone, Event, Person, Team. Zone and Event carry plan-zone/plan-event node types the renderer draws as a date bar and a diamond, not images; a zone carries no size of its own — the plan layout sizes it from its dates, and a dropped one seeds two weeks wide at the date under the pointer (a zone dropped inside another starts where its parent does). Person and Team carry the ordinary person/team types, the same pills used elsewhere — a team is an actor exactly like a person, for a role that belongs to a group. plan is a keyword on all four, so it finds the set.

Data

One entry, Table — a db-table node seeded with a single id int PK column, ready to edit in place. The only bundled entry whose template carries columns rather than an image. See Draw an ER diagram.

Shapes

Person, Users, Internet — hand-drawn silhouette SVGs rendered as tintable masks (template.shape, not template.image), for the generic marks cloud diagrams hang off the edge of the frame. The person silhouette is the same one the C4 person entries use.

Tech

Vendor logos no cloud icon set covers, normalised onto a common tile, in ten categories under a Tech group:

Category Entries
Messaging & processing Apache Kafka, RabbitMQ, NATS, Apache Pulsar, Temporal, Celery, Apache Flink, Apache Spark, Apache Airflow
Databases & storage PostgreSQL, MySQL, MariaDB, Oracle Database, SQLite, MongoDB, Apache Cassandra, Redis, Memcached, Neo4j, InfluxDB, Elasticsearch, OpenSearch, ClickHouse, StarRocks, Snowflake, Databricks, DuckDB, Supabase, Firebase, etcd, MinIO
Containers & infrastructure Kubernetes, Helm, Docker, Podman, Terraform, Pulumi, Ansible, Vault, Consul, Istio, Envoy, Cilium, Argo, Flux, NGINX, Caddy, Kong, gRPC, GraphQL
Observability Grafana, Prometheus, OpenTelemetry, Jaeger, Kibana, Datadog, New Relic, Splunk, Sentry, PagerDuty
Source, CI & planning GitHub, GitHub Actions, GitLab, Bitbucket, Jenkins, CircleCI, Jira, Confluence, Jupyter
Hosting & edge Cloudflare, Fastly, Akamai, Vercel, Netlify, Heroku, DigitalOcean, Hetzner
Identity Auth0, Okta, Microsoft Entra ID, Keycloak
SaaS Stripe, Salesforce, Shopify, Twilio, SendGrid, Mailgun, Slack, Microsoft Teams, Discord, Zapier
AI OpenAI, Anthropic, Hugging Face
Runtimes Python, Node.js, Go, .NET

Kubernetes

All 39 labeled Kubernetes community icons, the blue heptagons k8s diagrams are drawn with: workloads (Pod, Deployment, ReplicaSet, StatefulSet, DaemonSet, Job, CronJob, HPA), networking (Service, Ingress, Endpoints, NetworkPolicy), config and storage (ConfigMap, Secret, PV, PVC, StorageClass, Volume), policy and access (Namespace, quotas, RBAC, CRD) and cluster components (Node, control plane, API server, etcd, scheduler, controller managers, kubelet, kube-proxy). Keywords carry the kubectl short names (sts, pvc, hpa, …). Unlike the Tech logos they ship bare (no white tile), since they carry their own chrome.

AWS

The complete official AWS Architecture Icons release (2026-07-31):

Family Count Directory Placed size
Architecture service icons 303 /library/aws/ 64×64
Resource icons 419 /library/aws-resources/ 48×48
Group / boundary icons 15 /library/aws-groups/ 64×64
Category tiles 26 /library/aws-categories/ 64×64

Categories mirror AWS's own taxonomy — AWS · Compute, AWS · Storage, AWS · Databases, and so on — plus AWS · Groups and AWS · Category icons.

AWS · Groups opens with nine hand-curated boundary containers (AWS Cloud, AWS Account, Region, Availability Zone, VPC, Public/Private Subnet, Auto Scaling Group, Generic Group). Each places a node with an aws-* group type the renderer styles as the official stencil draws it — corner badge, dashed or solid outline, tint-filled subnets — with the authentic accent color baked in. Add children (the node panel's containment control) and it becomes the styled boundary box; the raw badge icons follow in the same category for when you want just the glyph.

Six legacy file names (lambda.svg, s3.svg, sns.svg, dynamodb.svg, api-gateway.svg, cloudwatch.svg) are kept as copies of the real icons so diagrams authored against the old placeholder pack keep resolving. They are not library entries.

Azure

The complete official Azure Public Service Icons release (V24): 636 icons at 64×64 in /library/azure/, in Microsoft's own 25 categories — Compute, Containers, Databases, Networking, and so on — nested under an Azure group. Microsoft files some icons under both a specific category and General or Other; they appear once, in the specific one. Common services carry the abbreviations people type (aks, vnet, blob, apim, vmss).

Google Cloud

Google's three official icon archives, nested under a Google Cloud group:

Family Count Directory
Core products (the 2025 style) 19 /library/gcp/
Products (console style) 216 /library/gcp-products/
Category icons 26 /library/gcp-categories/

The console-style set is Google's older icon system, but it is still the only per-product icon for most services (Pub/Sub, Cloud Functions, Memorystore, …). Where a product has both, both are offered.

Entry shape

interface LibraryEntry {
  id: string;
  category: string;      // must match a declared category id
  name: string;          // display, and the primary search term
  keywords?: string[];   // extra search terms
  template: {            // the fields stamped onto a placed node
    type?: string;
    color?: string;
    image?: string;
    shape?: string;
    width?: number;
    height?: number;
    columns?: Column[];  // db-table seeds only
  };
}

interface LibraryCategory {
  id: string;
  name: string;
  group?: string;        // panel header it nests under ('AWS', 'Azure', 'Tech', …)
  builtin?: boolean;     // bundled packs — not user-deletable
}

Placing an entry bakes type, color, image and shape onto a new node, then applies width/height to the layout overlay. The model keeps no reference back to the entry.

Apply to … replaces all four presentation fields on the selected node — fields the card omits are cleared, so no stale look survives.

Case-insensitive substring over the entry's name, its keywords, and its category's display name. No fuzzy matching, no ranking; results come back in manifest order.

Keywords carry the abbreviations official names omit, so s3, sqs, eks, iam, msk, vpc and kms all find the right icon.

Panel behaviour

  • Categories are collapsible. A section with more than 16 entries starts collapsed; smaller ones start open.
  • Searching expands every section that matched, unless you collapsed it yourself.
  • The count beside a category name is how many entries currently match.
  • While searching, empty builtin sections are hidden; empty user categories stay visible so you can still import into them.

Your own entries

Stored in .diagrams/src/library.json, merged over the bundled packs on load. Bundled entries win on an id collision, and user entries whose category does not resolve are dropped.

Imported image bytes are content-hashed into .diagrams/src/assets/ (max 5 MB; png, jpeg, svg, webp, gif). The entry stores only the file name.

Asset ref rules

A template.image or template.shape must match one of:

  • ^[a-z0-9]+\.(png|jpe?g|svg|webp|gif)$ — an imported, content-hashed asset
  • ^/library/[a-z0-9-]+/[a-z0-9-]+\.(png|jpe?g|svg|webp|gif)$ — a bundled asset

Exactly one directory level, lowercase kebab-case. A nested path such as /library/aws/compute/ec2.svg fails validation.

Regenerating the bundled packs

Assets and manifests are committed; nothing fetches at build time.

node scripts/build-aws-pack.mjs     # downloads the pinned AWS release
node scripts/build-aws-pack.mjs --src <dir>   # or build from an extracted package
node scripts/build-tech-pack.mjs    # refetches the vendor logos and Kubernetes icons

Bump RELEASE and RELEASE_URL in scripts/build-aws-pack.mjs for a newer AWS quarterly release. Extra search aliases live in scripts/aws-aliases.mjs.

See also

View this page on GitHub