# rdrview runs a browser style reader extraction from the terminal

> rdrview is a small C program that pulls the main article out of a webpage and hands it to a character mode browser, aimed at people who read RSS in a terminal. The interesting part is the sandbox it puts the HTML parser in.

**eafer/rdrview** — Firefox Reader View as a command line tool

- Repository: https://github.com/eafer/rdrview
- Stars: 939 · Forks: 39
- Language: C
- License: Apache-2.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/eafer-rdrview

## A reader mode that ends in a text browser

Terminal RSS readers show you a wall of markup stripped of images and scripts, and long articles arrive with navigation, share buttons and subscription prompts still in the text. rdrview is a command line tool that extracts the main content from a webpage, the same job the Reader View feature does in a modern browser, and it was written to sit in front of a character mode browser so the article reads cleanly. The stated audience is people using terminal RSS readers, and the output is expected to be mostly equivalent to what Firefox produces. That last point matters for how you judge the tool: it is a port of an existing algorithm rather than a new heuristic, so the extraction quality on a given page should track Firefox closely.

## A hand transpilation of Mozilla's Readability.js

The code is closely adapted from the Firefox implementation of Readability.js, and the credits section goes further, describing the project as a transpilation done by hand of Mozilla's Readability.js, which was itself heavily based on Arc90's readability.js. The upstream licence notice is reproduced in the project, including the Arc90 copyright line and the Apache 2.0 text. In the source layout this shows up as a src/ directory of C files with a src/rdrview.h header shared by them, and the build records the current commit in a generated header:

```makefile
src/version.h: COMMIT
	@printf '#define GIT_COMMIT\t"%s"\n' $(GIT_COMMIT) > src/version.h
```

That means a binary carries the short commit hash it was built from, which is a useful detail when you are running several copies on different machines and want to know which one you have.

## HTML parsing happens inside a sandboxed subprocess

The project is young and written in C, and the author says outright that it is reasonable to worry about memory issues. The answer is architectural rather than a promise: all HTML parsing happens inside a sandboxed subprocess, with the sandbox mechanism chosen per operating system. Seccomp on Linux restricts the system calls the parser can make, Pledge on OpenBSD confines it further, and Capsicum does the equivalent job on FreeBSD. The point of running the parser in a separate, confined process is that a bug in the HTML handling, which in a browser would be handled by the browser's own sandbox, does not inherit the privileges of the shell that invoked the tool. This is the part of the design worth copying, and it is also the part most constrained by the operating system underneath.

## Building on Debian, Fedora and the BSDs

The Linux build has three direct dependencies: libxml2, libseccomp and libcurl. On Debian and Ubuntu the first two come from:

```bash
apt install libxml2-dev libseccomp-dev
```

The libcurl package comes in different flavours depending on which backend provides the SSL support, and any of them will do, so the GnuTLS variant is the one named:

```bash
apt install libcurl4-gnutls-dev
```

A character mode browser is needed for the tool to be useful, and lynx is the one given:

```bash
apt install lynx
```

Package names differ by distribution, so on Fedora the equivalent single line is:

```bash
dnf install libcurl-devel libxml2-devel libseccomp-devel lynx
```

The build itself is a plain make in the source directory, and the first thing to try is pointing it at a page:

```bash
make
./rdrview 'https://github.com/eafer/rdrview'
```

The man page ships with the source and installs alongside the binary.

## Where the BSDs need an extra flag and macOS needs a warning

On the BSDs you also need GNU make, and the package installs differ. OpenBSD:

```bash
pkg_add gmake gcc libxml curl lynx
```

FreeBSD:

```bash
pkg install gmake gcc libxml2 curl lynx
```

After that, gmake builds it and gmake install puts it in place. The BSDs ship no mailcap file by default, so rdrview has no idea which browser to hand the text to, and you have to name it explicitly:

```bash
./rdrview -B lynx 'https://github.com/eafer/rdrview'
```

