Fe·lix Gieß·mann

OPERATIONS & TECHNOLOGY IN GERMAN–INDIAN BUSINESS · WUPPERTAL · BOCHUM · NEW DELHI

felix@giessmann:~/notes/lynx-as-a-test$ ls -l — you are reading /notes/lynx-as-a-test

Lynx is not nostalgia, it is a test suite

Posted · filed under web, accessibility

This site has a rule: every page must render correctly in Lynx, the text-mode browser that has been quietly working since 1992. People assume this is sentimentality. It is not. It is the cheapest quality gate I know.

Lynx ignores your stylesheet entirely. It cannot run your JavaScript. It has no opinion about your grid system. What it shows you is the document — the actual semantic structure you shipped, stripped of every decision that was merely decorative. And because of that, it fails loudly on exactly the things that matter:

  • Headings that aren’t headings. A <div> styled to look like a heading vanishes into the body text. So the outline collapses, and you can see it collapse.
  • Link text that says nothing. A page full of “click here” and “read more” becomes a list of identical, useless entries.
  • Images doing real work with no alternative text. If a diagram carries information and has alt="", Lynx shows you a hole where the information was.
  • Content in the wrong source order. CSS can move a sidebar anywhere on screen. It cannot move it in the document. If your navigation is authored after your footer, Lynx will tell you.

Now read that list again and ask who else is affected by every single item on it. Screen reader users. People on failing connections where the CSS never arrived. Search engine crawlers. Anyone piping your page through readability. The reason a Lynx check works is that it is a proxy for the document being well-formed in meaning, not just well-formed in syntax — and that property is what accessibility, machine-readability and simple durability all sit on top of.

The check itself is one command:

lynx -dump https://giessmann.net/ | less

If that reads like a sensible document — title, then headings in order, then prose, with the navigation identifiable and the links self-describing — you have done the structural work correctly. Everything after that is upholstery. Good upholstery matters. But it goes on top of a frame, not instead of one.

There is a second-order benefit. A page built to this standard is very hard to make slow. There is no layout-critical JavaScript to block on, no webfont to wait for, no hydration step. This entire site is HTML, one stylesheet and a handful of images generated by a Python script. It renders before you have finished letting go of the Enter key.

None of which requires it to look boring. As you can see.


« Back to the index