Drawing Sequence Diagrams

PlantUML. http://plantuml.sourceforge.net/sequence.html

PlantUML is used to draw UML diagram, using a simple and human readable text description.

The generated images can then be used without any reference to the GPL/LGPL/ASL/EPL/MIT license. It is not even necessary to stipulate that they have been generated with PlantUML, although this will be appreciate by PlantUML team.

In my experience it has been easy to use and it produces nice looking diagrams. I can't recommend it more highly.

Output file types:

-tsvg     To generate images using SVG format
-teps     To generate images using EPS format
-txmi     To generate XMI file for class diagram
-thtml    To generate HTML files for class diagram
-ttxt     To generate images with ASCII art
-tutxt    To generate images with ASCII art using Unicode characters

Here is an example showing how to create a simple sequence diagram. enter image description here

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

You can also create more detailed diagrams by using lifeline activation and destruction: enter image description here

@startuml
participant User

User -> A: DoWork
activate A

A -> B: << createRequest >>
activate B

B -> C: DoWork
activate C
C --> B: WorkDone
destroy C

B --> A: RequestCreated
deactivate B

A -> User: Done
deactivate A

@enduml

For sequence diagrams, you may take a look at websequencediagrams - it creates nice looking diagrams and has a lot of functionalities (examples page). It's not a command line utility, but it does have its web-API.

ditaa creates nice looking diagrams from ascii source. Written in java, it can be called on the command line to convert ascii text to diagrams.


The best software I've found and I usually use to make sequence diagrams from plain text is SDEdit. It's a Java tool, so you can use it in any operating system. And it's free software!

With this tool, you write the following:

#![SD ticket order]
ext:External[pe]
user:Actor
/order:Order[x]
db:TicketDB
acc:Account

ext:user.order a ticket!
user:order.new()
order:return=db.reserve(date,count)
db:return=acc.debit(cost)
acc:return=db.bonus(date,count)

to obtain this:

SDEdit example