macOS is the weak spot. The author does not own Apple computers, so the build is reported rather than confirmed by the person who wrote it, and no sandbox is implemented there. The tool still runs with the --disable-sandbox flag, as long as you accept the risk. That is the clearest statement in the project about where its safety argument does not hold.

## A two stage Docker image that ships lynx with the binary

The repository carries a Dockerfile that packages the tool for containers. The builder stage installs the compiler and the three development libraries, copies the tree in, and builds and installs:

```dockerfile
FROM debian AS builder

RUN apt update && apt install build-essential libxml2-dev libseccomp-dev libcurl4-gnutls-dev -y
COPY . .
RUN make && make install
```

The runtime stage is a plain Debian with the runtime libraries and a browser, and only the binary crosses over from the builder:

```dockerfile
FROM debian
RUN apt update && apt install -y libcurl3-gnutls libxml2 lynx
COPY --from=builder /usr/local/bin/rdrview /usr/local/bin/rdrview
CMD ["/usr/local/bin/rdrview"]
```

Because the runtime image includes lynx, a container that runs rdrview can render the extracted article without a browser on the host, which is the arrangement that makes sense for a script that feeds a feed reader.

## Small versions, a recent push and an Apache 2.0 licence

The version numbers here are small and the cadence is regular. The tagged releases are v0.1.3 on 2024-10-28, v0.1.4 on 2025-05-11 and v0.1.5 on 2025-10-04, and the last push to the master branch was on 2026-08-31. That is recent activity on a small codebase, and the tool itself is described as young, so an upgrade is a rebuild rather than a migration. The licence field on the repository says Apache-2.0, and since the algorithm comes from Mozilla's Readability.js, which is under the same licence, and that in turn derives from Arc90's readability.js, the notices are reproduced in the project rather than stripped out. Anyone redistributing the binary keeps those attribution obligations, which is a mild cost compared with the code being freely usable in a pipeline.

## Conclusion

Use rdrview when you read RSS in a terminal browser and want articles stripped of navigation and ads before lynx sees them, and expect to install it from source on Linux, OpenBSD or FreeBSD where the seccomp, Pledge and Capsicum sandboxes exist. Skip it on macOS if you cannot accept a parser running without a sandbox, and skip it if your reading already happens in a browser that ships its own reader mode. Verify first that the version you pick has the sandbox you rely on, that a default profile-less browser is configured for the BSDs with the -B flag, and that the output you get matches what Firefox would show for the same page.

## FAQ

### What is rdrview used for?

It extracts the main content from a webpage, the way the Reader View feature of a modern browser does, so the result can be handed to a character mode browser. It is intended to be used with terminal RSS readers, and the output is expected to be mostly equivalent to the Firefox version.

### How does rdrview protect itself when parsing untrusted HTML?

All HTML parsing happens inside a sandboxed subprocess. Seccomp is used on Linux, Pledge on OpenBSD and Capsicum on FreeBSD, so a fault in the HTML handling is contained in a confined process.

### How do I build and install rdrview on Linux?

Install libxml2-dev, libseccomp-dev and a libcurl development package such as libcurl4-gnutls-dev, plus lynx if you want a browser to render the output. Then run make in the source directory, and make install to place the binary and its man page.

### Why does rdrview fail on OpenBSD and FreeBSD without a browser flag?

The BSDs do not provide a mailcap file by default, so rdrview has no default browser to hand the extracted text to. Name one explicitly with the -B option, for example ./rdrview -B lynx with the URL as the argument.

### Does rdrview work on macOS?

The project reports that it builds on macOS, but no sandbox is implemented there. It can be run with the --disable-sandbox flag, and the author states that the user has to accept the risk.

## Sources

- [eafer/rdrview on GitHub](https://github.com/eafer/rdrview)
- [Issues](https://github.com/eafer/rdrview/issues)
- [License: Apache-2.0](https://github.com/eafer/rdrview/blob/master/LICENSE)
- [README](https://github.com/eafer/rdrview/blob/master/README.md)
- [Releases](https://github.com/eafer/rdrview/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/eafer-rdrview
