Over the past few days, I experimented with several terminal-based browsers on my Debian system: Lynx, ELinks, w3m, and Browsh. Each offered a very different experience, and I quickly realized just how limited – or surprisingly capable – text-mode browsing can be.
I started with Lynx, the simplest and most austere of the group. Navigating pages was straightforward with the arrow keys, and I could perform searches on Google, but that was about it. Logging into interactive sites like Reddit proved impossible, as Lynx has no support for JavaScript or modern web forms. Pages rendered as plain text, which was fine for reading static content but completely unusable for anything interactive.
Next, I tried ELinks. It felt like a small step up from Lynx: there were menus, color support, and the ability to open new tabs with the “t” key. Navigating back and forth between pages was easier, and the configuration options available via the menu or in ~/.config/elinks/ allowed me to tweak display and behavior. Still, the browser couldn’t handle JavaScript, so most login forms and dynamic sites remained inaccessible. I could make pages look more structured, but only within the limits of text rendering.
w3m was my next stop. It impressed me with practical features: in certain terminals it could even render images, and it handled tables and frames reasonably well. The options menu allowed me to make adjustments that could be saved permanently, which felt like a small luxury. Navigation and scrolling were smooth, and it was generally responsive. Yet, like Lynx and ELinks, it could not process JavaScript-heavy sites, meaning modern login systems were still off-limits.
Finally, I explored Browsh, which was a very different beast. It runs a headless Firefox in the background, streaming pages into the terminal. This meant that JavaScript worked, and I could load modern sites such as Google and Reddit. The trade-off, however, was performance: scrolling was slow, page loads lagged, and the interface felt heavy. Configuring Browsh was another challenge. Its INI-style configuration file in ~/.config/browsh/ was dense, and some options I expected, like controlling image rendering, were missing. Attempting to tweak the file sometimes caused errors, and occasionally Browsh would fail to start with the message “A headless Firefox is already running,” requiring me to manually kill lingering Firefox processes. Opening links and accessing settings was more cumbersome than in w3m, and while it delivered full compatibility with modern pages, it never felt as snappy or lightweight as the older text browsers.
Overall, my experiments showed that terminal browsers have real limitations. Lynx and ELinks are excellent for fast, distraction-free reading but fail on interactive or JavaScript-heavy sites. w3m adds useful features and saves configurations, making it more practical for everyday text browsing. Browsh offers modern compatibility and the ability to run JavaScript, but at a significant cost in speed and simplicity. For now, these tools are interesting experiments, useful for minimal browsing and exploration, but they cannot replace a graphical browser for day-to-day modern web use.