{"id":32635810,"url":"https://github.com/judepayne/dictim","last_synced_at":"2026-03-01T13:04:12.739Z","repository":{"id":138912079,"uuid":"581487871","full_name":"judepayne/dictim","owner":"judepayne","description":"d2's 'datafied' companion!","archived":false,"fork":false,"pushed_at":"2026-03-01T07:40:08.000Z","size":22845,"stargazers_count":24,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-01T10:52:15.690Z","etag":null,"topics":["clojure","d2","data-to-diagram","diagrams","software-architecture","terrastruct","text-to-diagram"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/judepayne.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-12-23T10:33:27.000Z","updated_at":"2026-03-01T07:40:11.000Z","dependencies_parsed_at":"2024-04-03T09:28:41.934Z","dependency_job_id":"b06f3015-4b04-43fa-8701-76f23ffd4ba8","html_url":"https://github.com/judepayne/dictim","commit_stats":null,"previous_names":[],"tags_count":75,"template":false,"template_full_name":null,"purl":"pkg:github/judepayne/dictim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/judepayne%2Fdictim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/judepayne%2Fdictim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/judepayne%2Fdictim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/judepayne%2Fdictim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/judepayne","download_url":"https://codeload.github.com/judepayne/dictim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/judepayne%2Fdictim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29969700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T12:56:10.327Z","status":"ssl_error","status_checked_at":"2026-03-01T12:55:24.744Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","d2","data-to-diagram","diagrams","software-architecture","terrastruct","text-to-diagram"],"created_at":"2025-10-31T00:58:34.754Z","updated_at":"2026-03-01T13:04:12.734Z","avatar_url":"https://github.com/judepayne.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"img/dictim_banner.png\" style=\"width: 990px;\"\u003e\n\n[Wiki](https://github.com/judepayne/dictim/wiki)\n\nCI [![CircleCI](https://dl.circleci.com/status-badge/img/gh/judepayne/dictim/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/judepayne/dictim/tree/main)\nRelease [![Latest Release](https://img.shields.io/github/v/release/judepayne/dictim)](https://github.com/judepayne/dictim/releases)\nLicense [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\u003csmall\u003ed2 compatibility: **0.7.0**\u003c/small\u003e\n\n\u003c/div\u003e\n\n# dictim\n\n#### **d2's datafied companion**\n\nThe dictim project is both a command line tool and clojure library that leverage the underlying power of d2 to transform your data into diagrams.\n\nThe command line tool (**dict**) converts structured data into [d2]((https://d2lang.com)) or beautiful diagrams directly. Generate diagrams from json or [edn](https://github.com/edn-format/edn), parse existing d2 back into data, and automate diagram creation in your workflows.\n\n\n```bash\n# Transform data into a diagram in seconds with the '--image' option\n\ndict -i '[\"app\" \"Web App\"][\"db\" \"Database\"] \\\n         [\"app\" \"-\u003e\" \"db\" \"queries\"]' \u003e diagram.svg\n```\n\n\u003cimg src=\"img/top-example.svg\" style=\"max-width: 180px; height: 280px;\"\u003e\n\n\n## Why dict?\n\n### 🚀 **Diagrams as Data**\nGenerate diagrams programmatically from your data. No more manually updating diagrams when your architecture changes.\n\n### ⚡ **Lightning Fast**\nNative binaries for macOS, Linux, and Windows. No JVM startup time, no dependencies.\n\n### 🔄 **Round-trip Compatible** \nParse existing d2 diagrams back into structured data for analysis, transformation, or migration.\n\n### 🛠 **CI/CD Ready**\nPerfect for documentation pipelines, automated architecture diagrams, and keeping visual documentation in sync with code.\n\n## Quick Start\n\n### Installation\n\n**macOS (Homebrew)**\n```bash\nbrew install judepayne/tap/dictim\n```\n\n**Windows (Scoop)**\n```bash\nscoop bucket add judepayne https://github.com/judepayne/scoop-judepayne\nscoop install dictim\n```\n\nNote: d2 is installed as a dependency by Homebrew, but is not available on Scoop, so please install it as per the [instructions](https://github.com/terrastruct/d2/blob/master/docs/INSTALL.md).\n\n**Linux/Manual Installation**\n```bash\n# Download from releases (amd64)\nwget https://github.com/judepayne/dictim/releases/latest/download/dict-linux-amd64\nchmod +x dict-linux-amd64\nsudo mv dict-linux-amd64 /usr/local/bin/dict\n\n# Or for ARM64\nwget https://github.com/judepayne/dictim/releases/latest/download/dict-linux-arm64\nchmod +x dict-linux-arm64\nsudo mv dict-linux-arm64 /usr/local/bin/dict\n```\n\n**Other Platforms**\n\nAs a babashka uberjar with bbin, please see the [Wiki](https://github.com/judepayne/dictim/wiki) page.\n\n\n*or*\n\ndownload the appropriate release and put on your path.\n\nCheck the [releases page](https://github.com/judepayne/dictim/releases/latest) if none of these options work for you.\n\n### Your First Diagram\n\nCreate a simple json file:\n```bash\necho '[\n  [\"user\", \"User\", {\"shape\": \"person\"}],\n  [\"system\", \"System\", {\"shape\": \"rectangle\"}], \n  [\"user\", \"-\u003e\", \"system\", \"interacts\", {\"style.stroke\": \"blue\"}]\n]' \u003e simple.json\n```\n\nTransform it to d2:\n```bash\ndict -c simple.json\n```\n\n**Output:**\n```d2\nuser: User {shape: person}\nsystem: System {shape: rectangle}\nuser -\u003e system: interacts {style.stroke: blue}\n```\n\nRender with d2:\n```bash\ndict -c \u003c simple.json | d2 - simple.svg\n```\n\nOr just directly:\n```bash\ndict -i \u003c simple.json \u003e simple.svg\n```\n\n## Real-World Examples\n\n### Transforming data from a REST API\n\n```bash\n# Try this now!\ncurl -s \"https://restcountries.com/v3.1/region/europe?fields=name,capital\" | \\\n  jq -r '.[0:6] | map({country: .name.common, capital: (.capital // [\"Unknown\"])[0]}) | \n         [[\"Europe\", \"European Region\"]] + \n         (map([.country, .country])) + \n         (map([.capital, .capital])) + \n         (map([\"Europe\", \"-\u003e\", .country, \"contains\"])) + \n         (map([.country, \"-\u003e\", .capital, \"capital city\"])) | @json' | \\\n  dict -i \u003e europe.svg \u0026\u0026 open europe.svg\n```\n\n\u003cdiv style=\"text-align: center;\"\u003e\n\u003cdiv style=\"width: 900px; margin: 0 auto;\"\u003e\n\n\u003cimg src=\"img/europe.svg\" style=\"width: 900px;\"\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003e [!Tip]\n\u003e Point your AI tool to the dictim syntax [page](https://github.com/judepayne/dictim/wiki/dictim-syntax) and the command line [page](https://github.com/judepayne/dictim/wiki/Command-Line) and it should do great at authoring these little transformer scripts, jq statements.\n\u003e Build up a library!\n\n### System architecture\n\n**edn**\n```edn\n[[\"frontend\" \"React Frontend\" {\"shape\" \"rectangle\"}]\n [\"api\" \"REST API\" {\"shape\" \"hexagon\"}]\n [\"cache\" \"Redis Cache\" {\"shape\" \"cylinder\"}]\n [\"database\" \"PostgreSQL\" {\"shape\" \"cylinder\"}]\n [\"frontend\" \"-\u003e\" \"api\" \"HTTP requests\"]\n [\"api\" \"-\u003e\" \"cache\" \"cache lookup\"]\n [\"api\" \"-\u003e\" \"database\" \"SQL queries\"]]\n```\n\n\u003cimg src=\"img/system-architecture.svg\" style=\"width: 450px;\"\u003e\n\n\n\n### DevOps Pipeline\n\nGenerate deployment diagram from kubernetes infrastructure:\n```bash\nkubectl get services -o json | jq -r '\n  .items | map([.metadata.name, .spec.type]) | @json\n' | dict -i \u003e deployment.svg\n```\n\n**Advanced: Comprehensive microservices architecture**\n\n**infrastructure.json**\n```json\n[\n  [\"nginx-ingress\", \"Ingress Controller\", {\"shape\": \"diamond\"}],\n  [\"frontend-service\", \"React Frontend\", {\"shape\": \"rectangle\"}],\n  [\"api-gateway\", \"API Gateway\", {\"shape\": \"hexagon\"}],\n  [\"user-service\", \"User Service\", {\"shape\": \"rectangle\"}],\n  [\"order-service\", \"Order Service\", {\"shape\": \"rectangle\"}],\n  [\"payment-service\", \"Payment Service\", {\"shape\": \"rectangle\"}],\n  [\"notification-service\", \"Notification Service\", {\"shape\": \"rectangle\"}],\n  [\"user-db\", \"User Database\", {\"shape\": \"cylinder\"}],\n  [\"order-db\", \"Order Database\", {\"shape\": \"cylinder\"}],\n  [\"redis-cache\", \"Redis Cache\", {\"shape\": \"cylinder\"}],\n  [\"message-queue\", \"RabbitMQ\", {\"shape\": \"queue\"}],\n  [\"monitoring\", \"Prometheus\", {\"shape\": \"cloud\"}],\n  [\"logging\", \"ELK Stack\", {\"shape\": \"cloud\"}],\n  [\"nginx-ingress\", \"-\u003e\", \"frontend-service\", \"routes traffic\"],\n  [\"nginx-ingress\", \"-\u003e\", \"api-gateway\", \"API requests\"],\n  [\"frontend-service\", \"-\u003e\", \"api-gateway\", \"AJAX calls\"],\n  [\"api-gateway\", \"-\u003e\", \"user-service\", \"authenticates\"],\n  [\"api-gateway\", \"-\u003e\", \"order-service\", \"order requests\"],\n  [\"api-gateway\", \"-\u003e\", \"payment-service\", \"payment processing\"],\n  [\"order-service\", \"-\u003e\", \"user-service\", \"validates user\"],\n  [\"order-service\", \"-\u003e\", \"payment-service\", \"process payment\"],\n  [\"payment-service\", \"-\u003e\", \"notification-service\", \"payment events\"],\n  [\"order-service\", \"-\u003e\", \"message-queue\", \"order events\"],\n  [\"notification-service\", \"\u003c-\", \"message-queue\", \"consumes events\"],\n  [\"user-service\", \"-\u003e\", \"user-db\", \"stores user data\"],\n  [\"order-service\", \"-\u003e\", \"order-db\", \"stores orders\"],\n  [\"user-service\", \"-\u003e\", \"redis-cache\", \"caches sessions\"],\n  [\"order-service\", \"-\u003e\", \"redis-cache\", \"caches inventory\"],\n  [\"user-service\", \"-\u003e\", \"monitoring\", \"metrics\"],\n  [\"order-service\", \"-\u003e\", \"monitoring\", \"metrics\"],\n  [\"payment-service\", \"-\u003e\", \"monitoring\", \"metrics\"],\n  [\"notification-service\", \"-\u003e\", \"logging\", \"logs\"]\n]\n```\n\nGenerate an infrastructure diagram:\n```bash\ndict -i --theme 3 \u003c infrastructure.json \u003e devops-pipeline.svg\n```\n\n\u003cimg src=\"img/devops-pipeline.svg\"\u003e\n\n\n### Git Branch Analysis\n\nUse a [babashka](https://babashka.org) script to transform git output..\n\n**git-dict.bb**\n```clojure\n#!/usr/bin/env bb\n(require '[cheshire.core :as json]\n         '[clojure.string :as str])\n\n(let [branches (-\u003e\u003e (slurp *in*) str/split-lines)\n      clean-branches (map #(-\u003e % str/trim (str/replace #\"origin/\" \"\")) branches)\n      main-branch \"main\"\n      \n      ;; Create branch nodes\n      branch-nodes (for [branch clean-branches\n                         :when (not= branch \"HEAD\")]\n                     (if (= branch main-branch)\n                       [branch \"Main Branch\" {\"shape\" \"hexagon\"}]\n                       [branch \"Feature Branch\" {\"shape\" \"rectangle\"}]))\n      \n      ;; Create connections from main to feature branches\n      connections (for [branch clean-branches\n                        :when (and (not= branch \"HEAD\") \n                                   (not= branch main-branch))]\n                    [main-branch \"-\u003e\" branch \"branched from\"])\n      \n      dictim-data (concat '({\"direction\" \"right\"}) branch-nodes connections)]\n  (println (json/generate-string dictim-data)))\n```\n\nGenerate a branch visualization:\n```bash\ngit branch -r | bb git-to-dictim.bb | dict -c | d2 - branches.svg\n```\n\n\u003cimg src=\"img/git-branches.svg\" style=\"width: 900px;\"\u003e\n\n### Database Schema\n```edn\n[[\"objects\"\n  {\"shape\" \"sql_table\"}\n  [\"id\" \"int\" {\"constraint\" \"primary_key\"}]\n  [\"disk\" \"int\" {\"constraint\" \"foreign_key\"}]\n  [\"json\" \"jsonb\" {\"constraint\" \"unique\"}]\n  [\"last_updated\" \"timestamp with time zone\"]]\n [\"disks\"\n  {\"shape\" \"sql_table\"}\n  [\"id\" \"int\" {\"constraint\" \"primary_key\"}]]\n [\"objects.disk\" \"-\u003e\" \"disks.id\"]]\n```\n\n\u003cimg src=\"img/database-schema.svg\" style=\"width: 700px;\"\u003e\n\n### Distributed Tracing Sequence Diagrams\n\nVisualize microservice interactions from Jaeger trace data using a babashka script:\n\n**jaeger-to-sequence.bb**\n```clojure\n#!/usr/bin/env bb\n(require '[cheshire.core :as json])\n\n(let [jaeger-data (json/parse-string (slurp *in*))\n      spans (get-in jaeger-data [\"data\" 0 \"spans\"])\n      span-map (into {} (map #(vector (get % \"spanID\") %) spans))\n      services (distinct (map #(get-in % [\"process\" \"serviceName\"]) spans))\n      service-declarations (map #(vector % {\"shape\" \"sequence_diagram\"}) services)\n      \n      interactions\n      (for [span spans\n            :let [references (get span \"references\" [])]\n            ref references\n            :when (= \"CHILD_OF\" (get ref \"refType\"))\n            :let [parent-span-id (get ref \"spanID\")\n                  parent-span (get span-map parent-span-id)\n                  parent-service (get-in parent-span [\"process\" \"serviceName\"])\n                  child-service (get-in span [\"process\" \"serviceName\"])\n                  operation (get span \"operationName\")]]\n        [parent-service \"-\u003e\" child-service operation])\n      \n      ;; Combine sequence diagram declaration, service declarations and interactions  \n      dictim-data (concat [[\"shape\" \"sequence_diagram\"]] service-declarations interactions)]\n  (println (json/generate-string dictim-data)))\n```\n\nGenerate the sequence diagram:\n\n```bash\ncurl \"http://jaeger:16686/api/traces?service=api-gateway\u0026limit=1\" | \\\n  bb jaeger-to-sequence.bb | \\\n  dict -c | d2 --layout elk - trace.svg\n```\n\n\u003cimg src=\"img/jaeger-sequence.svg\"\u003e\n\n### d2 Conversion\n\nConvert existing D2 diagrams to structured data for version control and programmatic manipulation:\n\n**api-system.d2**\n```d2\ndirection: right\n\n# Three-tier architecture\nfrontend: Web Frontend {\n  shape: rectangle\n  style.fill: \"#87CEEB\"\n}\n\napi: REST API {\n  shape: hexagon\n  style.fill: \"#98FB98\"\n}\n\ndatabase: PostgreSQL {\n  shape: cylinder\n  style.fill: \"#FFB6C1\"\n}\n\n# External user\nuser: User {shape: person}\n\n# Relationships\nuser -\u003e frontend: Browser requests\nfrontend -\u003e api: AJAX calls\napi -\u003e database: SQL queries\n```\n\nParse to structured data:\n```bash\ndict -p api-system.d2 \u003e system.edn\n```\n\n**Output: system.edn**\n```edn\n({\"direction\" \"right\"}\n [\"frontend\" \"Web Frontend\" {\"shape\" \"rectangle\" \"style.fill\" \"#87CEEB\"}]\n [\"api\" \"REST API\" {\"shape\" \"hexagon\" \"style.fill\" \"#98FB98\"}]\n [\"database\" \"PostgreSQL\" {\"shape\" \"cylinder\" \"style.fill\" \"#FFB6C1\"}]\n [\"user\" \"User\" {\"shape\" \"person\"}]\n [\"user\" \"-\u003e\" \"frontend\" \"Browser requests\"]\n [\"frontend\" \"-\u003e\" \"api\" \"AJAX calls\"]\n [\"api\" \"-\u003e\" \"database\" \"SQL queries\"])\n```\n\nNow you can version control the structured data, apply programmatic transformations, or generate variations:\n\n```bash\n# Regenerate the diagram\ndict -i --theme 4 \u003c system.edn -o updated-system.svg\n\n# Apply a corporate template  \ndict -i -t corporate-styles.edn \u003c system.edn -o branded-diagram.svg\n```\n\n## Commands\n\n| Command | Description | Example |\n|---------|-------------|---------|\n| `-c, --compile` | Transform data to D2 | `dict -c data.json` |\n| `-i, --image` | Transform data directly to SVG diagram | `dict -i \u003c data.json \u003e diagram.svg` |\n| `-p, --parse` | Parse D2 to structured data | `dict -p diagram.d2` |\n| `-h, --help` | Display help information | `dict --help` |\n\n**Bundled Options:**\n\n| Command | Description | Equivalent |\n|---------|-------------|------------|\n| `-cw` | Compile and watch | `-c -w` |\n| `-pw` | Parse and watch | `-p -w` |\n| `-iw` | Image and watch | `-i -w` |\n| `-aw` | Apply template and watch | `-a -w` |\n\n*(and many other [commands](https://github.com/judepayne/dictim/wiki/Command-Line))*\n\n## Advanced Usage\n\n### Watch Mode for Development\n```bash\n# Auto-regenerate diagram when data changes\ndict -cw architecture.json -o arch.d2\n# Or using separate flags:\ndict -c -w architecture.json -o arch.d2\n\n# Watch and serve the diagram in browser (requires d2)\ndict -iw architecture.json\n```\n\n### Templates and Theming\n```bash\n# Apply consistent styling across diagrams\ndict -c -t corporate-theme.edn system-data.json\n```\n\n### Integration with CI/CD\n```yaml\n# GitHub Actions example\n- name: Generate Architecture Diagrams\n  run: |\n    dict -c infrastructure.json | d2 - docs/architecture.svg\n    git add docs/architecture.svg\n```\n\n## Data Format\n\n'dictim syntax' is a datafied version of d2 that stays close to its syntax. It can be either **json** or **edn** and is easy to learn:\n\n**[edn](https://github.com/edn-format/edn)**\n\n\n```edn\n;; basic shapes and connections\n(\n[:z]\n[\"a\" \"A shape\"]\n[\"b\" \"B shape\"]\n[\"a\" \"\u003c-\u003e\" \"b\"]\n[:z \"-\u003e\" \"b\" \"-\u003e\" \"a\" \"connection lbl\"]\n\n;; shapes can be nested: 'containers'\n[\"ctr\" \"Group\" [\"c1\" \"Aria\"][\"c2\" \"Rames\"]]\n\n;; everthing can be styled with attributes\n[:z \"Obj Store\" {:shape :cloud :style.fill \"red\"}]\n[\"a\" \"\u003c-\u003e\" \"b\" \"order flows\" {\"style\" (:stroke-dash 5)}]\n)\n```\n\n**json**\n\n```json\n[\n  [\"z\"],\n  [\"a\", \"A shape\"],\n  [\"b\", \"B shape\"],\n  [\"a\", \"\u003c-\u003e\", \"b\"],\n  [\"z\", \"-\u003e\", \"b\", \"-\u003e\", \"a\", \"connection lbl\"],\n  [\"ctr\", \"Group\", [\"c1\", \"Aria\"], [\"c2\", \"Rames\"]],\n  [\"z\", \"Obj Store\", {\"shape\": \"cloud\", \"style.fill\": \"red\"}],\n  [\"a\", \"\u003c-\u003e\", \"b\", \"order flows\", {\"style\": {\"stroke-dash\": 5}}]\n]\n```\n\nSee the [wiki](https://github.com/judepayne/dictim/wiki/dictim-syntax) page for the full syntax.\n\n## Documentation\n\n- **[Complete Guide](https://github.com/judepayne/dictim/wiki)** - Comprehensive documentation\n- **[CLI Reference](https://github.com/judepayne/dictim/wiki/Command-Line)** - All command options\n- **[Data Format](https://github.com/judepayne/dictim/wiki/Dictim-Syntax)** - Syntax specification\n- **[Templates](https://github.com/judepayne/dictim/wiki/Templates)** - Styling and theming\n- **[Examples](https://github.com/judepayne/dictim.cookbook)** - Real-world use cases\n\n\n## Use as a Clojure/ Babashka library in your app\n\n[![bb compatible](https://raw.githubusercontent.com/babashka/babashka/master/logo/badge.svg)](https://book.babashka.org#badges)\n\ndict is built on the **dictim** Clojure library. If you're building Clojure applications, you can use dictim directly:\n\n```clojure\n;; deps.edn\n{:deps {io.github.judepayne/dictim {:git/tag \"0.9.4\" :git/sha \"0d4d341\"}}}\n```\n\n**Example Use:**\n\n```clojure\n(require '[dictim.d2.compile :as d2])\n\n(d2/d2 [[\"app\" \"Web App\"] \n        [\"db\" \"Database\"]\n        [\"app\" \"-\u003e\" \"db\" \"queries\"]])\n;; =\u003e \"app: Web App\\ndb: Database\\napp -\u003e db: queries\"\n```\n\nSee the [Wiki](https://github.com/judepayne/dictim/wiki) for more details.\n\n### Related Projects\n\n- **[dictim.graph](https://github.com/judepayne/dictim.graph)** - Convert graph data structures\n- **[dictim.cookbook](https://github.com/judepayne/dictim.cookbook)** - Example diagrams and patterns  \n- **[dictim.server](https://github.com/judepayne/dictim.server)** - HTTP API microservice\n\nSee the **[API Documentation](https://github.com/judepayne/dictim/wiki/API-Reference)** for complete library usage.\n\n\n## License\n\nCopyright © 2025 Jude Payne\n\nDistributed under the [MIT License](http://opensource.org/licenses/MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjudepayne%2Fdictim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjudepayne%2Fdictim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjudepayne%2Fdictim/lists"}