Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,17 @@ Rules:
(`validate:architectures`, `validate:architecture-assets`); the rules they
enforce — and how to fix an `active content` or `remote reference` failure —
are documented in [CONTENT-SECURITY.md](CONTENT-SECURITY.md).
- Architecture `tags` are written with spaces, not underscores (`private cloud`,
not `private_cloud`): they appear as search chips on the catalog. The importer
converts underscores and `validate:architectures` rejects them.
- Every architecture record carries `published` and `updated` dates
(`YYYY-MM-DD`, UTC), validated by `validate:architectures`; the catalog cards
show `updated` and sort on it. For a record from cncf/architecture,
`published` is the `date` in the upstream page's front matter and `updated` is
the date of the last upstream commit touching `content/en/architectures/<id>/`
at the pinned `sourceCommit`; refresh both when the pin moves. For an
issue-sourced record the importer takes them from the issue's `created_at` and
`updated_at`.
- Verify CNCF facts (award winners, TAB scope, architecture counts) against
authoritative sources. Never assert numbers without a source.
- Radar report `summary` fields in `data/radar-reports.json` are hand-written
Expand Down
36 changes: 28 additions & 8 deletions data/architectures/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
"projects": ["Kubernetes", "Helm", "Argo", "Backstage"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/adobe",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2024-10-11",
"updated": "2026-06-04",
"assets": [
"/img/architectures/adobe/Adobe_Wordmark_RGB_Red.svg",
"/img/architectures/adobe/CellBasedArchitecture.webp",
Expand All @@ -31,10 +33,12 @@
"organization": "Allianz Direct",
"summary": "The PE team is internally organised in DDOs - Distributed DevOps, where each ddo owns a Domain. This setup follows the reverse Conway manoeuver where the reference architecture structure dictates the teams setup. The PE team consist of 13 m",
"industries": ["Financial", "Insurance"],
"tags": ["finance", "insurance", "europe", "public_cloud", "aws"],
"tags": ["finance", "insurance", "europe", "public cloud", "aws"],
"projects": ["Kubernetes", "Helm", "Argo"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/allianz",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2024-10-28",
"updated": "2024-11-10",
"assets": [
"/img/architectures/allianz/PEArchitecture.jpg",
"/img/architectures/allianz/PEJourney.jpg",
Expand All @@ -58,6 +62,8 @@
"projects": ["OpenTelemetry", "Prometheus", "Kubernetes"],
"sourceUrl": "https://github.com/cncf/architecture/tree/8af07d62851bc770130a6f942ca7cf9ab20eb784/content/en/architectures/capital-one",
"sourceCommit": "8af07d62851bc770130a6f942ca7cf9ab20eb784",
"published": "2026-10-23",
"updated": "2026-10-23",
"assets": [
"/img/architectures/capital-one/backend-failover.png",
"/img/architectures/capital-one/high-level-architecture.png",
Expand All @@ -72,7 +78,7 @@
"organization": "CERN",
"summary": "Some additional projects outside the CNCF are essential to this deployment. [MLFlow](https://mlflow.org/), a project under the Linux Foundation used for model management and versioning [Nvidia GPU operator](https://github.com/NVIDIA/gpu-ope",
"industries": ["Research", "Public Sector"],
"tags": ["cloud_native", "private_cloud", "kubernetes", "switzerland"],
"tags": ["cloud native", "private cloud", "kubernetes", "switzerland"],
"projects": [
"Argo",
"Bootc",
Expand All @@ -88,6 +94,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/cern-scientific-computing",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-03-09",
"updated": "2026-06-04",
"assets": [
"/img/architectures/cern-scientific-computing/hwlayout.png",
"/img/architectures/cern-scientific-computing/logo.svg",
Expand All @@ -105,6 +113,8 @@
"projects": ["Kubernetes", "Agones"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/colopl",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-07-28",
"updated": "2026-07-28",
"assets": [
"/img/architectures/colopl/agones.png",
"/img/architectures/colopl/agones.svg",
Expand Down Expand Up @@ -137,6 +147,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/flipkart-chaos-engineering",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-06-08",
"updated": "2026-06-15",
"assets": [
"/img/architectures/flipkart-chaos-engineering/layers.png",
"/img/architectures/flipkart-chaos-engineering/logo.png",
Expand All @@ -150,8 +162,8 @@
"summary": "This reference architecture describes SNCF's second generation on-premise Kubernetes platform, built on a bare-metal, open source OpenStack infrastructure to provide container orchestration and scheduling at scale.",
"industries": ["Transport", "Rail", "Software", "Cloud"],
"tags": [
"cloud_native",
"private_cloud",
"cloud native",
"private cloud",
"kubernetes",
"france",
"sovereignty"
Expand All @@ -169,6 +181,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/ffd45de571e34f101725b2a3316d673899458e58/content/en/architectures/sncf-onprem",
"sourceCommit": "ffd45de571e34f101725b2a3316d673899458e58",
"published": "2026-07-03",
"updated": "2026-10-27",
"assets": [
"/img/architectures/sncf-onprem/architecture-detailed.excalidraw.png",
"/img/architectures/sncf-onprem/architecture-global.excalidraw.png",
Expand All @@ -182,13 +196,13 @@
"summary": "Swisscom has built a cloud native telco platform for the end-to-end automation of its 5G standalone core network and cross-domain resource orchestration. The architecture replaces traditional imperative network management (Jenkins pipelines",
"industries": ["Communication", "Telecommunication"],
"tags": [
"cloud_native",
"cloud native",
"telco",
"5g",
"gitops",
"kubernetes",
"switzerland",
"private_cloud"
"private cloud"
],
"projects": [
"Kubernetes",
Expand All @@ -206,6 +220,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/swisscom-cloud-native-telco",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-03-16",
"updated": "2026-06-04",
"assets": [
"/img/architectures/swisscom-cloud-native-telco/swisscom-cloud-native-telco-automation-architecture-overview.png",
"/img/architectures/swisscom-cloud-native-telco/swisscom-cloud-native-telco-automation-layers.svg",
Expand All @@ -220,8 +236,8 @@
"industries": ["Communication", "Telecommunication", "Software", "Cloud"],
"tags": [
"service-delivery",
"cloud_native",
"private_cloud",
"cloud native",
"private cloud",
"kubernetes",
"switzerland"
],
Expand All @@ -241,6 +257,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/8af07d62851bc770130a6f942ca7cf9ab20eb784/content/en/architectures/swisscom-kubernetes-service",
"sourceCommit": "8af07d62851bc770130a6f942ca7cf9ab20eb784",
"published": "2026-03-04",
"updated": "2026-10-27",
"assets": [
"/img/architectures/swisscom-kubernetes-service/kubernetes-service-central-infra.png",
"/img/architectures/swisscom-kubernetes-service/kubernetes-service-ingredients.png",
Expand All @@ -265,6 +283,8 @@
"projects": ["Kubernetes", "Dapr", "KEDA", "OpenTelemetry", "Helm"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/zeiss",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-03-17",
"updated": "2026-06-04",
"assets": [
"/img/architectures/zeiss/solutionArchitecture.png",
"/img/architectures/zeiss/zeiss-logo-rgb.svg"
Expand Down
2 changes: 2 additions & 0 deletions data/architectures/records/adobe.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
"projects": ["Kubernetes", "Helm", "Argo", "Backstage"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/adobe",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2024-10-11",
"updated": "2026-06-04",
"assets": [
"/img/architectures/adobe/Adobe_Wordmark_RGB_Red.svg",
"/img/architectures/adobe/CellBasedArchitecture.webp",
Expand Down
4 changes: 3 additions & 1 deletion data/architectures/records/allianz.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
"organization": "Allianz Direct",
"summary": "The PE team is internally organised in DDOs - Distributed DevOps, where each ddo owns a Domain. This setup follows the reverse Conway manoeuver where the reference architecture structure dictates the teams setup. The PE team consist of 13 m",
"industries": ["Financial", "Insurance"],
"tags": ["finance", "insurance", "europe", "public_cloud", "aws"],
"tags": ["finance", "insurance", "europe", "public cloud", "aws"],
"projects": ["Kubernetes", "Helm", "Argo"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/allianz",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2024-10-28",
"updated": "2024-11-10",
"assets": [
"/img/architectures/allianz/PEArchitecture.jpg",
"/img/architectures/allianz/PEJourney.jpg",
Expand Down
2 changes: 2 additions & 0 deletions data/architectures/records/capital-one.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
"projects": ["OpenTelemetry", "Prometheus", "Kubernetes"],
"sourceUrl": "https://github.com/cncf/architecture/tree/8af07d62851bc770130a6f942ca7cf9ab20eb784/content/en/architectures/capital-one",
"sourceCommit": "8af07d62851bc770130a6f942ca7cf9ab20eb784",
"published": "2026-10-23",
"updated": "2026-10-23",
"assets": [
"/img/architectures/capital-one/backend-failover.png",
"/img/architectures/capital-one/high-level-architecture.png",
Expand Down
4 changes: 3 additions & 1 deletion data/architectures/records/cern-scientific-computing.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"organization": "CERN",
"summary": "Some additional projects outside the CNCF are essential to this deployment. [MLFlow](https://mlflow.org/), a project under the Linux Foundation used for model management and versioning [Nvidia GPU operator](https://github.com/NVIDIA/gpu-ope",
"industries": ["Research", "Public Sector"],
"tags": ["cloud_native", "private_cloud", "kubernetes", "switzerland"],
"tags": ["cloud native", "private cloud", "kubernetes", "switzerland"],
"projects": [
"Argo",
"Bootc",
Expand All @@ -20,6 +20,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/cern-scientific-computing",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-03-09",
"updated": "2026-06-04",
"assets": [
"/img/architectures/cern-scientific-computing/hwlayout.png",
"/img/architectures/cern-scientific-computing/logo.svg",
Expand Down
2 changes: 2 additions & 0 deletions data/architectures/records/colopl.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
"projects": ["Kubernetes", "Agones"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/colopl",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-07-28",
"updated": "2026-07-28",
"assets": [
"/img/architectures/colopl/agones.png",
"/img/architectures/colopl/agones.svg",
Expand Down
2 changes: 2 additions & 0 deletions data/architectures/records/flipkart-chaos-engineering.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/flipkart-chaos-engineering",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-06-08",
"updated": "2026-06-15",
"assets": [
"/img/architectures/flipkart-chaos-engineering/layers.png",
"/img/architectures/flipkart-chaos-engineering/logo.png",
Expand Down
6 changes: 4 additions & 2 deletions data/architectures/records/sncf-onprem.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"summary": "This reference architecture describes SNCF's second generation on-premise Kubernetes platform, built on a bare-metal, open source OpenStack infrastructure to provide container orchestration and scheduling at scale.",
"industries": ["Transport", "Rail", "Software", "Cloud"],
"tags": [
"cloud_native",
"private_cloud",
"cloud native",
"private cloud",
"kubernetes",
"france",
"sovereignty"
Expand All @@ -24,6 +24,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/ffd45de571e34f101725b2a3316d673899458e58/content/en/architectures/sncf-onprem",
"sourceCommit": "ffd45de571e34f101725b2a3316d673899458e58",
"published": "2026-07-03",
"updated": "2026-10-27",
"assets": [
"/img/architectures/sncf-onprem/architecture-detailed.excalidraw.png",
"/img/architectures/sncf-onprem/architecture-global.excalidraw.png",
Expand Down
6 changes: 4 additions & 2 deletions data/architectures/records/swisscom-cloud-native-telco.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
"summary": "Swisscom has built a cloud native telco platform for the end-to-end automation of its 5G standalone core network and cross-domain resource orchestration. The architecture replaces traditional imperative network management (Jenkins pipelines",
"industries": ["Communication", "Telecommunication"],
"tags": [
"cloud_native",
"cloud native",
"telco",
"5g",
"gitops",
"kubernetes",
"switzerland",
"private_cloud"
"private cloud"
],
"projects": [
"Kubernetes",
Expand All @@ -29,6 +29,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/swisscom-cloud-native-telco",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-03-16",
"updated": "2026-06-04",
"assets": [
"/img/architectures/swisscom-cloud-native-telco/swisscom-cloud-native-telco-automation-architecture-overview.png",
"/img/architectures/swisscom-cloud-native-telco/swisscom-cloud-native-telco-automation-layers.svg",
Expand Down
6 changes: 4 additions & 2 deletions data/architectures/records/swisscom-kubernetes-service.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"industries": ["Communication", "Telecommunication", "Software", "Cloud"],
"tags": [
"service-delivery",
"cloud_native",
"private_cloud",
"cloud native",
"private cloud",
"kubernetes",
"switzerland"
],
Expand All @@ -27,6 +27,8 @@
],
"sourceUrl": "https://github.com/cncf/architecture/tree/8af07d62851bc770130a6f942ca7cf9ab20eb784/content/en/architectures/swisscom-kubernetes-service",
"sourceCommit": "8af07d62851bc770130a6f942ca7cf9ab20eb784",
"published": "2026-03-04",
"updated": "2026-10-27",
"assets": [
"/img/architectures/swisscom-kubernetes-service/kubernetes-service-central-infra.png",
"/img/architectures/swisscom-kubernetes-service/kubernetes-service-ingredients.png",
Expand Down
2 changes: 2 additions & 0 deletions data/architectures/records/zeiss.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
"projects": ["Kubernetes", "Dapr", "KEDA", "OpenTelemetry", "Helm"],
"sourceUrl": "https://github.com/cncf/architecture/tree/3ddf917facd0aea9694cc9c12c52e583fd2f86cb/content/en/architectures/zeiss",
"sourceCommit": "3ddf917facd0aea9694cc9c12c52e583fd2f86cb",
"published": "2026-03-17",
"updated": "2026-06-04",
"assets": [
"/img/architectures/zeiss/solutionArchitecture.png",
"/img/architectures/zeiss/zeiss-logo-rgb.svg"
Expand Down
5 changes: 3 additions & 2 deletions docs/architectures/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ sidebar_position: 1
# Reference architectures

A growing catalog of real-world cloud native architectures contributed by CNCF
end users. Browse by organization, industry, and the CNCF projects used in each
architecture.
end users. Browse by organization, industry, tag, and the CNCF projects used in
each architecture, and sort alphabetically or by the date each architecture was
last updated.

Want to add yours? [Submit a reference architecture](/architectures/submit)
explains why end users share their architectures, what your organization gets
Expand Down
22 changes: 21 additions & 1 deletion scripts/import-architecture-issue.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,23 @@ async function main() {
);
}

// Issue-sourced records take their catalog dates from the issue itself:
// published when it was opened, updated when it was last edited.
const published = utcDate(issue.created_at);
if (!published) {
throw new Error('Issue payload is missing a valid created_at timestamp');
}
const updated = utcDate(issue.updated_at) ?? published;

const id = uniqueId(slugify(orgName), issue.number);
const sourceUrl =
issue.html_url ?? `https://github.com/cncf/endusers/issues/${issue.number}`;

const industries = splitList(field(fields, 'Industries'));
const tags = splitList(field(fields, 'Tags'));
// Tags are shown as search chips, so they are stored as readable words.
const tags = splitList(field(fields, 'Tags')).map((tag) =>
tag.replaceAll('_', ' '),
);
const projects = parseProjects(field(fields, 'Relevant CNCF Projects'));

await mirrorArtworkUrls(
Expand Down Expand Up @@ -133,6 +144,8 @@ async function main() {
projects: projects.map((project) => project.name),
sourceUrl,
sourceIssue: issue.number,
published,
updated,
assets: [],
};

Expand Down Expand Up @@ -165,6 +178,13 @@ async function main() {
}
}

function utcDate(timestamp) {
const parsed = new Date(timestamp ?? '');
return Number.isNaN(parsed.getTime())
? null
: parsed.toISOString().slice(0, 10);
}

function readArg(name) {
const index = process.argv.indexOf(name);
return index === -1 ? undefined : process.argv[index + 1];
Expand Down
Loading
Loading