C4 Integration Creation
Critical Requirements
- •ALWAYS read
likec4/model.c4andlikec4/relations.c4before creating integrations - •Every integration needs: external system + integration element + syncs relations
- •ALWAYS validate with
npm run validateafter changes
Overview
The Integration Layer is an ACL (Anti-Corruption Layer) that abstracts external providers from the internal data model.
code
Blueprint ←[dataSource]← Integration ←[syncs]← External System
Current Integrations
| Integration | Variable | External System | Blueprints Fed |
|---|---|---|---|
| GitHub Connector | intGitHub | github | repository, pullRequest, branch, ciPipeline, pipelineRun, artifact, containerImage, securityScorecard, securityAlert |
| OCI Connector | intOCI | oci | ociResource, resource |
| Azure Connector | intAzure | azure | azureResource, resource |
| Entra ID Connector | intEntraId | entraId | _user, identity, group |
| SonarQube Connector | intSonarQube | sonarqube | codeQuality, testCoverage |
| Portal Native | intPortal | (internal) | technologyAsset, domain, system, api, _team, template, tier, policy, etc. |
| Unleash Connector | intUnleash | unleash | featureFlag, flagStrategy |
| Liquibase Connector | intLiquibase | liquibase | databaseSchema, migration |
| LinearB Connector | intLinearB | linearb | engineeringMetrics |
| Copilot Metrics | intCopilotMetrics | github | copilotMetrics |
Complete Steps to Create a New Integration
Step 1: Add External System in model.c4
c4
datadog = externalSystem 'Datadog' {
description 'Monitoring and observability platform'
icon tech:datadog
style {
color slate
}
}
Step 2: Add Integration in model.c4
Inside the integrationLayer capability:
c4
intDatadog = integration 'Datadog Connector' {
description 'Syncs monitoring metrics, alerts, and dashboards from Datadog'
icon tech:datadog
style {
color gray
border dashed
}
}
Rules:
- •Variable name:
intCamelCase - •Style:
color gray,border dashed
Step 3: Add Relations in relations.c4
c4
// Integration ↔ External System
idp.integrationLayer.intDatadog -[syncs]-> datadog 'syncs from Datadog API' { #sync }
// Integration → Blueprints
idp.integrationLayer.intDatadog -[syncs]-> idp.starObservability.metric 'syncs metrics' { #sync }
Step 4: Add dataSource in Blueprint Files
c4
metric -[dataSource]-> idp.integrationLayer.intDatadog 'synced from Datadog' { #sync }
Step 5: Validate
bash
npm run validate npm test
Checklist
- • External system defined in
model.c4 - • Integration defined in
model.c4insideintegrationLayer - • Integration → External System
syncsinrelations.c4 - • Integration → Blueprint
syncsinrelations.c4 - • Blueprint → Integration
dataSourcein blueprint file - • Variable follows
intCamelCasenaming - • Style:
color gray,border dashed - •
npm run validatepasses
Workflow
- •Read
likec4/model.c4 - •Read
likec4/relations.c4 - •Create external system in
model.c4(if needed) - •Create integration in
model.c4 - •Add syncs relations in
relations.c4 - •Add dataSource in blueprint file(s)
- •Validate with
npm run validate