Motivation
dm_draw() currently uses DiagrammeR/Graphviz for rendering ER diagrams. While functional, there are reasons to consider g6R as an alternative:
1. Lighter dependencies
For typical dm users (with shiny for dm_gui()):
- DiagrammeR adds 25 packages including
readr, vroom, visNetwork, scales
- g6R adds only 8 packages (knitr/rmarkdown - most users already have these)
2. Modern styling
- Full HTML/CSS control for node appearance
- Proper table-like cards with bold headers, shadows, rounded corners
- PK/FK markers (🔑/→) clearly visible
3. Native interactivity
- Built-in pan/zoom/drag without hacks
dm_gui() currently requires SVG export + regex onclick injection
- g6R widgets have native Shiny input bindings
4. Ecosystem consistency
- g6R is already used in blockr.dag
- Consistent visualization across related packages
Implementation Plan
Phase 1: Add g6R as optional backend
- New
backend = "g6R" option for dm_draw()
- Keep DiagrammeR as default for backward compatibility
- Support existing options:
view_type, rankdir, colors
Phase 2: Migrate dm_gui()
- Replace SVG export approach with native g6R widget
- Cleaner code, better interactivity
Phase 3: Make g6R default
- Deprecate DiagrammeR backend
- Remove DiagrammeR from Suggests
Preview
With g6R backend and rankdir = "TB":
dm_nycflights13() |> dm_draw(backend = "g6R", rankdir = "TB")

Motivation
dm_draw()currently uses DiagrammeR/Graphviz for rendering ER diagrams. While functional, there are reasons to consider g6R as an alternative:1. Lighter dependencies
For typical dm users (with shiny for
dm_gui()):readr,vroom,visNetwork,scales2. Modern styling
3. Native interactivity
dm_gui()currently requires SVG export + regex onclick injection4. Ecosystem consistency
Implementation Plan
Phase 1: Add g6R as optional backend
backend = "g6R"option fordm_draw()view_type,rankdir, colorsPhase 2: Migrate dm_gui()
Phase 3: Make g6R default
Preview
With g6R backend and
rankdir = "TB":