Ask HN: Which tool do you use to create beautiful diagrams?

681 points by lichtenberger ↗ HN
For instance what they use for stuff like

https://git-lfs.github.com

Or I don't know how to describe it, because right now I can't find an example, but more "comic" like maybe. I know that Venka Subramanian once had such a nice article about Akka with beautiful diagrams, but can't find it either :(

217 comments

[ 3.0 ms ] story [ 249 ms ] thread
Often those kinds of diagrams you mention are hand made with for example Inkscape.
Draw.io - though a friend actually used some Jira plugin that produced nice results.
I don't think that those diagrams can be easily made with Draw.io. I mean for instance the diagrams from Git LFS.
Any vector drawing tool will let you create a diagram like the example you posted. Examples: Inkscape, Adobe Illustrator, Sketch (Mac only), Affinity Designer, Figma (browser-based with an Electron desktop client).

You'll have to design and style the diagram yourself though. With a vector drawing app, there are no constraints on how the diagram could look - the appearance is entirely up to you.

Dedicated diagramming programs like Omnigraffle (Mac only) and Visio (Windows only) come with predefined diagramming shapes and the ability to connect shapes with lines. They save time and include options to customise the appearance of the diagram. However, the finished diagram may be a little less visually attractive if you rely on the default settings.

Yes. I used CorelDRAW, some years ago. In your example, they obviously created (or borrowed) several icons, and then arranged them.
Thanks for mentioning Visio, it is now available on the browser as well, for basic, business, flowcharts, network, and cross-functional flowcharts. $5/per user/per month (annual plan) https://products.office.com/en-us/visio/visio-online-plan-1

Disclosure: I work for the Visio team, so if you have any feedback pls lmk.

I make such diagrams in two steps:

1) Use pen and paper and/or graphviz to find most pleasant/understandable layout. It's may be not that obvious.

2) Use vector graphics editor (Adobe Illustrator, Inkscape or CorelDRAW) to draw by hand.

Thank you :-)

I always thought there must be some special tool, way better than Draw.io, OmniGraffle and everything, but just vector graphics. Maybe quiet some work.

For the kind of diagram in your example I have been using Cacoo for some time now:

https://cacoo.com

It does not take a lot of practice to get decent results and they also have some nice networking/AWS icon templates. I think they still have a free account option with limited sheets.

I find that http://realtimeboard.com works very well for me, once I've chosen the right pen width and color. The "smart drawing" tool for example (which converts hand sketches to shapes) is a huge time saver.
I use Cacoo. https://cacoo.com/

You can subscribe to a free account. The ‘signup free’ link is somewhat hidden under the pricing sections. The product has many nice drawing tools and templates and you can export to raster or vector formats.

You can make something like the one in your link by combining some preset icons Cacoo offers with regular drawing tools.

*Disclaimer: I’m a Cacoo developer

A large collection of tools. The trick seems to be to find apps that're good at particular jobs, then compose the components drawn from those apps together into a scene.

1. PowerPoint for composition. Unless whatever graphic you're making is simple enough to be produced by just 1 program, it's good to have a canvas-like program that you can assemble the components in. For me, that's usually PowerPoint, since it can be pretty free-form. PowerPoint slides can be embedded into Word documents as active content.

2. Equations: Word's equation editor or TeX. Other Microsoft Office products like PowerPoint and Excel have an equation editor built into them too, but those equation editors tend to be inferior to Word's. I used to copy/paste Word-equations into PowerPoint. Mathematica's an option if you're using it anyway, though it can look kinda clunky.

3. Graphs (excluding labels): Excel or a ray-tracer. For simple graphs, you can usually do them in Excel -- just have to learn the customization options (which I think folks often overlook, getting discouraged by the non-customized versions). For more complex graphs, sometimes it's just easiest to write your own ray-tracing scene. Matlab can be decent for some 3D surface figures, once you edit out its labels and replace them with better ones.

4. Labels: Word's equation editor or TeX again. While graph-creating tools can often insert labels just fine, they tend to be a bit rudimentary. So, once you make a graph, put it into PowerPoint, then insert your own axis labels and other markup by copying them from equation-editor tools. If you want to add arrows, circle something, or anything like that, then you can use PowerPoint's shapes.

