The Day I Declared War on Roff

Javor DimitrovJavor Dimitrov
2 min read

It all started with a simple itch:
I wanted a decent GUI man page reader. Something with tabs, searchable text, clickable links, and a clean interface—basically the way documentation should feel in 2025.

I tried a few tools out there. Some were passable. Most felt like half-assed afterthoughts. None of them felt right.
So I said fuck it, I’ll write my own.

And that’s how Qt Maniac was born.

At first, I thought it’d be simple: spawn a man command, parse some output, drop it into a QTextBrowser, done.
That illusion didn’t last long.

What came next was like peeling back the damp wallpaper of a haunted house only to find ancient, blood-soaked Latin scrawled beneath:
groff, troff, mandoc, .B, .BR, \fB, \&", \-, .nf, .fi...
A tangle of macros and escape sequences that felt less like documentation formatting and more like a cryptographic trap designed to drive the reader insane.

The format is technically a language, but one with no consistent rules—where half the syntax exists purely to work around the other half. It's a system built by decades of bitter nerds who clearly hated each other’s styles and decided to leave that hatred encoded in macro form.

Parsing it isn’t like interpreting Markdown or HTML.
It’s like excavating a linguistic ruin, hoping the ghosts you awaken don’t curse your call stack.

Somewhere around my 40th .TP block, I realized something had changed. I was no longer just Javor the developer.
I had become something else.
Something older.
Something angrier.

I became Javor the Elder—the one who remembers.

And with that memory came a cause.

When this Qt Maniac is complete, I won’t be walking away from this mess.
This format—this relic—doesn't belong on modern systems. It’s time someone took a serious look at pulling it off the table.

Maybe I’ll take a stab at it.

Roff delenda est.

0
Subscribe to my newsletter

Read articles from Javor Dimitrov directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Javor Dimitrov
Javor Dimitrov