In the course of my work, I made an open source package for defining graphs, encoding them to DOT, and rendering with GraphViz. You can find it here on GitHub:
Here’s an example of how it’s used:
import GraphViz var graph = Graph(directed: true) let a = Node("a"), b = Node("b"), c = Node("c") graph.append(Edge(from: a, to: b)) graph.append(Edge(from: a, to: c)) var b_c = Edge(from: b, to: c) b_c.constraint = false graph.append(b_c) // Produce DOT language representation let dot = DOTEncoder().encode(graph) // Render image using dot layout algorithm let data = try! graph.render(using: .dot, to: .svg) let svg = String(data: data, encoding: .utf8)!
I tried my best to support all of the available node, edge, and graph attributes in a coherent way, but please let me know if I missed a few or if anything looks out of place.
Anyway, If you’re developing a macOS or iPhone app, or perhaps using Swift server-side, I’d encourage you to take a look and let me know what you think. Thanks!