5. Simple flow diagrams: Microsoft Visio or PowerPoint, depending on the kind. PowerPoint's probably better for the simplest things, but Visio scales better for larger diagrams.

6. Engineering designs: Whatever CAD you made them in. For example, I used to put chemical process schematics together in AspenTech's Aspen Plus, then copy/paste them into PowerPoint for further markup.

7. Minor tweaking: Paint, Paint.NET, etc.. If you just want to tweak a graphic or something before pasting it into PowerPoint, simple image-editing tools can let you do that.

8. Security: Write your own script. If you have some graphic that might have hidden tracking information embedded in slight pixel alterations, then you can do stuff like:

a. round pixel RGB values to the nearest 5 (or whatever);

b. merge pixels together (like Paint would if you shrink an image);

c. save as JPEG or some other lossful format;

d. randomly (using a CRNG) mutate pixel values by slight amounts to inject invisible noise.

9. Complex diagrams: Ray-tracing. Honestly I love ray-tracing stuff; it feels like a brute-force solution to just about anything you could want to draw, and if you like programming, I think it's one of those projects that you really ought to do at some point just as a matter of being well-versed in computers.

---

Overall, my big tip would be to be aware of the various tools that can do parts of the overall job well, then compose them in a general canvas-like setting like PowerPoint, and then finalize any little tweaks using an image-editor.

I'm curious as to the scenario in which the security edits you mention could be required. Could you give any examples?
It's probably not something most folks have to worry about.

But for the sake of example, say that you download an image to be later used in a document/presentation that'll be made publicly available. The image server might choose to encode information like retrieval time, IP address, account you're logged in with, and any other tracking info it might have through cookies in an invisible watermark. Then after you post the image as part of a document/presentation, the original source can make that connection.

Ideally anyone tracking you would make the tracking mark cryptographically secure such that only they can interpret it, though there's also the possibility that they'd use some other mechanism that could reveal your personal information to anyone aware of the watermarking mechanism.

Alternatively, say that the image is retrieved over an insecure line, e.g. through HTTP, and, say, some country (with loose notions of civil rights) wishes to track its propagation. Then they can intercept the original image, watermark it, and serve the malicious version to you. Which such a state might wish to do if you're, say, working on a technology that they're interested in.

The ray-tracing idea really sounds great! What setup are you using for this?
Really just a personal ray-tracing app. I coded it up in C# with an event-loop to update, and mouse-clicks emit a ray to hit-test against an object, allowing for interactivity. Then you can draw anything that you can programmatically describe to the ray-tracer.

I mean, a scatter plot's axes can be drawn as cylinders while the points can be spheres, etc., which makes it simple enough to throw together from most quick ray-tracing tutorial projects.

But what's really cool is that, once you put some objects together that form graphs and such, it's trivial to merge them with other scenes. Like, I was really interested in having a 3D walk-through of a chemical processing plant, where I could insert graphs linked to real-time data, where the graphs themselves are just part of the ray-traced scene (rather than being something like a skin on an object). So then the 3D walk-through basically has pop-up data views.

But for stuff like documents, I mostly just think of ray-tracing as the brute-force solution to anything that's not more easily done using another tool. I think the first time I used it for a plain graph, I was frustrated by trying to make a plot that had both surfaces and point-bubbles in it. So, I figured, hey, surfaces can just be interpolations of sample points, and the point-bubbles can just be little spheres.

Having worked in a few IT architecture departments at huge companies the most popular tool by far at these companies really shocked me at first: PowerPoint. It's not that hard to build these things by hand using basic shapes. One of our diagrams was about 3 feet by 4 feet when printed and had thousands of elements and lines connecting those elements. Similarly now that I don't use Windows I've reverted to Google Slides.
There's a senior architect in my organization who makes the most incredible, beautiful diagrams I've ever seen. He just uses PowerPoint.
I use Dia: http://dia-installer.de/

It's free open-source software, works on Windows, Mac and Linux. It gives great balance for drawing on grids (reduces arbitrary decisions) and usability (power to draw what you want). I've gotten several compliments at talks for diagrams made using this software, so I highly recommend it.

