Skip to content
charly-vibesPublic

About

Rust port of Perl's Graph::Easy — parse, lay out, and render graphs as ASCII art, boxart, HTML, or DOT

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

430 Commits

Folders and files

Repository files navigation

"Everything is connected!" — Dirk Gently

gently

tracked with wai CI Release crates.io License: GPL-2.0-or-later

A Rust port of Perl's Graph::Easy: build graphs (nodes/edges/groups), lay them out deterministically on a flat surface, and render them as ASCII art, boxart, HTML, or Graphviz DOT — plus parse graphs from the Graph::Easy text format and from DOT.

Status: initial capability wave complete — compatibility is gated differentially against the original Perl tool via a pinned oracle (v0.69, just oracle-verify).

Quickstart

Build the CLI and render a graph to ASCII art — the Graph::Easy text format goes in on stdin, the layout comes out:

cargo build -p gently-cli
echo '[ Bonn ] --> [ Berlin ] --> [ Hamburg ]' | target/debug/gently --as ascii
+------+     +--------+     +---------+
| Bonn | --> | Berlin | --> | Hamburg |
+------+     +--------+     +---------+

--as selects the output format (so does the output filename's extension, as in upstream). Rendering from a file argument instead of stdin:

target/debug/gently --as ascii examples/simple-chain/input.gv

More worked examples (chain, edge styles, diamonds, self-loops, …) with committed, byte-verified output live in examples/; a visual gallery of every example — CLI ASCII art plus SVG renderings — is at docs/gallery.md. Where gently still differs from the pinned Graph::Easy oracle — and which classes are deliberately outside byte-compat — see docs/known-hard-cases.md.

Supported formats

Stage Formats
Parse Graph::Easy text, Graphviz DOT
Render via CLI (--as) ascii, html, txt, dot/graphviz
Render via library boxart (CLI wiring pending)

Asking for an unwired format (e.g. --as boxart, --as svg) errors with gently: unknown output format and exit 255 until a renderer is wired to the CLI.

For contributors

Work is tracked with wai; notable changes are recorded in CHANGELOG.md (Keep a Changelog); the capability corpus in specs/ is written in the Specodelic four-layer format (intent statement + state model + constraints/properties per spec).

just lint            # all specs must be lint-clean
just gates           # compile + model-check the corpus
just oracle-verify   # differential compat gate (needs fixtures; spec ge.oracle)
just perf-check      # performance budgets (spec ge.perf)
just examples-verify # published examples stay byte-identical to expected output
just gallery-verify  # docs/gallery/*.svg stay byte-identical to regenerated output

About

Rust port of Perl's Graph::Easy — parse, lay out, and render graphs as ASCII art, boxart, HTML, or DOT

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages