01 Module · Why Jekyll
The website that has
nothing to go wrong.
Jekyll takes Markdown and templates and produces a directory of HTML. That is the whole product. Everything good about it follows from that one decision — and so does every honest limitation.
- First released
- 2008
- Written in
- Ruby
- Runtime in production
- None
- Licence
- MIT
Almost every website disaster we have been called in to clean up had the same shape: something was running that did not need to be.
A content management system is a program that sits on a public IP address, talks to a database, executes plugin code written by strangers, and regenerates the same page for every visitor. It has an administrative login. It has a version number that needs to keep moving. It has a dependency tree nobody has read.
For a documentation portal or a marketing site — content that changes a few times a week and looks identical to every visitor — all of that machinery is pure liability. It buys you nothing and it can fail in several hundred ways.
Jekyll deletes the machinery. You write Markdown, it produces HTML, and a web server sends the HTML. There is no process to compromise, no query to slow down, no plugin to patch on a Sunday evening.
Argumenten · The case
Eight reasons,
in order of how often they matter.
Ranked by what actually comes up in the second year of owning a site, rather than what sounds best in the first week.
01 The attack surface is a file server
No database, no interpreter, no admin login, no plugin marketplace. The
well-worn categories of website compromise — SQL injection, plugin RCE, credential stuffing on
/wp-admin — have nowhere to land. Your security posture becomes "keep nginx patched".
02 Every edit is a reviewable commit
Content lives in Git next to the code. Who changed the pricing page, when, and
why is a git log away. Reverting a bad Friday deploy is one command, and legal can be
given a signed history of a public claim.
03 It is genuinely fast
Static HTML from a European server or CDN edge answers in tens of milliseconds rather than hundreds. There is no cold start, no query plan and no cache to warm — which is why the performance stays fast eighteen months later.
04 Traffic spikes are boring
A front-page link on a Tuesday is a bandwidth question, not an architecture question. The same €4 machine that serves forty visitors serves forty thousand, and the invoice looks the same at the end of the month.
05 The repository is the backup
There is no database to dump, no uploads directory to sync, no restore procedure to rehearse. Any developer with a clone can rebuild the entire site on a laptop, offline, in under a second.
06 Non-developers can still edit it
This is the objection we hear most, and it has been solved for a decade. We wire a Git-backed editing interface with normal write-and-preview behaviour: marketing never opens a terminal, engineering never loses version control.
07 No lock-in worth the name
Your content is Markdown. Your templates are HTML with Liquid tags. If Jekyll vanished tomorrow, the output directory would keep serving indefinitely and a port to another generator would be a week, not a rebuild.
08 It has already outlived its replacements
Jekyll shipped in 2008 and still builds the same way. Several generations of static generators have been announced, adopted and abandoned in that window. Boring longevity is the feature you appreciate in year four.
Jämförelse · Side by side
Against a typical CMS
Figures from sites we operate, measured from Frankfurt. Your numbers will differ; the shape of the difference will not.
| Concern | Typical CMS | Jekyll, as we build it |
|---|---|---|
| Runtime on the public internet | PHP or Node, plus a database | nginx serving files |
| Time to first byte | 200–900 ms | Under 40 ms |
| Monthly hosting | €25–€200 | €4, or free from a CDN |
| Security patching cadence | Core, themes and every plugin | The web server, and Ruby at build time |
| Version history | A revisions table, if enabled | Complete Git history with authorship |
| Staging environment | A second installation to keep in sync | A branch and a preview build |
| Backups | Database dumps plus an uploads directory | The repository, cloned everywhere |
| Localisation | A plugin, usually paid | Directories and front matter |
| Editing for non-developers | Built in | Git-backed editor, wired by us |
| Dynamic user accounts, checkout, search-as-you-type | Built in | Wrong tool — we quote Rails instead |
Hur vi bygger · Our build
What a Chenborg Jekyll site actually contains.
We do not buy themes and we do not ship a default install. Every site is a design system authored from scratch, with the performance budget and the accessibility rules enforced in CI so that they survive contact with the second year.
- A bespoke theme — typography, grid, colour tokens, dark mode, print styles
- Content modelled in collections and data files, not copy-pasted between pages
- Git-backed editing for colleagues who do not use a terminal
- Multilingual routing, structured data, sitemap, Atom feed, clean canonical URLs
- CI on Forgejo or GitLab that builds, checks links and refuses a bloated page
- Deployment by rsync to nginx on NixOS, in Stockholm or Falkenstein
- No third-party scripts, no cookie banner, no tracker to disclose
chenborg.com/ ├── _config.yml # one file, no admin panel ├── _data/ # stack.yml, faq.yml, people.yml ├── _includes/ # head, header, footer, tiles ├── _layouts/ # default, page, post, service ├── _posts/ # the journal, in Markdown ├── _sass/ # tokens, base, components ├── _services/ # a collection, not nine pages ├── assets/ │ ├── css/main.scss │ ├── js/main.js # 1.6 kB, no dependencies │ └── img/logos/ └── index.html # build output $ du -sh _site 412K _site # the entire website
I gott sällskap · In good company
Jekyll is not a niche choice.
A partial reading of the official Jekyll showcase. Governments, standards bodies and framework maintainers reached the same conclusion we did.
Ruby on Rails
rubyonrails.org — the framework's own site.
U.S. Web Design System
The design standard for American federal government sites.
plainlanguage.gov
Alongside login.gov, foia.gov and 18F.
Spotify for Developers
With Netflix Devices, Twitch developer docs and Sketch.
Isomer, Singapore
A whole-of-government publishing platform, built on Jekyll.
UN World Statistics
With the French government's digital services.
The Markdown Guide
With CSS Reference and HTML Reference.
Development Seed
And COLLINS — studios who could have used anything.
Ärligt talat · Honestly
When Jekyll is the wrong answer.
A tool this sharp has a clear edge, and pretending otherwise would cost you more than it costs us. We will steer you elsewhere when you need:
- Per-user state — accounts, dashboards, permissions, anything where two visitors must see different pages. That is a Rails application.
- Transactions — checkout, booking, payment. Static generation has no place to put the money.
- Content that changes by the minute — live inventory, ticketing, a newsroom filing every ten minutes. A rebuild per change stops being funny somewhere past a thousand pages an hour.
- Very large corpora — tens of thousands of pages will build, but the build stops being pleasant. There are incremental generators, and we will name one.
- An editorial team that will not adopt any workflow — the Git-backed editor solves most of this, but not a team that has decided in advance to be unhappy.
Roughly a third of the time, the answer to "should this be Jekyll?" is no. We would rather say that in the first meeting than in the fourth month.