
Browsh for text-based internet browsing (2018) - doener
https://www.hanselman.com/blog/LynxIsDeadLongLiveBrowshForTextbasedInternetBrowsing.aspx
======
kaiwen1
I sail on merchant ships and Lynx is my primary browser on extremely slow and
laggy satellite connections at sea. You really need to curate what sites you
will use with it because most modern sites degrade to unusable. But when you
find one that does degrade gracefully, it can be a better experience to use
Lynx than a modern browser. I like Lynx so much that I sometimes use it
ashore.

~~~
caioariede
Any major websites doing this well? The impression I have is that current
technologies are not making it easier for Lynx to survive. In the other hand,
I see people that can actually(?) browse without Javascript enabled, which
makes me curious about the current state of things.

~~~
wgerard
Funnily enough, HN actually works reasonably well in lynx.

~~~
Scoundreller
As long as you don’t type « g » « news.ycombinator.com » and then Lynx thinks
you’re trying to access a Usenet service via NNTP.

Gotta put in [https://](https://) always.

------
pmlnr
"You need to have Firefox 57 or newer installed"

browsh is in no way a replacement for lynx in any way. It's a nice project
nonetheless.

~~~
Piskvorrr
The docker image does contain that, though.

It's a suprisingly powerful way of running a full browser on a "mainframe"
(ha!), and ssh/moshing in from a terminal on a bad link.

~~~
m-p-3
I guess it's outside of the scope of what mosh is trying to achieve, but if
they could add the ability to port-forward into it, that would be great.

I often use SSH as a poor's man VPN through a SOCKS proxy in areas where some
VPN protocols won't go through, and having the resiliency of mosh would be
great.

~~~
Piskvorrr
mosh is so resilient partly because of its own UDP protocol...which gets
dropped in many places. If VPNs don't go through, don't expect mosh to do so
:( If in a hard place, I usually need to fall back to SSH on port 443...and
even that may not be vanilla enough.

------
bogwog
What's the point of this? It's still running javascript, it's still
downloading images, it's still doing DOM layout. This just seems like a
gimmick that renders a page as ASCII art. It's cool, but it's not a Lynx
replacement in any way.

Lynx and other text based browsers are useful because they save bandwidth/data
by not having to fetch a ton of resources, are safe and fast because they
don't run javascript, and are accessible since there's no computer built in
the past like 30 years that will struggle to run one. The only draw back is
that some sites don't work well with them, and the UX will push away non-
computer geeks.

~~~
cozzyd
All of that is happening on a different computer with a fast connection, and
then it's sending you the result of all that rendering in a highly-compressed
from.

It's almost like using VNC in some ways...

~~~
eurasiantiger
So is there a terminal VNC client...?

~~~
papln
Of course:
[https://github.com/HouzuoGuo/headmore](https://github.com/HouzuoGuo/headmore)

------
tombh
Author here. As is often misunderstood about this project, it is designed to
be run on a _remote_ server and connected to via SSH/MoSH. So it's not really
a direct replacement for those greats such as lynx/links/elinks etc.

There is also a somewhat ironic _in-browser_ version, eg;
[https://html.brow.sh/https://news.ycombinator.com/item?id=21...](https://html.brow.sh/https://news.ycombinator.com/item?id=21515032)

And a demo SSH service `ssh brow.sh -t
[https://news.ycombinator.com/item?id=21515032`](https://news.ycombinator.com/item?id=21515032`)

Ultimately I would like to completely separate the remote GUI rendering from
the local text rendering, essentially realising a cloud-rendering service. The
CLI will then truly be lighter than lynx etc and clients could run in normal
browsers.

I used elinks for about 6 months whilst I was in Ladakh (Indian Himalayas) but
it just can't handle a significant chunk of the modern web. My dream is that
everyone is able to access the _text_ of the _modern_ web regardless of
bandwidth and pricing.

PS! I'm looking for contract work at the moment.

Also, see previous discussions:

May 2016
[https://news.ycombinator.com/item?id=11744221](https://news.ycombinator.com/item?id=11744221)

Jan 2018
[https://news.ycombinator.com/item?id=16074096](https://news.ycombinator.com/item?id=16074096)

July 2018
[https://news.ycombinator.com/item?id=17487552](https://news.ycombinator.com/item?id=17487552)

~~~
cozzyd
Thanks for writing brow.sh!

I look forward to taking advantage of it from the South Pole next month.

~~~
tombh
Wow!

------
rvz
So I need a full install of Firefox to use Browsh for just text-based
browsing?

Thats like Lynx requiring Electron for text-only web browsing, which sounds
more like a massive downgrade in the view of a minimalist user's point of
view.

Nevertheless, a great project feature-wise with having most if not all of
Firefox's features in a text-only fashion.

~~~
AnIdiotOnTheNet
Unfortunately that's the reality of the modern web, you need a modern web
rendering engine to deal with the javascript and whatnot just so you can
reliably extract textural content.

~~~
giovannibonetti
What about jsdom?

[https://github.com/jsdom/jsdom](https://github.com/jsdom/jsdom)

~~~
hombre_fatal
That doesn't do any rendering or layout calculations.

------
gorgoiler
Browsh feels like a graphical browser that’s descended into the terminal
(because it basically is, in terms of implementation.)

I’d be much more into a terminal browser with modern JS, CSS and HTML5, but
which was written to be terminal based from the ground up.

ASCII art style rendering is a fun novelty, but I didn’t find it ultimately
very helpful. Having a JavaScript engine on the other hand absolutely helps,
especially for sites with non-trivial login forms.

Is there another browser project that’s more like lynx/links/w3m but with
added JavaScript support?

------
q3k
browsh doesn't work well for me at all.

[https://q3k.org/u/d808e1792782743cd58d4bd04a760211dde2075c32...](https://q3k.org/u/d808e1792782743cd58d4bd04a760211dde2075c320466a7ba90b60cd9599d4b.png)

browsh on the left, links on the right, showing this comment thread.

(the terminal emulator is urxvt, which has so far had no trouble rendering any
sort of TUI)

~~~
treve
According to the FAQ, this happens if your terminal does not support true
(24bit) color.

------
donio
My text oriented browser of choice is M-x eww in emacs. Obviously it doesn't
work for everything but it works for some things I care about.

For example going over "who is hiring" posts on HN with full access to the
text navigation and search functions in Emacs.

------
johnklos
That's a bit of a silly comparison. "The only dependency is a recent 57+
version of Firefox." Ha ha ha ha...

It's a nice project by itself, but I have to wonder why there's such heavy
emphasis on binary-only distribution - there's no link for a source download,
no Makefile, no meaningful notes. guess we have to just grab the files from
Github and just poke around for a while until we figure it out?

~~~
swampangel
I have some frustrations with browsh's docs too, but the readme in the github
repo does link to a build guide[1], and the build steps are also reproduced in
the Dockerfile.

[1] [https://github.com/browsh-
org/browsh/blob/master/contrib/set...](https://github.com/browsh-
org/browsh/blob/master/contrib/setup_linux_build_environment.md)

------
qubex
I applaud the effort, but projects like this (and/or rather it’s dependencies)
make me realise how truly distant we are from the Web I grew up with: a
hypertextual document model.

Now we’ve got a heavyweight thick-client-orientated client/server runtime
environment. And not a very well designed one, at that.

Things were almost sensible until just after AJAX. What we have now is just
totally unfathomable.

------
therealmarv
It's soooo slow! This is not useful. Better use links 2 if you have really bad
internet and want to browse the WWW.

[http://links.twibright.com/](http://links.twibright.com/)

------
fsiefken
i thought w3m was the go to text-based browser... i already felt like i was
missing out when using elinks (which in a sense is better then lynx). Lynx has
the nice feature that it can dump out the ascii version of a html page.

~~~
downtide
I still use w3m, for basically an easier, less cluttered text based version of
a page. Cuts the cpu goblins found in adverts too. Some sites just won't work
for me in a modern browser without at least some blocking.

Personally I find w3m easier on my eyes. I have tried to run with it as my
primary, but oddly enough some of the full baked browsers still feel faster.
That I can't really figure out! It could be pre-fetching or pre-renders, or
some other trick.

I tend to have at least one JS disabled browser, with my own stylesheet to ape
something akin to the console browsers.

~~~
asveikau
I've found a few other interesting uses for w3m over the years:

* Render HTML email in mutt.

I put the following in ~/.mutt/mutrc:

    
    
        set mailcap_path=~/.mutt/mailcap
        auto_view text/html
    

Then in ~/.mutt/mailcap:

    
    
        text/html; w3m -T text/html -dump %s; copiousoutput
    

* Reading Markdown files:
    
    
        markdown README.md | w3m -T text/html

------
nils-m-holm
I love Lynx, _because_ it cannot do Javascript, CSS, and videos. It is the
last frontier in a Web that becomes more and more focused on appearance and
less and less on content.

Some sites somehow manage to make the content wider than the screen or set
foreground and background colors with bad contrast, even with style sheets and
JS turned off. Lynx is the only rescue in such cases. If it really should die
some day, I will keep maintaining it.

------
LandR
SO someone saw Lynx and thought it wasn't using enough memory? So lets make a
lynx that requires a running instance of firefox?

I don't get it.

~~~
laumars
The title is terrible because I don't really see Lynx (nor links) and Browsh
as competing projects.

The former is a low footprint console browser with it's own rendering engine.
So it doesn't always get stuff right -- particularly not on JS heavy sites.

The latter is ostensibly a console frontend for Firefox so it works with JS
and all the other goblins of modern websites.

The commonality is obviously the "console" part but that's like saying
notepad.exe and Visual Studio are equivalent because they're both Windows GUI
applications.

------
xvilka
I think the best course of action is to build elinks-like console interface on
top of the Servo[1]. Just without the WebRender and optional JavaScript
engine.

[1] [https://github.com/servo/servo/](https://github.com/servo/servo/)

------
ddevault
Requirements:

\- Firefox

\- Docker

Yeah, it's not replacing Lynx any time soon.

------
na85
May I recommend links[0] as a replacement? It is as far as I can tell still
actively maintained and is one of the first things I install on a new Linux
system.

[0] [http://links.twibright.com/](http://links.twibright.com/)

~~~
enriquto
i see your links and raise my elinks

~~~
MayeulC
That's the one I prefer to use as well. It has better compatibility with
colors, it might also have some js compatibility, I think. Basically, it looks
like I often get a better result with it.

And of course, duckduckgo is very usable with elinks. mediawiki and wordpress
sites tend to be quite good as well!

------
kstenerud
This is awesome. Normally I use links, but it's limited in what it can do.
Basing this off firefox with a text renderer means that I can text mode browse
from a remote ssh session to any website with 99% certainty that it will work!

------
unixhero
Links is the best text based web browser.

------
mikeholler
My favorite use for links (I use links not lynx, but they're basically the
same tools from an efficiency standpoint) is on an airplane where I have
terrible internet connection.

Browsh is not killing _true_ CLI-based text-only browsers any time soon. It's
an interesting piece of work, but it's incredibly arrogant to tout it as a
lynx/links killer.

------
every
Lynx is no more dead now than it ever was since the advent of graphical
browsers. I use it frequently in the sdf.org shell as a file manager and to
proof the accessibility of my own web products. It is also informative to use
on "popular" sites to confirm just how little textual content they actually
contain...

------
rjzzleep
I wish there was actually a curses or console renderer backend to blink or
another engine. But seeing what a hell the gtk2 integration was, it showed me
that the renderer is so closely tied together this would be impossible with
the resources available. Maybe servo is capable of such a thing?

------
mark_l_watson
OK, good for the authors of browsh, I like to see open source projects (I am
wearing a FSF tee-shirt as we speak).

That said, I just installed and played with browsh and I like lynx better. To
be fair, this might just be 25 years of use, so lynx seems very natural to me.

------
dllthomas
Eh, it's still a captive UI. I'd like to see a browser somehow decomposed into
individual actions I can compose in the shell. I have only vague thoughts on
what that'd look like, but I keep hoping someone beats me to fleshing it out.

~~~
mr__y
this made me curious :) do you have some written draft of that idea or need to
be asked a series of questions to get it out?

~~~
dllthomas
I've rambled in a few places, but I don't have something collected and
coherent.

The general principle is exercise of a general push against "the application"
as unit of functionality. My main inspiration has been nmh
([https://www.nongnu.org/nmh/](https://www.nongnu.org/nmh/)). As compared with
traditional mail clients, it pushes individual mail-related actions into the
shell.

The mail client has the advantage of not really needing a long-running
process, but that isn't really a blocker - put the functionality behind an API
and expose it through utilities, talking to a socket based on shell variables,
and you can put together a pretty compelling experience. I wrote a libpurple
client that worked that way. Where relevant, you can poll in PROMPT_COMMAND.

What does this look like for a web browser? ¯\\_(ツ)_/¯

We can mimic a typical web browser experience, with commands to follow links,
maybe manage tabs, interact with UX elements, poke the JS on the page?

But maybe we could also move away from the sense-of-place metaphor that puts
us "on" one page at a time, and fold in stuff learned in spidering? Once we
get thinking outside the box, there might be some really interesting things to
find.

Or maybe not.

Please ask any questions you're left with :)

~~~
mr__y
The problem I see is that many websites that rely heavily on JS have become
pretty much applications rather than websites and as a result they heavily
rely on a long running process. The way I understand this problem, this would
rather require a long running browser process and (socket based) API exposed
for external commands/apps to work with. But then again this would be not much
different than Selenium or the likes. The API could be very different but the
general principle (web browser process and an API for external applications to
control it) would be the same.

~~~
dllthomas
Yeah, I think that's about the shape of it. And I think it's something we
don't currently have a good, well established pattern for.

It calls for something more localized than a daemon, but longer lived than a
utility. We see something similar with language servers. In that case (IIUC,
and I may not) they're typically tied to specific places in the directory
structure (eg. listening on a unix socket created in the root of the relevant
source tree).

For the chat client I mentioned above, I tied things together with shell and
environment variables. The script to start the long-running process read its
initial output and set things up so that future commands would know which
process to talk to. The code is at
[https://github.com/dlthomas/genies](https://github.com/dlthomas/genies)

------
ecolonsmak
Lynx isn't dead, posted this comment thru the terminal on my mac running lynx.

------
Endy
Lynx (and/or Links) is my #2 browser for day-to-day traffic.

------
FillardMillmore
I must be out of touch, I thought elinks was the standard-bearer for text-
based internet browsing. This is a cool idea though, might have to test it
out.

------
vkaku
Holy mother of Molly. I think I'm going to set BROWSER=browsh after this.

I didn't realize that you could actually get this to work on most terminals by
now, and they make single static binaries, so hell yes. I hope they eventually
remove the Firefox binary dependency, that'll be a big win.

I've already started using `bat` and now I'll use this more. I've incidentally
started following r/unixporn on reddit too, this would make a nice addition
there. :)

------
_sbrk
Nah, not dead by a long shot, and way less bloated than firefox.

2328M 831M select 0 24:33 2.05% firefox

29656K 9096K ttyin 7 0:00 0.00% lynx

~~~
klntsky
What are these numbers?

~~~
dredmorbius
Likely ps or top output showing process memory (VSZ/RSS) utilisation.

------
apotatopot
I think this article was just as incorrect as the last time it popped up in
2018.

------
ausjke
w3m works well for me, can display images in xterm too.

lynx can show all URL links on any page, which is handy but missing from w3m.

------
rezeroed
We'll decide when it's dead, thanks.

------
52-6F-62
Lynx doesn't appear to actually be "dead". Last patch was in August.

[https://lynx.invisible-island.net/current/CHANGES](https://lynx.invisible-
island.net/current/CHANGES)

Browsh is fun, but at first I thought they were implying Lynx had been
officially deprecated or something.

(Lynx is usually my rough benchmark tool for whether or not my personal site
is accessible enough)

~~~
threwawasy1228
Yeah I hate articles titled like this, I immediately went to check if Thomas
Dickey had passed away or something. If something so simple and easy to use,
isn't broken I don't know why people continuously think they need to redo the
wheel.

~~~
amyjess
Hey mods, may I suggest shortening the title to "Browsh for text-based
internet browsing (2018)"?

~~~
papito
"She just wanted a text-based web browser, but she never expected THIS".

~~~
beefield
If I one day have lots of spare time, I think I want to build a neural network
and a browser extension that will replace all clickbaits with something. Not
sure if it was better to translate them into proper language or just make them
even more laughably stupid. Maybe a setting to choose... Wonder if there is a
labeled dataset already somewhere?

~~~
hawski
I also thought about this, but I would replace them with empty or collapsed
space.

