#graphviz #dot #dot-ix #graphs

dot_ix_rt

Runtime logic for the dot_ix diagramming application

14 releases (9 breaking)

Uses new Rust 2024

new 0.10.0 Apr 18, 2025
0.9.2 Jan 26, 2025
0.9.0 Dec 15, 2024
0.8.1 Sep 27, 2024
0.5.0 Mar 30, 2024

#516 in Visualization

Download history 176/week @ 2025-01-08 99/week @ 2025-01-15 117/week @ 2025-01-22 44/week @ 2025-01-29 52/week @ 2025-02-05 19/week @ 2025-02-12 34/week @ 2025-02-19 13/week @ 2025-02-26 24/week @ 2025-03-12 9/week @ 2025-03-19 76/week @ 2025-03-26 112/week @ 2025-04-02 3/week @ 2025-04-09

206 downloads per month
Used in 11 crates (2 directly)

MIT/Apache

260KB
5K SLoC

✒️ dot_ix

Crates.io docs.rs CI Coverage Status

🚧 This is very much a work in progress

Try it yourself: (demo_1, demo_2)

Example

Original Concept

https://user-images.githubusercontent.com/2993230/253878816-0729970f-651f-45ef-a986-470f383b8018.mp4

Usage

Add the following to Cargo.toml

dot_ix = "0.10.0"

# Enables the `FlexDiag` web component.
dot_ix = { version = "0.10.0", features = ["flex_diag"] }

Development

cargo install cargo-leptos

# Then, one of:
# * client side rendering -- uses WASM compiled graphviz to generate the graph.
cargo leptos watch

To Do

🦜 Feel free to do any of these -- this project isn't my main focus, but I should be responsive in reviewing / merging things.

  • Split crate into multiple subcrates.
  • Split app::info_graph::InfoGraph into smaller components.
  • Get rid of main.scss and replace with tailwind classes.
  • Inline styles in SVG.
  • Inline font in SVG styles.
  • Change rt/into_graphviz_dot_src/info_graph.rs to write to a buffer, instead of individual strings.
  • Take each node with a "type".
  • Take in tailwindcss classes to attach to node types.
  • Take in theme / merge with default theme.
  • Split dot_ix library from the web app, so it can be embedded in other apps.
  • GitHub Actions / automated testing / releasing / publishing.
  • Playground: Render pre-written graphs
    • Graph in URL
    • Link to gist

Dependencies

~1–1.9MB
~36K SLoC