|
| 1 | +<!doctype html> |
| 2 | +<html lang="en"> |
| 3 | + |
| 4 | +<head> |
| 5 | + <meta charset="utf-8" /> |
| 6 | + <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| 7 | + |
| 8 | + <meta name="description" content="How sukr compares to other static site generators" /> |
| 9 | + <title>Comparison | sukr documentation</title> |
| 10 | + <link rel="canonical" href="https://woile.github.io/sukr/comparison.html" /> |
| 11 | + <link rel="stylesheet" href="./style.css" /> |
| 12 | + <link rel="icon" type="image/png" href="./logo.png" /> |
| 13 | +</head> |
| 14 | + |
| 15 | +<body> |
| 16 | + <aside class="sidebar"> |
| 17 | + <header> |
| 18 | + <a href="./index.html" class="logo"> |
| 19 | + <img src="./logo.png" alt="" class="logo-img" /> |
| 20 | + sukr |
| 21 | + </a> |
| 22 | + <span class="tagline">suckless static sites</span> |
| 23 | + <input type="checkbox" id="nav-toggle" class="nav-toggle" /> |
| 24 | + <label for="nav-toggle" class="hamburger" aria-label="Toggle navigation"> |
| 25 | + <span></span> |
| 26 | + <span></span> |
| 27 | + <span></span> |
| 28 | + </label> |
| 29 | + </header> |
| 30 | + <nav> |
| 31 | + |
| 32 | + |
| 33 | + |
| 34 | + <a href="./getting-started.html" >Getting Started</a> |
| 35 | + |
| 36 | + |
| 37 | + |
| 38 | + |
| 39 | + |
| 40 | + <a href="./deployment.html" >Deployment</a> |
| 41 | + |
| 42 | + |
| 43 | + |
| 44 | + |
| 45 | + |
| 46 | + <a href="./content-organization.html" >Content Organization</a> |
| 47 | + |
| 48 | + |
| 49 | + |
| 50 | + |
| 51 | + |
| 52 | + <a href="./configuration.html" >Configuration</a> |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | + |
| 57 | + |
| 58 | + <a href="./features/index.html" >Features</a> |
| 59 | + |
| 60 | + |
| 61 | + <div class="nav-children"> |
| 62 | + |
| 63 | + <a href="./features/templates.html" >Tera Templates</a> |
| 64 | + |
| 65 | + |
| 66 | + <a href="./features/sections.html" >Sections</a> |
| 67 | + |
| 68 | + |
| 69 | + <a href="./features/syntax-highlighting.html" >Syntax Highlighting</a> |
| 70 | + |
| 71 | + |
| 72 | + <a href="./features/d2-diagrams.html" >D2 Diagrams</a> |
| 73 | + |
| 74 | + |
| 75 | + <a href="./features/mermaid.html" >Mermaid Diagrams</a> |
| 76 | + |
| 77 | + |
| 78 | + <a href="./features/math.html" >Math Rendering</a> |
| 79 | + |
| 80 | + |
| 81 | + <a href="./features/feeds.html" >Atom Feeds</a> |
| 82 | + |
| 83 | + |
| 84 | + <a href="./features/css.html" >CSS Minification</a> |
| 85 | + |
| 86 | + |
| 87 | + <a href="./features/sitemap.html" >Sitemap</a> |
| 88 | + |
| 89 | + |
| 90 | + </div> |
| 91 | + |
| 92 | + |
| 93 | + |
| 94 | + |
| 95 | + <a href="./architecture.html" >Architecture</a> |
| 96 | + |
| 97 | + |
| 98 | + |
| 99 | + |
| 100 | + |
| 101 | + <a href="./comparison.html" class="active" >Comparison</a> |
| 102 | + |
| 103 | + <div class="nav-anchors"> |
| 104 | + |
| 105 | + <a href="#feature-matrix" class="anchor-link level-2">Feature Matrix</a> |
| 106 | + |
| 107 | + <a href="#syntax-highlighting" class="anchor-link level-2">Syntax Highlighting</a> |
| 108 | + |
| 109 | + <a href="#math-rendering" class="anchor-link level-2">Math Rendering</a> |
| 110 | + |
| 111 | + <a href="#diagram-rendering" class="anchor-link level-2">Diagram Rendering</a> |
| 112 | + |
| 113 | + <a href="#when-to-choose-sukr" class="anchor-link level-2">When to Choose sukr</a> |
| 114 | + |
| 115 | + <a href="#when-to-choose-something-else" class="anchor-link level-2">When to Choose Something Else</a> |
| 116 | + |
| 117 | + </div> |
| 118 | + |
| 119 | + |
| 120 | + |
| 121 | + |
| 122 | + |
| 123 | + <a href="./security.html" >Security</a> |
| 124 | + |
| 125 | + |
| 126 | + |
| 127 | + </nav> |
| 128 | + <footer class="sidebar-footer"> |
| 129 | + <a href="https://github.com/nrdxp/sukr">GitHub</a> |
| 130 | + <span>© 2026 nrdxp — MIT</span> |
| 131 | + </footer> |
| 132 | + </aside> |
| 133 | + <main> |
| 134 | +<article class="page" lang="eng"> |
| 135 | + <h1>Comparison</h1> |
| 136 | + |
| 137 | + <p class="lead">How sukr compares to other static site generators</p> |
| 138 | + |
| 139 | + <section class="content"><p>This page provides a factual comparison of sukr with other popular static site generators.</p> |
| 140 | +<h2 id="feature-matrix">Feature Matrix<a class="heading-anchor" href="#feature-matrix">¶</a></h2> |
| 141 | +<table> |
| 142 | +<thead> |
| 143 | +<tr> |
| 144 | +<td>Feature</td> |
| 145 | +<td>sukr</td> |
| 146 | +<td>Zola</td> |
| 147 | +<td>Hugo</td> |
| 148 | +<td>Eleventy</td> |
| 149 | +</tr> |
| 150 | +</thead> |
| 151 | +<tr> |
| 152 | +<td><strong>Language</strong></td> |
| 153 | +<td>Rust</td> |
| 154 | +<td>Rust</td> |
| 155 | +<td>Go</td> |
| 156 | +<td>Node.js</td> |
| 157 | +</tr> |
| 158 | +<tr> |
| 159 | +<td><strong>Single Binary</strong></td> |
| 160 | +<td>✅</td> |
| 161 | +<td>✅</td> |
| 162 | +<td>✅</td> |
| 163 | +<td>❌</td> |
| 164 | +</tr> |
| 165 | +<tr> |
| 166 | +<td><strong>Syntax Highlighting</strong></td> |
| 167 | +<td>Tree-sitter</td> |
| 168 | +<td>syntect</td> |
| 169 | +<td>Chroma</td> |
| 170 | +<td>Plugin-based</td> |
| 171 | +</tr> |
| 172 | +<tr> |
| 173 | +<td><strong>Build-time Math</strong></td> |
| 174 | +<td>✅ MathML</td> |
| 175 | +<td>❌</td> |
| 176 | +<td>❌</td> |
| 177 | +<td>Plugin required</td> |
| 178 | +</tr> |
| 179 | +<tr> |
| 180 | +<td><strong>Build-time Diagrams</strong></td> |
| 181 | +<td>✅ Mermaid/D2 →SVG</td> |
| 182 | +<td>❌</td> |
| 183 | +<td>❌</td> |
| 184 | +<td>Plugin required</td> |
| 185 | +</tr> |
| 186 | +<tr> |
| 187 | +<td><strong>JS-Free Rich Content</strong>¹</td> |
| 188 | +<td>✅</td> |
| 189 | +<td>❌</td> |
| 190 | +<td>❌</td> |
| 191 | +<td>Configurable</td> |
| 192 | +</tr> |
| 193 | +<tr> |
| 194 | +<td><strong>Template Engine</strong></td> |
| 195 | +<td>Tera</td> |
| 196 | +<td>Tera</td> |
| 197 | +<td>Go templates</td> |
| 198 | +<td>Multiple</td> |
| 199 | +</tr> |
| 200 | +</table> |
| 201 | +<p>¹ <em>All generators can produce JS-free HTML for basic content. This row refers to built-in math and diagram rendering without client-side JavaScript. Zola and Hugo require external JS libraries (MathJax, Mermaid.js) for these features.</em></p> |
| 202 | +<h2 id="syntax-highlighting">Syntax Highlighting<a class="heading-anchor" href="#syntax-highlighting">¶</a></h2> |
| 203 | +<p><strong>sukr</strong> uses <a href="https://tree-sitter.github.io/">Tree-sitter</a>, the same parsing technology used by GitHub, Neovim, and Helix. Tree-sitter builds actual syntax trees rather than matching regex patterns, which enables:</p> |
| 204 | +<ul> |
| 205 | +<li>Accurate highlighting of edge cases</li> |
| 206 | +<li>Language injection (e.g., bash inside Nix <code>buildPhase</code>, JS inside HTML)</li> |
| 207 | +<li>Consistent results across all supported languages</li> |
| 208 | +</ul> |
| 209 | +<p><strong>Zola</strong> uses syntect, which is regex-based (Sublime Text grammars). It works well for common cases but can struggle with nested languages or unusual syntax.</p> |
| 210 | +<p><strong>Hugo</strong> uses Chroma, a Go port of Pygments. Similar trade-offs to syntect.</p> |
| 211 | +<h2 id="math-rendering">Math Rendering<a class="heading-anchor" href="#math-rendering">¶</a></h2> |
| 212 | +<p><strong>sukr</strong> renders LaTeX math to MathML at build time using pulldown-latex. The output is browser-native — no JavaScript required in the browser. Modern browsers render MathML directly.</p> |
| 213 | +<p><strong>Zola, Hugo, Eleventy</strong> typically require client-side JavaScript (MathJax or KaTeX.js) to render math, or external tooling pipelines.</p> |
| 214 | +<h2 id="diagram-rendering">Diagram Rendering<a class="heading-anchor" href="#diagram-rendering">¶</a></h2> |
| 215 | +<p><strong>sukr</strong> converts Mermaid or D2 diagram definitions to inline SVG at build time. The diagrams are embedded directly in the HTML — no JavaScript library loads in the browser.</p> |
| 216 | +<p><strong>Other generators</strong> typically include the Mermaid.js library and render diagrams client-side, adding ~1MB to page weight and requiring JavaScript.</p> |
| 217 | +<h2 id="when-to-choose-sukr">When to Choose sukr<a class="heading-anchor" href="#when-to-choose-sukr">¶</a></h2> |
| 218 | +<p>Consider sukr if you:</p> |
| 219 | +<ul> |
| 220 | +<li>Want zero JavaScript in your output</li> |
| 221 | +<li>Need accurate syntax highlighting with language injection</li> |
| 222 | +<li>Prefer a single Rust binary with no runtime dependencies</li> |
| 223 | +<li>Value build-time rendering over client-side hydration</li> |
| 224 | +</ul> |
| 225 | +<h2 id="when-to-choose-something-else">When to Choose Something Else<a class="heading-anchor" href="#when-to-choose-something-else">¶</a></h2> |
| 226 | +<p>Consider Zola, Hugo, or Eleventy if you:</p> |
| 227 | +<ul> |
| 228 | +<li>Need a larger plugin ecosystem</li> |
| 229 | +<li>Require features sukr doesn't have (taxonomies, i18n, etc.)</li> |
| 230 | +<li>Prefer a more established community with extensive themes</li> |
| 231 | +<li>Don't care about client-side JavaScript</li> |
| 232 | +</ul> |
| 233 | +<p>sukr is intentionally minimal. It does a few things well rather than trying to cover every use case.</p> |
| 234 | +</section> |
| 235 | +</article> |
| 236 | +</main> |
| 237 | +</body> |
| 238 | + |
| 239 | +</html> |
0 commit comments