Text-based web browsers

(cssence.com)

210 points | by pabs3 11 hours ago

21 comments

  • xelxebar 9 hours ago
    One of my favorite pieces of software is edbrowse[0]. Perhaps surprisingly, I find it quite useful:

      - Main developer is blind, so accessibility has priority;
      - Easily scriptable; think automating captive portal clickthroughs;
      - Reading articles (e.g. Wikipedia) feels closer to reading a book;
      - It even supports JavaScript to a degree!
      - The affordances of line-oriented editing carry over nicely.
    
    In particular, when using line-oriented interfaces, it's quite natural to build up a small collection of context-dependent snippets from documentation, source code, sample code, whatever. Putting a small collage of these on the screen is effortless and an experience I do miss with other UI paradigms.

    The main developer appears to tinker on the project daily and is quite nice to chat with over on libera's #edbrowse. The project does have a small, dedicated following, but I wish more people knew about it!

    [0]:https://github.com/edbrowse/edbrowse

    • ploum 8 hours ago
      edbrowse is awesome. I fear that most people, like OP in this case, don’t really understand the difference between "TUI" (where a terminal is used to display a GUI) and "CLI", where every interaction is a written command resulting in a output.

      I’ve a perfect sight myself but I really like the comfort of linearity with CLI: I ask my computer something, I receive an answer.

      (that’s probably why I’m developping my own CLI browser but is more graphical and less advanced than edbrowse)

      • isametry 3 hours ago
        > my own CLI browser but is more graphical

        So based on the first paragraph, I would’ve assumed “CLI” and “graphical” were mutually exclusive? Did you in fact mean to type “TUI” here? Or is your program something like a hybrid between command-based input and graphical output?

        • anthk 2 hours ago
          No, Offpunk it's command line driven, it just happens it can output images due to sixel support (and maybe in a near future with the w3m's image displaying tool).
    • cess11 3 hours ago
      Looks cool, thanks for recommending it.

      I usually go with w3m for my weirder needs that lie somewhere between a pure HTTP client and a regular web browser, this seems like it might be even more convenient sometimes.

    • anthk 9 hours ago
      I used to use that to fetch odd Japanese translated ROMs from CD Romance. Inb4 some Copyright holder says "buy them legally"... these games won't be released in the West ever.

      In Europe most people played Earthbound (and USA only releases for SNES/MD) under emulators. That's how Nintendo put it in the Super Smash Bros roster. They say the hate emulation; but these tools cemented themselves into retroemulation like no other system, and helped to bring new sagas to the West. For free. You say you lost money because of retro-piracy? You got free marketing for physical scraps technically resting in a warehouse.

      Altough nowadays I'm 100% pro libre gaming; tons of indie/FOSS philosophy overlap: FreedroidRPG, Battle for Wesnoth, Nethack/Slashem, ReTux, SuperTux2...

      Back to edbrowse, it's a mail, irc and SQL client too; and you can script it, a la ed/vi, so you can do magic here.

  • dieggsy 9 hours ago
    The top comment in the article mentions it, but chawan[1] is really quite neat. Many sites are still have their quirks (or may be broken), but I think it's the closest I've seen a text browser approximate a "real" browser. The support for CSS, JS, and images (depends on your terminal) is already quite impressive even if imperfect. To my knowledge it's an actual browser implementation rather than "cheating" by using an existing browser like browsh (which is still quite cool).

    [1] https://chawan.net/

    • mariusor 7 hours ago
      Yep, that's me. :) It's cool when blogs incorporate ActivityPub comments to them.

      I liked chawan from the first time it was shown here on HN, https://news.ycombinator.com/item?id=44293260. It made me add support for CSS Grid API in my sites targeting text browsers.

    • balazs4 9 hours ago
      This!

      `chawan` is really good. I use it very often, and it looks very promising.

      If you are into „browsing the web in terminal“, you should try it.

    • AdInside6 2 hours ago
      Another impressive TUI browser would be https://codeberg.org/janantos/brow6el
  • siraben 6 minutes ago
    browsh and carbonyl[0] are such lifesavers on airplane wifi. I find that carbonyl has even better chromium rendering than browsh.

    [0] https://github.com/fathyb/carbonyl

  • icar 2 hours ago
    > When viewing a web page in a text-based browser, you essentially get plain HTML, no CSS, no JS. There is some “styling”, a result of the elements’ semantics, but don’t expect anything fancy, we are down to colors, indentation, and centered text.

    Reminds me of Gemini protocol. https://gemini.circumlunar.space/

  • Imustaskforhelp 1 hour ago
    I think it might be offtopic but is there any way that there are minimalist browsers which can work on let's say vps's but I wouldn't need to host a complete vnc server or set up with the debugging port magic of puppeteer or chrome

    I think browsh which is a text based web browser is the most recommended for something like this but browsh doesnt map things 1 to 1 and there are still some issues. I wish if there was a simple browsh alternative which could use new image protocols in terminal (I think kitty protocol or other comes to my mind) to basically act as a complete browser.

    Does anyone know of anything like this? I sometimes like the idea of just leaving a tab completely open 24x7 on a vps, I feel like there can be interesting data which can happen because of it. Thoughts?

  • thw_9a83c 4 hours ago
    From the article: In this article I’m not going to include the admittedly cool browsh, because...

    These browsers are cool but I didn't know about browsh [1]. That one is also really cool. Thanks!

    [1]: https://www.brow.sh/

  • mrweasel 7 hours ago
    For many, if not most, of the sites I regularly visit, text based browsers work surprisingly fine. My main complaint is actually the structure of the html. In many cases sites could improve massively, if they moved navigation to below the actual content. Having a large vertical menu taking up the entire screen as the first thing you see is slightly annoying.
    • kps 14 minutes ago
      For the (small, noncommercial) sites I help with, we've always had at least a ‘jump to content’ link at the very top, hidden by CSS, dating back to when lynx was my main browser. In practice today, it's more for people using screen readers.
    • zenmac 1 hour ago
      Best thing about sites that works in TUI browser is that it can also work in Tor Browser "Safest" mode. In fact to those who are saying that these text based website are anti feature. I would argue that it is a safety feature to be able to browse and work in Tor Browser "Safest" mode. In fact ALL web page should strive to work in "Safest" mode, and only throw in bells and whistles when needed. As one can see just by turn on JS the site is NO longer really safe.
    • mariusor 7 hours ago
      I mentioned it in another comment, but @media: grid[1] support can help distinguish the user agents that are text-mode.

      [1] https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/A...

    • demetris 7 hours ago
      I did that that recently for a couple of personal projects and I like it. I think I will start doing it for client sites too.

      https://omnicarousel.dev

      The main navigation menu is just above the site footer in the HTML document.

      Question for people who know that stuff:

      What is the recommended way of hiding features that require JavaScript on browsers that do not support JavaScript, e.g., on w3m?

      • Sn0wCoder 6 hours ago
        "What is the recommended way of hiding features that require JavaScript on browsers that do not support JavaScript, e.g., on w3m?"

        You can try the <noscript> tag.

      • miki123211 6 hours ago
        > The main navigation menu is just above the site footer in the HTML document.

        Just letting you know, that stuff is a bit confusing to screen reader users.

        Though I really wish we standardized on putting content first, like mobile apps do. At least we woulnd't haave to explain to new screen reader users why getting to the f???ing article is so damn hard if you don't know the right incantations to do it quickly.

        • demetris 6 hours ago
          Thank you!

          Would a Jump to navigation link next to Skip to content make this arrangement better for screen reader users?

  • prmoustache 8 hours ago
    Most of the features mentionned in this blog post seem really anti-user to me:

    Popover seems to be a way to do popup that you can't really block. Also having content you want to hide?

    • swiftcoder 5 hours ago
      > Most of the features mentionned in this blog post seem really anti-user to me: Popover seems to be a way to do popup that you can't really block

      I don't see how - popovers are arguably worse for ads (because easier for the ad blocker to find them, versus random divs flowed into the page), and modal dialogs are a pretty common thing in rich web apps.

    • bjourne 7 hours ago
      Cookie pop-ups are mandatory so you need something.
      • prmoustache 5 hours ago
        No, they are only mandatory if you use third party cookies and tracking platforms.

        Consent is not necessary for strictly functional first party cookies. Session and shop cart cookies are examples of that.

        This very site you are commenting on doesn't need a cookie consent form/popup for example.

        The presence of a cookie banner in the first place is a sign that the website you are visiting is run by a bad actor who is into selling your profile and browsing data.

        • ploum 4 hours ago
          It should be said again and again that:

          1. There’s no law requiring a cookie popup.

          2. In Europe, most Cookie popup are, in fact, completely illegal

          3. Most cookie popup come from the same actor who designed them to be, on purpose, as annoying as possible in order to decrease the popular support for the EU GDPR law.

          https://www.bitecode.dev/p/there-is-no-eu-cookie-banner-law

  • PeterStuer 9 hours ago
    How does Cloudflare handle text-based browsers? Do they immediately flag them as bots?
  • noduerme 8 hours ago
    Sadly and disgustingly, I fired up lynx last night and found out that Google will not allow you to search with it anymore. I guess this change happened a few months ago and there was an HN thread about it[0], but I hadn't noticed until now.

    Going to altavista still works great (even though it just redirects you to yahoo ;)

    [0] https://news.ycombinator.com/item?id=45201692

  • charcircuit 7 hours ago
    >w3m and its friends might fall into oblivion.

    w3m's marketshare has always been nonexistent. It already has been in oblivion. Having a GUI is key to making a good web browser that will be used by people.

    • rhdunn 6 hours ago
      Text-based browsers are useful in cases where you don't have access to a graphical display, for example:

      1. your graphics driver isn't loading/working;

      2. you can't log into the GUI due to a bug in the login screen;

      3. you are working on a server that is headless, i.e. doesn't have a GUI installed, or are SSHing into a server/other machine.

      I've experienced (2) a while ago and more recently there was another issue recently with upgrading breaking a system [1]. I also encountered the latter but was unable to keep the terminal open due to that bug (it kept switching back to the login screen), so I had to boot into a system via a USB stick, chroot into the system, then install the uninstalled desktop package.

      [1] https://www.gamingonlinux.com/2025/04/ubuntu-25-04-upgrades-...

      • charcircuit 6 hours ago
        >your graphics driver isn't loading/working

        This is a bigger problem that should be fixed ASAP. OS vendors should never critically break graphics on a OS like this.

        >you can't log into the GUI due to a bug in the login screen;

        Again, the QA department or automated tests of your OS vendor should not let this get released. If such a bug happened there should be a fix rolled out immediately.

        >you are working on a server that is headless

        Why do you need to run the browser on the server? I can't think of a case where you would want to use a text browser there instead of a regular browser on your actual machine.

        >so I had to boot into a system via a USB stick, chroot into the system, then install the uninstalled desktop package.

        It's disappointing that you had to manually fix it compared to it just downloading a fix automatically like what would happen on Windows, Mac, iOS, Android, etc.

        • iamnothere 2 hours ago
          > This is a bigger problem that should be fixed ASAP. OS vendors should never critically break graphics on a OS like this.

          > Again, the QA department or automated tests of your OS vendor should not let this get released. If such a bug happened there should be a fix rolled out immediately.

          On a Linux system, if you go messing around with your configuration enough, you will eventually break something. You are effectively your own QA department in this case. As a kid I did this often, it’s part of the learning process.

          > Why do you need to run the browser on the server? I can't think of a case where you would want to use a text browser there instead of a regular browser on your actual machine.

          You just need to look something up quickly to fix something and you are in front of the server. Or you need to download a configuration file from GitHub and the URL is really long, but you can get there in a few seconds from a web browser. There are other means to get the files to the server but they require more effort, and you are lazy (as is your right).

        • bloovis 4 hours ago
          > Why do you need to run the browser on the server? I can't think of a case where you would want to use a text browser there instead of a regular browser on your actual machine.

          I've had to do that on my VPS a few times when I was debugging my Apache setup and needed to look at a web page that was only visible on the VPS, i.e., not available to the outside world.

          • Imustaskforhelp 51 minutes ago
            Honestly I really agree with this use case and I even created a point asking for some browser like this but one which is more capable than even browsh perhaps, I am not sure if text is just the right choice, we need something between text and complete vnc install or debugging instance

            You can take a look at pinggy.io / tunnl.gg and so many other options where you can just use the standard ssh command to port forward a port for some time and so you can debug it

            I recommend you to take a look at this as well https://github.com/anderspitman/awesome-tunneling?tab=readme...

        • zimpenfish 4 hours ago
          > Why do you need to run the browser on the server?

          I often need to authenticate against one of my Fediverse servers (as part of `toot login` for getting access tokens) and it's easier to open Lynx (which toot will do directly) for that on the server than copy+paste to and from a "real" browser.

        • anthk 5 hours ago
          Third party driver vendors can crap out a graphical login pretty trivially.

          If your driver messes up DWM.exe it can blow your whole compositing service and draw every window in software mode which is, without exaggerating, 10000x slower than Direct Draw/GDI back in the day.

          Ever played an old Direct Draw game on Windows 8 and up? It will crawl. The game can only be played with WineD3D, which is basically a Wine build for Windows and it has ddraw.dll hoooked to its own DirectX or OpenGL libraries. This is the only way to get these games running fast again.

          On software rendering for the whole desktop, the same. A text mode browser (or Dillo, or Links2) can be runable at useable speeds before downloading an updated driver or patch.

          By the moment you try Chromium or Firefox with no acceleration (even under current machines), when you have to run both DWM.exe, the rendering process and desktop done with software rendering in CPU, it will slow down like hell because on top of that it will run some JS crap in the browser for granted on vendor driver pages.

          Maybe a current i7 can withstand it, but not for long as browsers love to spawn threads and eat RAM like crazy. Add a 4K display and say goodbye to performance.

        • cess11 3 hours ago
          One of my main uses for text browsers is scraping. They are typically lightweight and efficient, easy to script against, and I won't end up with premature optimisations where I immediately parse out small pieces of information and discard the rest of the page. Instead I store the dumps and can return to them at a later time when the problem domain changes or I have learned more about it.
  • tcbawo 4 hours ago
    I had an idea once for connecting an old 8-bit computer to the modern web by connecting to a text-based web browser running on another device using the terminal. Maybe one day when I find more time.
    • cess11 3 hours ago
      You can get some of the way there with an Amiga.
  • maxglute 3 hours ago
    Would be nice to have local model inject web content and spit out reader mode text on every page.
  • cons0le 5 hours ago
    Carbonyl is still the goat

    https://github.com/fathyb/carbonyl

  • tvali 6 hours ago
    They could be used in bloody fast AI crawling and browse, for example dynamic webbased finetuning which involves non-static content: I think GET requests are safe in this matter.
  • yashasolutions 6 hours ago
    Interesting find mentioned in the comments - https://chawan.net/
  • rickcarlino 11 hours ago
    > Text-based browsers and modern HTML, no success story in sight. Given the progress we see in web technologies, the gap will only widen, so much so that w3m and its friends might fall into oblivion.

    This is a fun article and the conclusion is very real.

    People shit on Gemini:// because “The web can support text documents”. They say this as if they are actually proposing a real solution. It’s true that the web _can_ support lightweight content (IE5 on Windows 3.1- I was there man), but the problem is that it _won’t_ because it consistently chooses not to. If you’ve ever tried to actually perform this experiment of running the web in text mode you will quickly realize how futile it truly is. Every step you take on a well meaning site like lite.cnn.com is just one click away from transferring you to a bloated SPA app that renders a blank screen on a text-based browser. You can disable JavaScript, or disable images or whatever hoops you want to jump through (increasingly hidden with every FireFox release that goes by) but that’s not going to actually work long term. The web is too extensible and feature hungry to support text based content. It’s better to just use the web for the usual cool shit like WASM and WebRTC or whatever and admit that no one can help themselves and no amount of awareness is going to make the cookie consent banners go away.

    Let’s take Gemini more seriously because it already has adoption and it works and it’s not perfect but it sure as fuck isn’t substack.

    • ploum 8 hours ago
      I’m such a Gemini fan that I’m developing a browser which try to extract content from webpages to turn them into Gemini pages ;-)

      And it works Offline too by caching every request: https://offpunk.net

      • anthk 7 hours ago
        Add a limit on catching (requests per second); if not, tons of Gopher servers will kick me out fast by syncing most phlogs in batch mode :)

        Also, there's no way to reuse w3mimgdisplay in the same way w3m works for the web?

        Finally, I can't find a way to display images with 256 colours by default even if the TERM variable it's set to xterm-256color .

        And, no, I can't use sixels by default under OpenBSD's xterm. Sixel and maybe tektroniks support are disabled at build time.

        EDIT: a good start for w3mimgdisplay:

        https://web.archive.org/web/20210920101125/http://blog.z3bra...

    • rglullis 8 hours ago
      What's the difference between "let's encourage people to create gemini documents" and "let's encourage people to publish text/markdown documents on the www"?
      • ploum 8 hours ago
        That’s subtle but the Gemtext format is really really constrained, which forces people to do one thing: write text. Nothing else.

        So, when you are on Gemini://, you know that you will only encounter linear text. You will read stuff, written by other people. It is really relaxing. I’m a huge fan of Gemini.

        I would advice to start your Gemini journey by reading links on Antenna and Cosmos (which are link aggregators)

        https://offpunk.net/gemini.html

        • rglullis 7 hours ago
          > I’m a huge fan of Gemini.

          I'm not. I get the whole "the medium is the message" and why it feels appealing to some, but I don't subscribe to the idea that the only way to have proper digital hygiene is by restraining myself to this ascetic channel. I'd rather encourage more people to put content on the web in whatever form they think is best, and I'll let it up to my user agent to filter out the noise.

      • wibbily 7 hours ago
        The dream of course would be both: if you’re already writing textual content you might as well publish it on both protocols, so anyone can get to it with any tool they like. Gemtext can be trivially converted up to Markdown, the opposite is lossy but very doable.
    • qznc 7 hours ago
      I really like reading text with variable-width fonts. Gemini requires fixed-width fonts due to its terminal-based approach. Thus, I have no desire to use it ever.
      • ploum 4 hours ago
        No. There are graphical browser like Lagrange. It is up to you.
      • SuperNinKenDo 6 hours ago
        I've only dabbled in Gemini so I don't know their names off the top of my head, but I tried out a number of GUI Gemini browsers in the past, and they're quite nice. Easy on the eyes, simple design, all the variable width fonts you could ask for if that's your bag.
    • harendra007 10 hours ago
      Quick question on gemini://, I have no idea what gemini:// is but I typed gemini:// on my mac and it prompted to open my iterm shell. Is this a normal behavior, I am using chrome browser.
      • filmor 9 hours ago
        https://en.wikipedia.org/wiki/Gemini_(protocol)

        It is a simpler web and requires a separate browser or a plugin. It's difficult to find resources on it nowadays because of Google Gemini...

      • ks2048 9 hours ago
        There's a tool called lsregister on macOS to show claimed schemes for different apps. Mine shows for iTerm2,

            claimed schemes:            ftp:, gemini:, gopher:, http:, https:, iterm2:, mailto:, news:, nntp:, ssh:, telnet:, titan:, wais:, whois:, x-man-page:
        • ploum 8 hours ago
          Probably because you could install Terminal Gemini clients like Amfora or Offpunk.
    • CIPHERSTONE 3 hours ago
      Gemini is my go to now when I need a recipe. Pick a recipe site, any recipe site, and its guaranteed to be the most painful experience on mobile, and slightly less painful on a laptop experience you have on the web. Pure fucking trash. And if you happen to be a recipe publisher who does this and is reading this, fuck you.

      Enter Gemini. It consistently can give me a text only version of the recipe that I can copy into a notes app if I want with zero pain. Zero. Now I have my own set of "wtf are you doing Gemini" and "why are you halucinating on this request" experiences at work with Gemini, but recipe extraction.. the goat.

      • fenwick67 1 hour ago
        Wrong Gemini, the above poster is talking about the protocol, you are talking about the LLM
    • thunderbong 10 hours ago
      Totally valid points.

      By the way, only on re-reading your comment, I realised you're taking about the Gemini protocol and not the AI engine!

    • esseph 10 hours ago
      Hmmm

      I have no idea how this would work just brainstorming.

      Could you.. use some browser backend to render the page to a PDF, then an LLM to scrape the content and display it as text?

      I know it wouldn't be exactly efficient, but...

      • ploum 4 hours ago
        So you mean that someone use LLM to generate a website full of JS, post a text in it and then we use LLM to try to rebuild the original content?

        If only we had a way to just share text without all those steps…

        • esseph 57 minutes ago
          You're misunderstanding.

          You go to site with your text browser. An LLM loads and renders the content in memory and then is helping to convert that to a text only interface for your tui browser to display and navigate.

          Apparently other systems are using a similar method.

      • worksonmine 9 hours ago
        A more pragmatic approach would be to run the content through something like readability[0] but leaves navigation untouched. The AI could hallucinate and add content that isn't in the original, something accessibility tools don't.

        [0]: https://github.com/mozilla/readability

        • ploum 8 hours ago
          This is exactly what Offpunk is doing: displaying the html page after it passed throught Readability.

          https://offpunk.net

          The whole page is still available with "view full" (or "v full")

          In the current trunk, if configured, it uses ftr-site-config rules to extract content for specific websites ( https://github.com/fivefilters/ftr-site-config )

          I do 90% of my browsing using Offpunk (reading blogs and articles) and, suprizingly, it often works better than a graphical browser (no ads, no popup, no paywall). Of course, it doesn’t work when you really needs JS.

          • anthk 7 hours ago
            Dillo uses something similar with rdrview, you can use rdrview://$URL (altough I hacked the dpi plugin to use the rd:// 'protocol' for shortness).

            It lacks the filter thingy but now has the dilloc tool where it can print the current URL, open a new page... and with sed you can trivially reopen a page with an alternative from https://farside.link

            You know, medium.com -> scribe.rip and the like.

            But Dillo is not a terminal browser, altough it's a really barebones one and thanks to DPI and dilloc it can be really powerful (gopher, gemini, ipfs, man, -info in the future) and so on available as simple plugins, either in sh, C or even Go) and inspiring for both offpunk and w3m (where it has similar capabilities as Dillo to print/mangle URL's and the like).

            What I'd love is to integrate Apertium (or any translating service) with Dillo as a plugin so by just running trans://example.com you could get any page translated inline without running tons of Google propietary JS to achieve the same task.

            I love the https://linux.org.ru forum and often they post interesting setups but I don't speak Russian.

  • moron4hire 3 hours ago
    The note that someone told them DataList might be bad for accessibility is the first I'm hearing of it. Does anyone know what is meant by this?

    This reminds me of a problem I've been having with some accessibility issues: maybe, sometimes, occasionally, the accessibility problems a site has aren't the authors' fault but the fault of the folks writing the screen reader software. I've tried using screen reader software and it is an awful experience. It's nearly impossible to create a good experience for screen readers because they are all their own, unique microcosm of unstandardized garbage and bugs.

  • RockieYang 7 hours ago
    Niche idea. It could filter out a lot of noise
  • jibal 2 hours ago
    > and what enrages me the most

    So go fork and fix an open source browser to your satisfaction.

  • sylware 5 hours ago
    You do not need much more than a semantic 2D table with proper navigation ids. Does wonders with basic HTML forms. You can augment it with a simple CSS in order to give to it a nice look. A troubling issue is "border" in semantic tables: they are a semantic information, not style, it should not be deprecated.

    Tested edbrowse javascript, hardly anything works. Maybe the edbrowse developer should get closer to netsurf libraries and work there on quickjs support.