I use it, too, and I wish it had LaTeX/Pstricks export. I used to use LatexDraw, but it's too limited.
One thing I've noticed with Dia is that it simply doesn't launch for me. Does Dia require X11 on a Mac? If so, I couldn't find anything in the documentation stating this (although not launching on Windows is covered).

Likewise I'm a bit leery that Dia is requesting access to "system events".

Yes, I believe it requires X11 on Mac. I use XQuartz. Getting it to run the very first time may be a bit challenging, but it's worth it.
Well it's bailing right now because of an rpath issue (which looks like it's been an issue for a few years now). Which is to say that this isn't really very encouraging for dia on OSX.
LaTeX/TikZ.

+ Describe your drawing in code

+ Mostly intuitive syntax

+ Not very steep learning curve

- No visual editing: edit-compile-view cycle

- Time consuming

I use TikZ in LaTeX, it's awesome, has a comprehensive manual, great examples website http://www.texample.net/tikz/examples/ to learn from. The secret, I've found, is to avoid programming in TikZ as much as possible--it's terribly clunky as a language for anything beyond the basics--by writing macros in LaTeX (with \newcommand) to use in TikZ for any shapes you'll need repeatedly. They can have as many parameters as you like.

If I need control over every pixel I write graphics programs in Python or Cython or C, or use GIMP.

Google Draw is awesome for this, you can search and add icons from the web, basic vectorized shapes, embeddable in other Google office products.
Google Drawings are convenient for their collaboration and ability to include in other Google docs, but I've mostly found that it seems optimized to produce ugly diagrams. It takes extra work to make things look lined up well.

I use it for the easy collaboration, but miss OmniGraffle every time I do.

You need good stencils for Google Draw. There a number of links out there for UML stuff and actually works quite well. Unfortunately, out of the box it’s definitely on the Spartan-side.
OmniGraffle works well for me. (MacOS)
I second this. Very good tool for diagramming. All kinds of stencils / shapes / objects: Wireframes, UML, workflows, BPML,...

Edit: And of course you can draw free hand. It's vector based.

Around 2009 I saw someone's work made with OmniGraffle and it was so beautiful that wanted to have that too.

BTW, until recently OmniGraffle was the only commercial mac app I used in past 10 years. Now I got FL Studio as well.

I use Whimsical. https://whimsical.co/

It makes it super simple to create good-looking diagrams, and it can do a lot more than just diagrams too.

Thanks for the mention! We built Whimsical for a simple reason - all the existing diagramming apps had poor UX. It didn't feel like any of them were really optimized to visualize ideas as quickly as possible while make the result look decent.
I was hoping to find someone else mention Whimsical too. It's so fast to use. I've been recommending it to coworkers and its allowed them to be much more productive.
I used Whimsical to spec a complex product flow for my last project and it was by far the fastest diagramming tool I've ever used. It is not, however, a way to make beautiful diagrams.

I wish Figma would integrate the snapping behavior of Whimsical – that, I think, would be the ultimate diagramming tool.

I use Simple Diagrams https://www.simplediagrams.com/, specifically because it has a hand drawn feel, which I think makes people feel less intimidated and also conveys the impression that what is shown is not cast in stone.
Wow this is great. I can’t believe I haven’t run into this in my searches for diagramming tools. Thank you
Really nice, unfortunately no support for Linux.
Looks nice, is it possible to use external vectors?
Wow, this is beautiful. Will definitely give it a try.
In one of the videos a guy tells something from a tool, where you can simply sketch with pen/paper and then make a picture and it's converted to a vector graphic? How cool is that :-)
Adobe Capture (mobile app) does that. There are also several others.
Yeah, somehow the Android version of my tablet is not supported. But I've installed a sketching app, pretty nice.
http://plantuml.com

I've been doing a lot of flow diagrams and PlantUML has been invaluable. I specifically like it because sharing the flow means sharing some text, which itself is vaguely human-readable. There's an online renderer (bottom of the page in the above link), which means simple diagrams are also quick to create and view. It's got a few different modes that it understands but I'd definitely add it to the list when you need simple vector graphics.

