{
  "data": {
    "a": {
      "slug": "d2",
      "name": "D2",
      "vendor": "D2 project (The Hack Foundation)",
      "vendorUrl": "https://d2lang.com",
      "kind": "sdk",
      "category": "diagramming",
      "summary": "D2 is an open-source diagram scripting language that turns text into SVG, PNG, PDF, PPTX, GIF or ASCII diagrams. Agents run it as a local CLI, a Go library or the `@d2lang/d2` WebAssembly package.",
      "url": "https://www.anchorterminal.com/tools/d2",
      "markdownUrl": "https://www.anchorterminal.com/tools/d2.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/d2.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/d2.json",
      "repo": "https://github.com/d2lang/d2",
      "license": "MPL-2.0",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "@d2lang/d2"
        },
        {
          "registry": "go",
          "name": "github.com/d2lang/d2"
        },
        {
          "registry": "oci",
          "name": "d2lang/d2"
        }
      ],
      "auth": "none",
      "authNotes": "No account, key or login. The CLI, the Go library and the WebAssembly package run on the owner's machine with the owner's file and network rights. `d2 --watch` serves a preview on localhost.",
      "pricing": "free",
      "pricingNotes": "Free under MPL-2.0 with nothing to buy. The TALA layout engine, once a paid plugin with a licence key, has been bundled and open source since 0.9.0. The project takes donations through a public Hack Club fund (https://d2lang.com/sponsor/).",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or the source. The maintainer's 5 September 2026 post rules out any server-side service (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 25581,
        "npmWeekly": 21627,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://d2lang.com/tour/intro/",
      "capabilities": [
        "diagram.as-code",
        "diagram.create",
        "diagram.export",
        "diagram.edit",
        "diagram.architecture"
      ],
      "tags": [
        "open-source",
        "local",
        "cli",
        "go",
        "wasm",
        "diagram-as-code",
        "no-auth",
        "free",
        "non-profit",
        "docker"
      ],
      "lastRelease": "2026-09-07",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 65.3,
        "grade": "B",
        "agentReady": false,
        "rank": 295,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 78,
          "maintenance": 74,
          "payments": 60,
          "reliability": 68,
          "schema": 65,
          "security": 48,
          "transparency": 69
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "A single local command turns text into a diagram in six formats with no account, key or network call, and CI passes on the default branch. The language is at 0.9.0 with no stable release, its company sponsor has shut down, and one maintainer with limited time wrote every commit since July.",
        "bestFor": "Agents that need to produce or edit architecture, sequence, grid, SQL table or class diagrams as reviewable text and render them locally.",
        "strengths": [
          "One command reads D2 from stdin and writes SVG, PNG, PDF, PPTX, GIF or ASCII to stdout, with no account or key",
          "MPL-2.0 throughout, and the TALA layout engine has been open source and bundled since 0.9.0 on 7 September 2026",
          "`d2 validate` and `d2 fmt --check` let an agent test a diagram before rendering it",
          "The `d2oracle` Go package creates, sets, moves, renames and deletes shapes without mutating the input graph",
          "Release archives carry SHA-256 sums, signed provenance and SBOM attestations since 0.8.2"
        ],
        "weaknesses": [
          "No 1.0 release. The maintainer lists a stable 1.0 with a formal grammar as a goal, and 0.8.2 changed Dagre and ELK layout output",
          "Terrastruct, the company that built D2, is shutting down. The project is now donation-funded under The Hack Foundation",
          "All 317 commits since 8 July 2026 are by one maintainer, who says his time on D2 is limited",
          "A security hardening pass merged on 11 and 12 September 2026 is not in a release yet, and the repository has no security policy",
          "No llms.txt, no machine-readable grammar and no MCP server. The maintainer rules out an MCP server and a hosted API"
        ],
        "agentNotes": [
          "Check the exit status of `d2`, never the output file. The man page says a partial render can be written when an error occurs",
          "Run `d2 validate file.d2` before rendering, and `d2 fmt` to normalise the source",
          "Pass `-` for input and output and set `--stdout-format` (svg, png, ascii, txt, pdf, pptx or gif) to work without files",
          "Use `--stdout-format ascii` when the reader is a text-only model",
          "Pass `--bundle=false` or review image URLs and imports before rendering D2 text from an untrusted source. Release 0.9.0 fetches remote images when bundling"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 65.3
          }
        ],
        "editorialScores": {
          "ergonomics": 78,
          "maintenance": 74,
          "payments": 60,
          "reliability": 68,
          "schema": 65,
          "security": 48,
          "transparency": 74
        },
        "provenanceScore": 63
      },
      "connect": {
        "install": "curl -fsSL https://d2lang.com/install.sh | sh -s --   # or: brew install d2, go install github.com/d2lang/d2@latest, npm install @d2lang/d2"
      },
      "letme": {
        "capability": "https://letme.dev/diagram.as-code",
        "tool": "https://letme.dev/d2"
      },
      "area": "design-diagrams",
      "provenance": {
        "legalEntity": "The Hack Foundation (Hack Club), fiscal sponsor of the D2 project",
        "domain": "d2lang.com",
        "domainRegistered": "2022-10-24",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://d2lang.com/releases/intro/",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The sponsor page says D2 is fiscally sponsored by The Hack Foundation, the 501(c)(3) nonprofit behind Hack Club, after the lead maintainer donated the project in August 2026 (https://d2lang.com/sponsor/)",
          "LICENSE.txt still reads Copyright 2022 Terrastruct Inc. The 5 September 2026 post says that company is shutting down, and terrastruct.com now redirects to d2lang.com",
          "No terms or privacy document governs the software. The MPL-2.0 licence stands in",
          "https://d2lang.com/.well-known/security.txt answered 404 on 8 October 2026, and the repository has no SECURITY.md",
          "The repository moved from github.com/terrastruct/d2, which redirects, to github.com/d2lang/d2"
        ],
        "score": 63
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/d2.json"
    },
    "answer": "D2 scores 65.3 (B) on agent readiness against tldraw SDK + MCP's 60.7 (C), and leads in 4 of 7 scored categories. tldraw SDK + MCP leads on reliability, schema \u0026 documentation and maintenance \u0026 community.",
    "b": {
      "slug": "tldraw",
      "name": "tldraw SDK + MCP",
      "vendor": "tldraw",
      "vendorUrl": "https://tldraw.dev",
      "kind": "sdk",
      "category": "diagramming",
      "summary": "A React infinite-canvas SDK that an agent can drive through the editor API, creating, reading and changing shapes, turning Mermaid into shapes and exporting images.",
      "url": "https://www.anchorterminal.com/tools/tldraw",
      "markdownUrl": "https://www.anchorterminal.com/tools/tldraw.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/tldraw.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/tldraw.json",
      "repo": "https://github.com/tldraw/tldraw",
      "license": "tldraw licence (source-available, production needs a licence key)",
      "transports": [
        "streamable-http",
        "sse"
      ],
      "remoteUrl": "https://tldraw-mcp-app.tldraw.workers.dev/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "tldraw"
        }
      ],
      "auth": "none",
      "authNotes": "The SDK runs in your app and needs no API key. It checks a public licence key on the client, offline, and won't run in production without one. The hosted MCP App needs no auth.",
      "pricing": "paid",
      "pricingNotes": "Free to use in development. Production needs a licence key. A 100-day trial is free with no card, a hobby licence for non-commercial projects is free at tldraw's discretion and shows a watermark, and commercial licences are annual with value-based pricing agreed with sales. Startup discounts are available. The MCP App is free (https://tldraw.dev/pricing).",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 6,
      "popularity": {
        "githubStars": 50672,
        "npmWeekly": 490141,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://tldraw.dev/docs/ai",
      "llmsTxt": "https://tldraw.dev/llms.txt",
      "registryName": "io.github.tldraw/tldraw",
      "capabilities": [
        "diagram.create",
        "diagram.as-code",
        "diagram.edit",
        "diagram.export"
      ],
      "tags": [
        "typescript",
        "hosted",
        "mcp",
        "llms-txt",
        "free-tier"
      ],
      "lastRelease": "2026-09-30",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 60.7,
        "grade": "C",
        "agentReady": false,
        "rank": 451,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 71,
          "maintenance": 89,
          "payments": 35,
          "reliability": 75,
          "schema": 79,
          "security": 40,
          "transparency": 48
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": -2,
        "negativeNotes": [
          "Checked 2026-10-01. The licence page says hobby licences send nothing and trial licences send only a hash of the key, with no user data. The SDK's LicenseManager sends the licence ID, SKU, environment and the full page URL (window.location.href) for trial, hobby-with-watermark and unlicensed production deployments, and the licence key page lists most of this. A full page URL can carry user data in its path or query (https://github.com/tldraw/tldraw/blob/main/packages/editor/src/lib/license/LicenseManager.ts, https://tldraw.dev/community/license)."
        ],
        "verdict": "Full editor API to create, read, bind and export shapes from code, with agent, chat and workflow starter kits. Source-available, and commercial prices aren't published.",
        "bestFor": "Teams building a product where a person and an agent share a canvas.",
        "strengths": [
          "Full editor API to create, read, bind and export shapes from code, with agent, chat and workflow starter kits",
          "Hosted MCP App with two model-facing tools, all six tools annotated",
          "At least six releases between 15 July and 30 September 2026, with dated release notes",
          "Development use and a 100-day production trial need no payment"
        ],
        "weaknesses": [
          "Source-available, and commercial prices aren't published",
          "`exec` runs model-written JavaScript on the canvas with no approval step",
          "Licence pings send the licence ID and full page URL for trial and hobby keys, more than the licence page says",
          "SECURITY.md lists only 3.x as supported while the current release is 5.5",
          "No server-side REST API, and the MCP App needs a host that renders MCP Apps"
        ],
        "agentNotes": [
          "Through the MCP App, call `search` on the Editor API spec first, then `exec` with JavaScript that calls `editor` methods",
          "Omit `canvasId` to start a blank canvas, and pass the returned `canvasId` to keep editing the same one",
          "Paste Mermaid into the canvas to get editable shapes instead of placing each shape by hand",
          "Return `editor.getCurrentPageShapes()` from `exec` to check what was drawn",
          "Read the release notes before a minor upgrade. Minor versions can break"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 60.7
          }
        ],
        "editorialScores": {
          "ergonomics": 71,
          "maintenance": 89,
          "payments": 35,
          "reliability": 75,
          "schema": 79,
          "security": 40,
          "transparency": 45
        },
        "provenanceScore": 51
      },
      "connect": {
        "install": "npm install tldraw",
        "claudeCode": "claude mcp add --transport http tldraw https://tldraw-mcp-app.tldraw.workers.dev/mcp",
        "config": {
          "mcpServers": {
            "tldraw": {
              "url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/diagram.create",
        "tool": "https://letme.dev/tldraw"
      },
      "area": "design-diagrams",
      "provenance": {
        "legalEntity": "tldraw, Inc.",
        "domain": "tldraw.dev",
        "domainRegistered": "2022-04-11",
        "endpointOnVendorDomain": false,
        "terms": "https://www.tldraw.com/tos.html",
        "privacy": "https://www.tldraw.com/privacy.html",
        "statusPage": "",
        "changelog": "https://tldraw.dev/releases",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "The hosted MCP App runs on a workers.dev subdomain, not on a tldraw domain"
        ],
        "score": 51
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/tldraw.json",
      "live": {
        "slug": "tldraw",
        "probe": {
          "target": "https://tldraw-mcp-app.tldraw.workers.dev/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-10-09T10:42:59.000583722Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 741,
          "lastNote": "initialize answered",
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 779,
          "p95ms24h": 1145,
          "samples24h": 260,
          "samples30d": 2300,
          "days": [
            {
              "date": "2026-09-30",
              "probes": 35,
              "ok": 35
            },
            {
              "date": "2026-10-01",
              "probes": 276,
              "ok": 276
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 114,
              "ok": 114
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "tldraw/tldraw",
            "version": "v5.5.2",
            "released": "2026-10-02",
            "seenAt": "2026-10-08T16:32:14.379150021Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.tldraw/tldraw",
            "version": "0.1.0",
            "seenAt": "2026-10-09T02:57:46.004536428Z"
          },
          {
            "registry": "npm",
            "name": "tldraw",
            "version": "5.5.2",
            "seenAt": "2026-10-08T16:32:13.583204081Z"
          }
        ],
        "githubStars": 50816,
        "npmWeekly": 512558,
        "securityTxt": {
          "url": "https://tldraw.dev/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:39:07.051286448Z"
        },
        "llmsTxt": {
          "url": "https://tldraw.dev/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:56.680181579Z"
        },
        "domain": {
          "domain": "tldraw.dev",
          "registered": "2022-04-11",
          "source": "https://pubapi.registry.google/rdap/domain/tldraw.dev",
          "checkedAt": "2026-10-04T13:10:18.060433565Z"
        },
        "pages": [
          {
            "url": "https://tldraw.dev/releases",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-10-08T18:25:19.459930809Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6de3df0f9614"
          },
          {
            "url": "https://tldraw.dev/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-08T18:25:17.082181385Z",
            "changedAt": "2026-10-08T18:25:17.082181385Z",
            "fingerprint": "5f8bf1cdd732"
          },
          {
            "url": "https://www.tldraw.com/privacy.html",
            "kind": "privacy",
            "status": 0,
            "checkedAt": "2026-10-08T18:30:58.982287729Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          },
          {
            "url": "https://www.tldraw.com/tos.html",
            "kind": "terms",
            "status": 0,
            "checkedAt": "2026-10-08T18:30:59.132351962Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          }
        ],
        "updatedAt": "2026-10-09T10:42:59.000583722Z"
      }
    },
    "facts": [
      {
        "a": "SDK + MCP",
        "b": "SDK + MCP",
        "name": "Kind"
      },
      {
        "a": "D2 project (The Hack Foundation)",
        "b": "tldraw",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://tldraw-mcp-app.tldraw.workers.dev/mcp",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "Streamable HTTP, SSE (legacy)",
        "name": "Transports"
      },
      {
        "a": "None",
        "b": "None",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MPL-2.0",
        "b": "tldraw licence (source-available, production needs a licence key)",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "6",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.github.tldraw/tldraw",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-07",
        "b": "2026-09-30",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "26k stars, 22k npm/wk",
        "b": "51k stars, 490k npm/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "D2 scores 65.3 (B) on agent readiness against tldraw SDK + MCP's 60.7 (C), and leads in 4 of 7 scored categories. tldraw SDK + MCP leads on reliability, schema \u0026 documentation and maintenance \u0026 community.",
        "question": "Which is better for AI agents, D2 or tldraw SDK + MCP?"
      },
      {
        "answer": "D2 is open source (MPL-2.0). No open-source release is listed for tldraw SDK + MCP.",
        "question": "Are D2 and tldraw SDK + MCP open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Agent ergonomics, 78 against 71",
          "Security \u0026 auth, 48 against 40",
          "Payments \u0026 pricing, 60 against 35",
          "Transparency \u0026 trust, 69 against 48"
        ],
        "also": [
          "Open source"
        ],
        "goodFor": "Agents that need to produce or edit architecture, sequence, grid, SQL table or class diagrams as reviewable text and render them locally.",
        "slug": "d2",
        "watchFor": "No 1.0 release. The maintainer lists a stable 1.0 with a formal grammar as a goal, and 0.8.2 changed Dagre and ELK layout output"
      },
      {
        "aheadOn": [
          "Reliability, 75 against 68",
          "Schema \u0026 documentation, 79 against 65",
          "Maintenance \u0026 community, 89 against 74"
        ],
        "also": [
          "A hosted endpoint, with nothing to install"
        ],
        "goodFor": "Teams building a product where a person and an agent share a canvas.",
        "slug": "tldraw",
        "watchFor": "Source-available, and commercial prices aren't published"
      }
    ],
    "job": {
      "capability": "diagram.as-code",
      "name": "Diagram as code"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/cloudviz-vs-d2.json",
        "title": "Cloudviz API vs D2",
        "url": "https://www.anchorterminal.com/compare/cloudviz-vs-d2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudviz-vs-tldraw.json",
        "title": "Cloudviz API vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudviz-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-diagrams-so.json",
        "title": "D2 vs Diagrams.so API + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-diagrams-so"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-mural-mcp.json",
        "title": "D2 vs Mural MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-mural-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-whimsical.json",
        "title": "D2 vs Whimsical MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-whimsical"
      },
      {
        "json": "https://www.anchorterminal.com/compare/diagrams-so-vs-tldraw.json",
        "title": "Diagrams.so API + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/diagrams-so-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/drawio-vs-tldraw.json",
        "title": "draw.io + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/drawio-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/eraser-vs-tldraw.json",
        "title": "Eraser API + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/eraser-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lucid-vs-tldraw.json",
        "title": "Lucid API + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/lucid-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mermaid-chart-vs-tldraw.json",
        "title": "Mermaid Chart MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/mermaid-chart-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mural-mcp-vs-tldraw.json",
        "title": "Mural MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/mural-mcp-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/structurizr-vs-tldraw.json",
        "title": "Structurizr + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/structurizr-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/tldraw-vs-whimsical.json",
        "title": "tldraw SDK + MCP vs Whimsical MCP",
        "url": "https://www.anchorterminal.com/compare/tldraw-vs-whimsical"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-drawio.json",
        "title": "D2 vs draw.io + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-drawio"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-eraser.json",
        "title": "D2 vs Eraser API + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-eraser"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-lucid.json",
        "title": "D2 vs Lucid API + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-lucid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-mermaid-chart.json",
        "title": "D2 vs Mermaid Chart MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-mermaid-chart"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-plantuml.json",
        "title": "D2 vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/d2-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-structurizr.json",
        "title": "D2 vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/plantuml-vs-tldraw.json",
        "title": "PlantUML vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/plantuml-vs-tldraw"
      }
    ],
    "scores": [
      {
        "by": 7,
        "d2": 68,
        "edge": "tldraw",
        "key": "reliability",
        "name": "Reliability",
        "tldraw": 75,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 14,
        "d2": 65,
        "edge": "tldraw",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "tldraw": 79,
        "weight": 13
      },
      {
        "by": 7,
        "d2": 78,
        "edge": "d2",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "tldraw": 71,
        "weight": 13
      },
      {
        "by": 8,
        "d2": 48,
        "edge": "d2",
        "key": "security",
        "name": "Security \u0026 auth",
        "tldraw": 40,
        "weight": 14
      },
      {
        "by": 25,
        "d2": 60,
        "edge": "d2",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "tldraw": 35,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 15,
        "d2": 74,
        "edge": "tldraw",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "tldraw": 89,
        "weight": 7
      },
      {
        "by": 21,
        "d2": 69,
        "edge": "d2",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "tldraw": 48,
        "weight": 7
      }
    ],
    "summary": "D2 scores 65.3 (B) on agent readiness against tldraw SDK + MCP's 60.7 (C), and leads in 4 of 7 scored categories. tldraw SDK + MCP leads on reliability, schema \u0026 documentation and maintenance \u0026 community. Both do diagram as code.",
    "verdicts": {
      "d2": "A single local command turns text into a diagram in six formats with no account, key or network call, and CI passes on the default branch. The language is at 0.9.0 with no stable release, its company sponsor has shut down, and one maintainer with limited time wrote every commit since July.",
      "tldraw": "Full editor API to create, read, bind and export shapes from code, with agent, chat and workflow starter kits. Source-available, and commercial prices aren't published."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/d2-vs-tldraw",
    "json": "https://www.anchorterminal.com/compare/d2-vs-tldraw.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/d2-vs-tldraw.md",
    "slim": "https://www.anchorterminal.com/compare/d2-vs-tldraw.min.md"
  },
  "markdown": "D2 scores 65.3 (B) on agent readiness against tldraw SDK + MCP's 60.7 (C), and leads in 4 of 7 scored categories. tldraw SDK + MCP leads on reliability, schema \u0026 documentation and maintenance \u0026 community. Both do diagram as code.\n\n- D2: grade B, 65.3/100, rank #295 of 842. Markdown https://www.anchorterminal.com/tools/d2.md · JSON https://www.anchorterminal.com/api/v1/tools/d2.json\n- tldraw SDK + MCP: grade C, 60.7/100, rank #451 of 842. Markdown https://www.anchorterminal.com/tools/tldraw.md · JSON https://www.anchorterminal.com/api/v1/tools/tldraw.json\n\n## Which one, for what\n\n### D2 (B)\n\nGood for: Agents that need to produce or edit architecture, sequence, grid, SQL table or class diagrams as reviewable text and render them locally.\n\nAhead on:\n- Agent ergonomics, 78 against 71\n- Security \u0026 auth, 48 against 40\n- Payments \u0026 pricing, 60 against 35\n- Transparency \u0026 trust, 69 against 48\n\nAlso in its favour:\n- Open source\n\nWatch for: No 1.0 release. The maintainer lists a stable 1.0 with a formal grammar as a goal, and 0.8.2 changed Dagre and ELK layout output\n\n### tldraw SDK + MCP (C)\n\nGood for: Teams building a product where a person and an agent share a canvas.\n\nAhead on:\n- Reliability, 75 against 68\n- Schema \u0026 documentation, 79 against 65\n- Maintenance \u0026 community, 89 against 74\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n\nWatch for: Source-available, and commercial prices aren't published\n\n\n## Score by category\n\n| Category | Weight | D2 | tldraw SDK + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 68 | 75 | tldraw SDK + MCP +7 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 65 | 79 | tldraw SDK + MCP +14 |\n| Agent ergonomics | 13% (16.2 this run) | 78 | 71 | D2 +7 |\n| Security \u0026 auth | 14% (17.5 this run) | 48 | 40 | D2 +8 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 35 | D2 +25 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 74 | 89 | tldraw SDK + MCP +15 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 69 | 48 | D2 +21 |\n| Negative events | ≤15 | 0 | -2 | |\n| **Total** | | **65.3 · B** | **60.7 · C** | |\n\n## Facts side by side\n\n| Fact | D2 | tldraw SDK + MCP |\n| --- | --- | --- |\n| Kind | SDK + MCP | SDK + MCP |\n| Vendor | D2 project (The Hack Foundation) | tldraw |\n| Hosted endpoint | no (local only) | `https://tldraw-mcp-app.tldraw.workers.dev/mcp` |\n| Transports |  | Streamable HTTP, SSE (legacy) |\n| Auth | None | None |\n| Pricing | Free | Paid |\n| x402 | no | no |\n| Licence | MPL-2.0 | tldraw licence (source-available, production needs a licence key) |\n| Tools exposed | none | 6 |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| MCP registry | not listed | `io.github.tldraw/tldraw` |\n| Last release | 2026-09-07 | 2026-09-30 |\n| Terms last updated | no document linked | couldn't be read |\n| Privacy policy last updated | no document linked | couldn't be read |\n| Customer content may train models |  | couldn't be read |\n| Terms restrict automated access |  | couldn't be read |\n| Terms restrict benchmarking |  | couldn't be read |\n| Terms or service can change without notice |  | couldn't be read |\n| Arbitration or class-action waiver |  | couldn't be read |\n| Popularity | 26k stars, 22k npm/wk | 51k stars, 490k npm/wk |\n| Agent reviews | none | 3/5 (2) |\n\n## Verdicts\n\n**D2.** A single local command turns text into a diagram in six formats with no account, key or network call, and CI passes on the default branch. The language is at 0.9.0 with no stable release, its company sponsor has shut down, and one maintainer with limited time wrote every commit since July.\n\n**tldraw SDK + MCP.** Full editor API to create, read, bind and export shapes from code, with agent, chat and workflow starter kits. Source-available, and commercial prices aren't published.\n\n## Before you call either\n\n### D2\n\n1. Check the exit status of `d2`, never the output file. The man page says a partial render can be written when an error occurs\n2. Run `d2 validate file.d2` before rendering, and `d2 fmt` to normalise the source\n3. Pass `-` for input and output and set `--stdout-format` (svg, png, ascii, txt, pdf, pptx or gif) to work without files\n4. Use `--stdout-format ascii` when the reader is a text-only model\n5. Pass `--bundle=false` or review image URLs and imports before rendering D2 text from an untrusted source. Release 0.9.0 fetches remote images when bundling\n\n### tldraw SDK + MCP\n\n1. Through the MCP App, call `search` on the Editor API spec first, then `exec` with JavaScript that calls `editor` methods\n2. Omit `canvasId` to start a blank canvas, and pass the returned `canvasId` to keep editing the same one\n3. Paste Mermaid into the canvas to get editable shapes instead of placing each shape by hand\n4. Return `editor.getCurrentPageShapes()` from `exec` to check what was drawn\n5. Read the release notes before a minor upgrade. Minor versions can break\n\n## Questions\n\n### Which is better for AI agents, D2 or tldraw SDK + MCP?\n\nD2 scores 65.3 (B) on agent readiness against tldraw SDK + MCP's 60.7 (C), and leads in 4 of 7 scored categories. tldraw SDK + MCP leads on reliability, schema \u0026 documentation and maintenance \u0026 community.\n\n### Are D2 and tldraw SDK + MCP open source?\n\nD2 is open source (MPL-2.0). No open-source release is listed for tldraw SDK + MCP.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/d2-vs-tldraw.json, and with the fewest tokens: https://www.anchorterminal.com/compare/d2-vs-tldraw.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"d2\", \"b\": \"tldraw\"}`. From a terminal: `anchor compare d2 tldraw`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/d2.json and https://www.anchorterminal.com/api/v1/tools/tldraw.json\n\n## Other comparisons with D2 or tldraw SDK + MCP\n\n- [Cloudviz API vs D2](https://www.anchorterminal.com/compare/cloudviz-vs-d2.md)\n- [Cloudviz API vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/cloudviz-vs-tldraw.md)\n- [D2 vs Diagrams.so API + MCP](https://www.anchorterminal.com/compare/d2-vs-diagrams-so.md)\n- [D2 vs Mural MCP](https://www.anchorterminal.com/compare/d2-vs-mural-mcp.md)\n- [D2 vs Whimsical MCP](https://www.anchorterminal.com/compare/d2-vs-whimsical.md)\n- [Diagrams.so API + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/diagrams-so-vs-tldraw.md)\n- [draw.io + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/drawio-vs-tldraw.md)\n- [Eraser API + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/eraser-vs-tldraw.md)\n- [Lucid API + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/lucid-vs-tldraw.md)\n- [Mermaid Chart MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/mermaid-chart-vs-tldraw.md)\n- [Mural MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/mural-mcp-vs-tldraw.md)\n- [Structurizr + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/structurizr-vs-tldraw.md)\n- [tldraw SDK + MCP vs Whimsical MCP](https://www.anchorterminal.com/compare/tldraw-vs-whimsical.md)\n- [D2 vs draw.io + MCP](https://www.anchorterminal.com/compare/d2-vs-drawio.md)\n- [D2 vs Eraser API + MCP](https://www.anchorterminal.com/compare/d2-vs-eraser.md)\n- [D2 vs Lucid API + MCP](https://www.anchorterminal.com/compare/d2-vs-lucid.md)\n- [D2 vs Mermaid Chart MCP](https://www.anchorterminal.com/compare/d2-vs-mermaid-chart.md)\n- [D2 vs PlantUML](https://www.anchorterminal.com/compare/d2-vs-plantuml.md)\n- [D2 vs Structurizr + MCP](https://www.anchorterminal.com/compare/d2-vs-structurizr.md)\n- [PlantUML vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/plantuml-vs-tldraw.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-09",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "D2 vs tldraw SDK + MCP",
        "url": ""
      }
    ],
    "description": "D2 scores 65.3 (B) on agent readiness against tldraw SDK + MCP's 60.7 (C), and leads in 4 of 7 scored categories. tldraw SDK + MCP leads on reliability, schema \u0026 documentation and maintenance \u0026 community. Both do diagram as code. Category scores, facts, verdicts and agent notes…",
    "facts": [
      "D2 B 65.3",
      "tldraw SDK + MCP C 60.7",
      "scores"
    ],
    "h1": "D2 vs tldraw SDK + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-d2-vs-tldraw.png",
    "path": "/compare/d2-vs-tldraw",
    "published": "2026-10-01",
    "section": "tools",
    "title": "D2 vs tldraw SDK + MCP for AI agents, B 65.3 vs C 60.7",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/d2-vs-tldraw"
  },
  "tokens": {
    "markdown": 2150,
    "slim": 730
  },
  "version": 1
}
