<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Jeff Bailey | Comparison</title><link>https://jeffbailey.us/categories/comparison/</link><description>This website contains learning resources, opinions, and facts about software-related technology.</description><language>en</language><generator>Hugo</generator><atom:link href="https://jeffbailey.us/categories/comparison/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Sun, 20 Sep 2026 00:00:00 +0000</lastBuildDate><item><title>Structurizr vs Mermaid vs PlantUML for C4 Diagrams</title><link>https://jeffbailey.us/blog/2026/09/20/structurizr-vs-mermaid-vs-plantuml/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/09/20/structurizr-vs-mermaid-vs-plantuml/</guid><pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Comparison</category><category>Software Architecture</category><category>Developer Tools</category><description><![CDATA[<p>Three tools draw <a href="https://c4model.com/">C4 diagrams</a> from text, and picking between them looks like a taste question about syntax. It is mostly a question about what you want to keep: a picture, or a model that can produce pictures.</p>
<p>Everything below was run on one system modeled three ways, with Structurizr 2026.09.19 (structurizr-* 6.2.3), Mermaid CLI 11.17.0 on mermaid 11.17.2, and PlantUML 1.2026.8 on Graphviz 16.1.0.</p>
<h2 id="the-short-answer">The short answer</h2>
<div class="card-grid" style="--min-width: 250px;"><div class="card"><strong>Reach for Structurizr</strong>
When the same system needs more than one diagram. You describe the model once and generate every view from it, so a renamed container changes in one place.</div><div class="card"><strong>Reach for Mermaid</strong>
When the diagram must render where it lives, in a README or a wiki, with no build step and no renderer to install.</div><div class="card"><strong>Reach for PlantUML</strong>
When layout quality matters most. Graphviz routes edges around boxes, and no other option here does.</div></div><style>
  .card-grid {
    display: grid;
    gap: 1rem;
    margin: 1.5rem 0;
    grid-template-columns: repeat(auto-fit, minmax(var(--min-width), 1fr));
  }

  .card-grid .card>strong:first-child,
  .card-grid .card>h1:first-child,
  .card-grid .card>h2:first-child,
  .card-grid .card>h3:first-child,
  .card-grid .card>h4:first-child,
  .card-grid .card>h5:first-child,
  .card-grid .card>h6:first-child {
    font-size: 1.1em;
    display: block;
    margin-bottom: 0.75rem;
    margin-top: 0;
    color: var(--text-color);
  }

  .card-grid .card {
    color: var(--text-color);
    background-color: var(--background-color);
    border: 2px solid var(--border-color, #e0e0e0);
    border-radius: 8px;
    padding: 1.25rem;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  }

   
  .blog-card {
    display: flex;
    flex-direction: column;
    transition: transform 0.2s ease, box-shadow 0.2s ease;
  }

  .blog-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
  }

  .blog-card-header {
    display: flex;
    flex-direction: column;
    align-items: left;
    gap: 1rem;
    margin-bottom: 0.75rem;
  }

  .blog-logo {
    object-fit: contain;
    flex-shrink: 0;
    border-radius: 4px;
    background: var(--background-color);
    padding: 4px;
  }

  .blog-logo.blog-logo-sized {
    box-sizing: border-box;
  }

  .blog-logo-sized {
    width: var(--logo-size, 64px);
    height: var(--logo-size, 64px);
    max-width: var(--logo-size, 64px);
    max-height: var(--logo-size, 64px);
  }

  .blog-title {
    margin: 0;
    font-size: 1.1em;
    text-align: center;
  }

  .blog-title a {
    color: var(--text-color);
    text-decoration: none;
  }

  .blog-title a:hover {
    text-decoration: underline;
  }

  .blog-description {
    margin: 0 0 1rem 0;
    color: var(--text-color);
    opacity: 0.9;
    line-height: 1.5;
    flex: 1;
  }

  .blog-card-items {
    margin: 0;
    padding-left: 1.25rem;
    color: var(--text-color);
    line-height: 1.5;
    flex: 1;
  }

  .blog-card-items li {
    margin-bottom: 0.25rem;
  }

  .blog-links {
    display: flex;
    align-items: center;
    gap: 1rem;
    margin-top: auto;
  }

  .blog-link {
    color: var(--link-color, #0066cc);
    text-decoration: none;
    font-weight: 500;
    display: inline-block;
  }

  .blog-link:hover {
    text-decoration: underline;
  }

   
  .searchable-blog-cards {
    margin: 1.5rem 0;
  }

  .searchable-blog-cards .blog-cards-search-input {
    display: block;
    width: 100%;
    max-width: 24rem;
    margin-bottom: 1rem;
    padding: 0.5rem 0.75rem;
    font-size: 1rem;
    border: 2px solid var(--border-color, #e0e0e0);
    border-radius: 6px;
    background: var(--background-color);
    color: var(--text-color);
  }

  .searchable-blog-cards .blog-cards-search-input:focus {
    outline: none;
    border-color: var(--link-color, #0066cc);
  }

  .searchable-blog-cards .blog-card.hidden {
    display: none;
  }

  .visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }
</style>

<p>These are not three competitors for one slot. Structurizr exports PlantUML and Mermaid, so the real choice is whether you keep a model upstream of whichever renderer you already use.</p>]]></description></item><item><title>jq vs yq: Which One Should You Use?</title><link>https://jeffbailey.us/blog/2026/09/20/jq-vs-yq/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/09/20/jq-vs-yq/</guid><pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Comparison</category><category>Command Line</category><category>Developer Tools</category><description><![CDATA[<p>Both tools filter structured data with a similar language, so the question looks like a choice. It usually isn&rsquo;t. jq reads JSON; yq reads YAML and four other formats, and writes them back with your comments intact. Most people end up with both installed.</p>
<p>This compares them where they actually differ: file formats, syntax compatibility, in-place editing, and speed. Everything below was run with jq 1.8.2 and yq v4.53.6 (the Go one) on the same files.</p>]]></description></item></channel></rss>