Skip to content

Use g6R instead of DiagrammeR for dm_draw() #2358

Description

@christophsax

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")
Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions