Skip to main content
Quick answers to the failure modes people hit. Search by symptom.

Install / build

go install says “module found, but does not contain package github.com/MarkovWangRR/iso-topology/cmd/isotopo”

Stop using @v0.2.0 — that release was broken (.gitignore excluded the CLI source from the zip). Use @v0.2.1 or later:

go install says “command not found: isotopo”

The binary went into $GOBIN (default $HOME/go/bin) but that’s not on your PATH. Add this to ~/.zshrc or ~/.bashrc:
Verify with echo $PATH | tr ':' '\n' | grep go.

go install says “go: requires Go 1.25 or later”

iso-topology builds against Go 1.25+. Either upgrade Go or pin to an older release if one exists for your toolchain.

pkg.go.dev shows 404 for a fresh release

The proxy → pkg.go.dev pipeline is async; the page renders 5–15 minutes after proxy.golang.org caches the release. If you need faster: visit https://pkg.go.dev/github.com/MarkovWangRR/iso-topology@vX.Y.Z directly — that forces an on-demand fetch.

Render failures

isotopo render says “isotopo: d2lib compile: … missing slog.Logger in context”

That’s not an error — it’s a debug log from d2lib. Your render succeeded if you see rendered N node(s) into <out> after it. The log is harmless and silenced in v0.2.1+; if you still see it, you’re on an older binary.

isotopo render says “image shape must include an icon field”

The d2 source has shape: image without an icon: <url> field. d2 itself rejects this. Either supply an icon URL or pick another shape:

Output dir contains topology.svg but it’s near-empty / 0 bytes

Two common causes:
  1. The input had no nodes: block at the top level (YAML/JSON).
  2. The input’s scene composite has no parts:.
Run isotopo validate <input> — it’ll flag the structural problem.

My DSL renders but layout looks wrong

Most “wrong layout” complaints come from one of:

.d2 input layout is rigid / vertical column

dagre defaults to top-down. Try ELK for orthogonal routing with obstacle avoidance:
For more layout control, switch to YAML — declarative layout/place composition without hand-computed coordinates; see ../reference/dsl-yaml.md.

Validation messages

”annotation anchor “X” does not match any part id”

The anchor refers to an id that doesn’t exist after stack expansion. Common pitfall: you wrote anchor: pod but the stack has 3 layers — all renderable ids are pod, pod~1, pod~2. The bottom layer is pod (no suffix), top is pod~<count-1>. The suggest field in the JSON error tells you the closest valid id.

”unknown shape “X""

You typo’d a shape name. The suggest field carries the nearest known shape via Levenshtein distance.
Full shape inventory: isotopo capabilities | jq '.shapes[].iso_name'.

”unknown grid mode “X""

canvas.grid accepts iso | dots | hatch | solid | none. Most typos hit square (use iso) or cross (use iso).

“connector references unknown part id “X""

Same as the annotation anchor case. Common: you nested the part inside a group and forgot the dot-path:

Library use

import "github.com/MarkovWangRR/iso-topology" doesn’t resolve

If you’re behind a corporate proxy or running GOPROXY=off, the public proxy lookup fails. Set GOPROXY=https://proxy.golang.org,direct or add the module to your private mirror.

My Go code doesn’t see the new Document.Scene() helper

The method was added in v0.2.1. Bump your require and run go mod tidy:

Output quality

SVG opens fine but PNG export looks blurry

Don’t rasterize the SVG with qlmanage or screenshot tools — they use 1× DPI. Use rsvg-convert -w 1600 or headless Chrome with --force-device-scale-factor=2.

Text labels are clipped by the iso transform

The iso transform tilts the top face, which means long labels sometimes spill off. Fix options:
  • Switch the label to screen-orient (renders as a horizontal box under the part):
  • Make the part bigger (geom.w × geom.d both up)
  • Shorten the label

Still stuck?

isotopo validate catches ~80% of structural problems before render. For the remaining 20%, file an issue with:
  • Your DSL input (yaml or d2)
  • The isotopo --version / commit
  • What you expected vs what rendered
isotopo capabilities output as an attachment never hurts.