Skip to content

diagrams-js

A TypeScript port of the diagrams Python library for drawing cloud system architecture diagrams as code

diagrams-js/provider-nodes

core
168 linesSource

Using 2000+ pre-built node classes from 17+ cloud providers. Import from diagrams-js/{provider}/{category} with auto-generated icons. Providers: AWS, Azure, GCP, Kubernetes, On-premises, AlibabaCloud, DigitalOcean, Elastic, Firebase, Generic, GIS, IBM, OCI, OpenStack, Outscale, Programming, SaaS, C4.

This skill builds on diagrams-js/getting-started. Read it first for foundational concepts.

diagrams-js — Provider Nodes

Use 2000+ pre-built node classes representing cloud services and infrastructure components. Auto-generated icons embedded in output.

Setup

ts
import { Diagram } from "diagrams-js";
import { EC2, Lambda } from "diagrams-js/aws/compute";
import { RDS } from "diagrams-js/aws/database";

const diagram = Diagram("AWS Architecture");

const web = diagram.add(EC2("Web Server"));
const api = diagram.add(Lambda("API"));
const db = diagram.add(RDS("Database"));

web.to(api).to(db);

const svg = await diagram.render();

Core Patterns

AWS Provider

ts
import { EC2, Lambda, ECS } from "diagrams-js/aws/compute";
import { RDS, DynamoDB } from "diagrams-js/aws/database";
import { S3, EBS } from "diagrams-js/aws/storage";
import { ALB, Route53, VPC } from "diagrams-js/aws/network";

const diagram = Diagram("AWS Stack");

const dns = diagram.add(Route53("DNS"));
const lb = diagram.add(ALB("Load Balancer"));
const web = diagram.add(EC2("Web Server"));
const db = diagram.add(RDS("Database"));
const cache = diagram.add(DynamoDB("Cache"));
const storage = diagram.add(S3("Assets"));

dns.to(lb).to(web);
web.to([db, cache, storage]);

Kubernetes Provider

ts
import { Pod, Deployment, StatefulSet } from "diagrams-js/k8s/compute";
import { Service, Ingress } from "diagrams-js/k8s/network";
import { PV, PVC, StorageClass } from "diagrams-js/k8s/storage";

const diagram = Diagram("K8s Architecture");

const ingress = diagram.add(Ingress("domain.com"));
const svc = diagram.add(Service("svc"));
const pod = diagram.add(Pod("app"));
const pvc = diagram.add(PVC("storage"));

ingress.to(svc).to(pod).to(pvc);

GCP Provider

ts
import { GCE, GKE, AppEngine } from "diagrams-js/gcp/compute";
import { CloudSQL } from "diagrams-js/gcp/database";
import { CloudStorage } from "diagrams-js/gcp/storage";

const diagram = Diagram("GCP Stack");

const app = diagram.add(AppEngine("App"));
const db = diagram.add(CloudSQL("Database"));
const storage = diagram.add(CloudStorage("Storage"));

app.to([db, storage]);

Azure Provider

ts
import { VM, FunctionApps } from "diagrams-js/azure/compute";
import { SQLDatabase } from "diagrams-js/azure/databases";
import { BlobStorage } from "diagrams-js/azure/storage";

const diagram = Diagram("Azure Stack");

const api = diagram.add(FunctionApps("API"));
const db = diagram.add(SQLDatabase("Database"));
const files = diagram.add(BlobStorage("Files"));

api.to([db, files]);

Common Mistakes

HIGH Importing from wrong provider path

Wrong:

ts
import { EC2 } from "diagrams-js/aws"; // Missing category

Correct:

ts
import { EC2 } from "diagrams-js/aws/compute";

Provider paths are specific: diagrams-js/{provider}/{category}. Categories: compute, database, storage, network, etc.

Source: migration guide and API reference

CRITICAL Assuming nodes auto-register with diagram

Wrong:

ts
const web = EC2("Web Server"); // Created but not added!
const db = diagram.add(RDS("Database"));
web.to(db); // Error: Node is not registered with a diagram

Correct:

ts
const web = diagram.add(EC2("Web Server"));
const db = diagram.add(RDS("Database"));
web.to(db); // Works

Unlike Python diagrams, TypeScript requires explicit diagram.add() for each node. The provider function returns a node instance that must be registered.

Source: migration guide from Python

References

See also

  • diagrams-js/node-connections — Connecting nodes with edges
  • diagrams-js/clusters-grouping — Organizing nodes into groups
  • diagrams-js/custom-nodes — Using external icons