Image without description
  • Jacco Meijer
  • |
  • Apr 18, 2025

Visualizing IT Architecture in three languages, UML, C4 and ArchiMate

What are the differences and what are these languages most used for?

IT Architecture languages

UML, C4 and ArchiMate all three can be used for visualizing IT Architecture. This does however not mean that they are equal. Each of the languages was designed for a specific need.

UML originated in 1994 because there was a need to describe object-oriented software. In 2006 the need for more structure than the UML arrows and boxes resulted in the C4 language.

In 2002 ArchiMate development started because of the need for a language to describe an enterprise.

From an ArchiMate perspective C4 defines a number of viewpoints.

UML

UML was designed to be a general-purpose modeling language for visualizing system design. It provides a language for many types of diagrams including behavior diagrams, interaction diagrams, and structure diagrams.

UML is said to be decreasing in popularity (source: Google Trends) but the language being around for more than 30 years and it's general-purpose nature make that it's use is still widespread.

Commonly used

As mentioned, the use of UML is widespread. Activity Diagrams are well known for visualizing system flows. Within software development these diagrams are often used:

  • use case diagrams, for interactions between actors;
  • class diagrams, for class relationships, attributes and methods;
  • sequence diagrams, for a sequence of messages between participants.
Image without descriptionImage without descriptionImage without description

C4

The C4 language was designed to be easy to learn and developer friendly. It reaches that goal by focussing on clarity and simplicity.

From the C4 documentation:

A software system is made up of one or more containers (applications and data stores), each of which contains one or more components, which in turn are implemented by one or more code elements (classes, interfaces, objects, functions, etc).

The four emphasized words in this one sentence correspond to the four static structure diagrams that define the core of C4.

  1. (system) context diagram
  2. container diagram
  3. component diagram
  4. code diagram

Additionally there's three more diagrams:

  1. system landscape diagram
  2. dynamic diagram
  3. deployment diagram

But that's it. Simple to use and easy to learn.

A few examples of C4 elements

Image without description

Commonly used

C4 being specifically designed for software architecture it is mainly used by solution and software architects. Security and enterprise architects tend to choose for ArchiMate instead because of the limited C4 set of elements.

ArchiMate

From the three languages UML defines more than 100 elements. C4 is a lot simpler with no more than 10 elements. The 3.1 Specification of ArchiMate counts around 60 elements.

One of the design goals was to make ArchiMate 'as small as possible'. As in, the goal was not to cover every possible edge case.

[more-content-needed]

C4 compared to ArchiMate

C4 can be seen as a subset of ArchiMate, the C4 diagrams can be expressed with the Archimage viewpoint concept. Depending on how you look at it, the C4 elements can be mapped in a couple of ways to ArchiMate elements.

System

The C4 'System' element is described as something that delivers value to users. ArchiMate defines a 'Value Stream' element which describes behavior on the strategy layer. But since C4 also defines a 'System' as something a single software development team is building, the 'Application Function' or 'Application component' element would be a better fit.

Container

The C4 'Container' element is describes as something that needs to be running for the system to work. The ArchiMate 'Application Component' element could be used to express this.

Component

The C4 documentation states that a 'Component' is a "hugely overloaded term". It's true, the word component can be used in many different ways. C4 defines it as 'grouping of related functionality encapsulated behind a well-defined interface'. This could be an ArchiMate 'Application Component' or 'Application Service' element. The 'well-defined interface' can be modelled separately in ArchiMate by using the 'Application Interface' element.

Code

The C4 element 'Code' is hard to model in ArchiMate. The 'Application Component' element can be used to express a software library and the 'Data Object' element can be used, but concepts like 'classes', 'attributes' and 'methods' are not available. The 'Application Component' element can be used for this if you really have to, but UML and C4 are a much better suited for this.

Application Component

Simply put, all C4 elements can be expressed by ArchiMate 'Application Component' elements. It makes clear how C4 and ArchiMate differ. C4 defines four sizes of 'Application Components' whereas ArchiMate has nine different 'Application' elements like 'Interface', 'Function' and 'Service' that can be used to add more detail.

Besides the 'Application' layer, ArchiMate defines five other layers and uses Motivation elements for modelling motivations.

Structure as code

All three languages have code equivalents. PlantUml being the most popular. It can be extended to support the ArchiMate and C4 languages by using macro libraries.


Other posts

Image without description

Visualizing IT Architecture in three languages, UML, C4 and ArchiMate

What are the differences and what are these languages most used for?

Image without description

OAuth 2.0 and OpenID Connect Sequence Diagrams

Technical specs can be hard to read. While still highly technical, the UML Sequence Diagrams provided in this blog are a lot easier to understand.

Image without description

UI Library with MDX documentation

Using the simple Render JSX plugin for Esbuild this post shows how to setup a simple UI library.

Image without description

Render JSX plugin for Esbuild

Transform Esbuild generated JSX bundles to HTML pages.

Image without description

Esbuild as a static site generator for MDX

Static site generators gain popularity. This blog is about using Esbuild as a static site generator for MDX.

Image without description

11ty and Github pages

Simplifying the Contentful-Gatsby-Netlfy trio.

Image without description

OWASP and CISSP

OWASP recommendations from the independent information security certification CISSP.

Image without description

NPM7 and @npmcli/arborist

@npmcli/arborist is a powerful library that handles the new NPM 7 workspaces. This blog is about a simple make tool that uses the library.

Image without description

Comparing React app, Nextjs and Gatsby

A new React project starts with a React toolchain. Main tools in the chains are SSR, React server components and GraphQL.

Image without description

Versioning strategy for NPM modules

It is important to be able to bump the version of a NPM package without side effects.

Image without description

React component themes and CSS variables

Creating React components with flexible themes by using CSS variables.

Image without description

Content modeling with variants

The efficiency of a variant field in a content model.

Image without description

Documentation

Documenting a software project is challenging. Here's a few simple guidelines that help a team writing clear documentation.

Image without description

Javascript history

In 1986 David Ungar and Randall B. Smith developed Self at Xerox PARC. Inspired by Java, Scheme and Self Brendan Eich created Javascript in 1995.

Image without description

On Javascript transpilers, bundlers and modules

There's Javascript transpilers, modules, bundles and bundlers. This is a brief overview of all of these.

Image without description

Agile Scrum

The Agile Scrum framework is flexible enough to be used in many different ways. Here's one way of working.

Image without description

What happened to Wheelroom?

Founded in 2018. Started to fly in 2020 and abandoned in 2021. What happened?

Image without description

Contentful, Netlify and Gatsby four years later

What did we learn from using Contentful for four years?

Image without description

Typescript interface for React UI components

How to define an interface for React UI components that prevents breaking changes.

Image without description

Naming React components

What's in a name? A clear naming strategy helps developers communicate. Most devs rather spend time writing component code than wasting time on a good component name.