Real World PlantUML

PlantUML is a useful tool for drawing a UML in a plain text.
With this tool, you can write a wide variety of UMLs, from a simple diagram to a complex one.

There are many websites teaching you how to write a PlantUML, but when you start writing you might think,

  • I can’t remember the syntax… :(
  • How can I write a more complex diagram?
  • Is there any template to start writing, not from a scratch?

To answer these questions, I’ve created a website called Real World PlantUML.

As you can see, this website shows lots of UMLs with rendered images like a catalog. All of UMLs have been gathered from GitHub public repositories.

Real World PlantUML

Each UML is categorized into 6 categories, and you can filter UMLs by each category.

Filter by class diagram

If you’re curious about a specific component like “database”, the search box helps you. Just entering the word “database” into the search box, diagrams containing database are searched.

Search results of “database”

And when you click a diagram, the source code is showed up so that you can use it for references or a template to start writing your UML.

Source code of the UML

Technical details

The website is built on top of Google App Engine with 4 microservices,

  1. web (Go Standard Env): user facing web application
  2. indexer (Go Standard Env): worker for building UML indexes
  3. syntax_checker (Java Flexible Env): web app for checking PlantUML syntax and detecting a diagram type
  4. renderer (Java Flexible Env): PlantUML rendering server.

I make sure that App Engine Flexible Environment is the best choice for rendering a PlantUML because it requires Graphviz to be installed for generating an image. While App Engine Standard Env can’t install it, Flexible Env can do because it‘s able to run any application, as long as the app is packaged into a Docker container.

The following diagram shows the overall architecture.

Overall Architecture

Finally, the source code of the website is available on GitHub, so if you find a bug, please open a issue. Of course I welcome pull requests for new features :)

Enjoy writing a PlantUML!