Also, text diagrams allows the use of source control and versioning, which is nice.
As well as accessibility for the vision-impaired, I favor GraphViz and PlantUML for all these reasons
I second, third and fourth this. Anytime I'm not sure about a design, I sketch it out in plantuml and play around with it. Every project of mine has at least one or two plantuml diagrams checked into it.
I'm 100 agree! Plantuml is great, not as pretty as other tools but build diagrams for internal doc is awesome!like conflucence, wiki, sphinx, etc.. I'm in love with!
Use plantuml a ton. Their google docs integration is quirky (it is hard to tell if you are going to edit the text in the doc or the diagram) but it's fast and anyone can edit it easily; I love it.

I use a combination of plant for sequence flows and lucid for arch diagrams.

I too use PlantUML a lot.

My only complaint is that you can't manipulate layout directly. You can do some hacks like invisible directional arrows, but ultimately any change you make risks turning your beautiful diagram into complete spaghetti.

I wish there was a tool combining plaintext description with explicit layouting.

The best thing about plant is that you don't draw things out. you describe them. I actually feel like this is the way we SHOULD do diagrams so that we have flexibility to re-do them. I wish that Markdown would include plantUML natively.
https://www.planttext.com/

Has an online split screen view with your text on one side, and the diagram in the other. It's quite crude - no auto refresh, for example - but it works.

PlantUML looks great, all the features I need, but their page is infested with fake ads, including fake download buttons of 5 different kinds. They also link to download page on SourceForge (hmmm, it's still alive) with even worse ads. Maybe it just me, but I immediately lost any desire to try it.
I can highly recommend the PlantUML plugin for Visual Studio Code [1]. I mainly use this for sequence diagrams and component diagrams. The plugin makes editing and previewing the diagrams awesome. Also checkout PlantUML integration for GitLab [2]. We recently deployed this at work, so not many miles yet, but looks pretty awesome. Main feature is to render embedded PlantUML markup in text files (markdown).

[1] https://marketplace.visualstudio.com/items?itemName=jebbs.pl... [2] https://docs.gitlab.com/ce/administration/integration/plantu...

Are there any handy tools for animating these diagrams? Like the one at git lfs?
(comment deleted)
Graphviz for simple diagrams that can represented with basic shapes.

PlantUML for sequence diagrams, state machines and the likes.

Powerpoint/Keynote for things that are presentations - and usually I will export one of the above formats as SVG, clean it up a bit, turn into PDF and drop into the slides. As a general rule all my diagrams must be vector based, and no bitmap objects should be embedded.

Confluence with Graphviz and PlantUML plugins for placing diagrams into documentation. This also gives more granular version control. Other diagrams may also end up in source control with the product itself.

Occasionally I have ASCII art embedded in source code, nearly all of this is hand cranked as I've yet to find tools that work for me. Almost always this is formatted to show up in generated documentation.

But most importantly is having consistent design elements - spend time having colour palettes that are consistent, typefaces and type positioning that match, that shapes and layouts are as consistent as possible. Having templates, colour palettes, and snippets help. Finally, understand basic colour theory, typography and layout. Looking at graphic design visual porn (Behance is a good starting point) after knowing the basic rules will hopefully give meaningful inspiration.

Try Emacs artist mode for ASCII diagrams in code.
Gliffy: https://www.gliffy.com/

$7.99 per month for a single user or $4.99 per user per month for small teams.

It was one of the first browser-based diagram tools but it's kept up with the competition. Gliffy provides a wide variety of diagram types, design and theming options.

I use Dia, it's simple and does the job.
https://www.draw.io is an elegant open-sourced program for that purpose. It has apps to install on Mac, Windows. Highly recommend.
This is my first choice as well. Found it when I moved from windows (and therefore Visio) to Mac. Doesn’t have exhaustive feature parity, but everything I needed for UML drawings works great. Natively supports source control to Github which was also great to keep documentation with the code.
Plectica https://www.plectica.com can make beautiful, intricate, interactive diagrams that clearly convey technical infrastructure. Also nice that collaboration is real time like Google Docs, and so it's easy to keep updated as things evolve.
I used to use Dia. I now swear by Inkscape. Both tools are free; both are quirky and idiosyncratic. Once I got past the idiosyncrasies, I fell in love with Inkscape.
Yeah, really great for all sorts of vector drawing, including diagrams.