With PlantUML we can include external files in our definition with the !include directive. We specify the file name and the content is included in our PlantUML definition. The included file can also have multiple @startuml ... @enduml sections and we can refer to individual sections with the !include directive. We must append to the include file name an exclamation mark (!) followed by either a number or identifier. If we use a number we specify which section we want to include, where section are numbered starting from 0. So to get the second section from a file commons.puml we would write !include commons.puml!1. Alternatively we can use identifiers in the include file. We append to @startuml an identifier as (id=idValue). Then from the definition that is including the file we refer to the identifier after an exclamation mark (!). If our included file commons.puml has a section with id user then we would include it as !include commons.puml!user.

In the following example PlantUML definition we define the file to be included. We have two sections with @startuml ... @enduml which both have an identifier:

' File: commons.puml

' section with id user to define user actor
actor "Application User" as User

' section with id mail to define mail component
[Mail server] as Mail <<Mail>> #ffcc66

Next we write a definition where we include commons.puml using a section number and section identifier:

' File: sample.puml

' Include first section (0-based index) of commons.puml
!include commons.puml!0

' Include section with id mail of commons.puml
!include commons.puml!mail

[Sample Application] <<Software System>> as SampleApp

User --> SampleApp
SampleApp --> Mail


Let's generate a diagram and look at the result where we see our user and mail components from the included file:

Written with PlantUML 8086.

Original blog post