diff --git a/go/cfg/cfg.go b/go/cfg/cfg.go
index 0166835..fad4530 100644
--- a/go/cfg/cfg.go
+++ b/go/cfg/cfg.go
@@ -211,9 +211,13 @@
 	return buf.String()
 }
 
-// digraph emits AT&T GraphViz (dot) syntax for the CFG.
-// TODO(adonovan): publish; needs a proposal.
-func (g *CFG) digraph(fset *token.FileSet) string {
+// Dot returns the control-flow graph in the [Dot graph description language].
+// Use a command such as 'dot -Tsvg' to render it in a form viewable in a browser.
+// This method is provided as a debugging aid; the details of the
+// output are unspecified and may change.
+//
+// [Dot graph description language]: ​​https://en.wikipedia.org/wiki/DOT_(graph_description_language)
+func (g *CFG) Dot(fset *token.FileSet) string {
 	var buf bytes.Buffer
 	buf.WriteString("digraph CFG {\n")
 	buf.WriteString("  node [shape=box];\n")
@@ -235,11 +239,6 @@
 	return buf.String()
 }
 
-// exposed to main.go
-func digraph(g *CFG, fset *token.FileSet) string {
-	return g.digraph(fset)
-}
-
 func formatNode(fset *token.FileSet, n ast.Node) string {
 	var buf bytes.Buffer
 	format.Node(&buf, fset, n)
diff --git a/go/cfg/main.go b/go/cfg/main.go
index e25b368..3f1b361 100644
--- a/go/cfg/main.go
+++ b/go/cfg/main.go
@@ -19,10 +19,8 @@
 	"flag"
 	"fmt"
 	"go/ast"
-	"go/token"
 	"log"
 	"os"
-	_ "unsafe" // for linkname
 
 	"golang.org/x/tools/go/cfg"
 	"golang.org/x/tools/go/packages"
@@ -47,7 +45,7 @@
 				if decl, ok := decl.(*ast.FuncDecl); ok {
 					if decl.Name.Name == funcname {
 						g := cfg.New(decl.Body, mayReturn)
-						fmt.Println(digraph(g, pkg.Fset))
+						fmt.Println(g.Dot(pkg.Fset))
 						os.Exit(0)
 					}
 				}
@@ -67,6 +65,3 @@
 	}
 	return true
 }
-
-//go:linkname digraph golang.org/x/tools/go/cfg.digraph
-func digraph(g *cfg.CFG, fset *token.FileSet) string
