Hacker News new | past | comments | ask | show | jobs | submit login
Nyxt 3 Pre-release 1 (a Lisp powered web browser) (atlas.engineer)
200 points by arthureroberer on July 14, 2022 | hide | past | favorite | 66 comments



I’d love to use Nyxt, but it doesn’t work. It doesn’t work because, despite claims to be engine-agnostic, in practice it can only be used with webkitGTK. WebkitGTK displays (CSS and HTML validating) pages with loads of rendering errors. I’ve tried it on pages that look identical and are rendered correctly in Firefox, Chrome (and all Blink browsers), and Safari, but do not render correctly in Nyxt. The incorrect rendering is reproduced exactly with Epiphany, the official Gnome browser that uses the same engine—so I know that the problem is with webkitGTK. If anyone can explain how to unlock the supposed engine-agnosticism of Nyxt so that I can try it with Blink, I would like instructions.


Thank you for your feedback. You're 100% right. The framework is in place, however the implementation is not! We wanted to get Nyxt to a level of feature sophistication before focusing on supporting (not just prototyping) two renderers as it can slow down progress!

With 3.0.0 on the horizon, now is an ideal time. Once again, sorry about the issues you've had, we're doing our best!


I've been playing a bit with WebkitGTK for my own development and found the same thing—I was learning how to use SVG and was getting really confused about how transform-origin was supposed to work... then I tried the same SVG in Firefox and Chrome and realized that my understanding was correct and it was WebkitGTK that, for whatever reason, didn't handle it correctly. Even over a relatively short time I ran into a number of CSS, SVG and DOM manipulation behavior that WebkitGTK seems to handle incorrectly.


Interesting, why does webkitgtk messes with webkit rendering?


Bummer. I know that WebKitGTK also had problems with playing video on video streaming sites. So hopefully they figure something out with other engines soon.

I'm interested in the History at a tree feature. And if they can get their bookmark tags to extract tag data from blogs and question and answer sites that would be great.


I've also hit this issue. About a year ago I made an effort to use blink, but after a bit of work I recall essentially discovering that any support was effectively abandoned. I wish they would remove the note in the FAQ about supporting multiple engines, as it doesn't seem to be the case.


At most it’s a description of an aspect of the project’s internal architecture. It means absolutely nothing to the end user.

I believe that the Nyxt website should have a big red banner warning people that, because it uses a rendering engine that is not conformant and, I suppose, is a work in progress, it can’t actually serve as a practical web browser. This would save people from wasting time installing it only to find out that it doesn’t work. And remove the misleading comments about it being engine-agnostic. I really don’t understand what they hope to accomplish by forcing people to discover the true nature of their project the hard way, but it leaves a bad taste in my mouth. The same goes for Suckless’ surf browser and others. For their part, the wekitGTK website falsely claims that their engine is “a full-featured port of the WebKit rendering engine”. As mentioned in another comment, these rendering errors do not appear in Safari, which uses WebKit.


How did Tauri (Rust) solves the rendering engine problem? Maybe Nyxt can borrow some of its magic.


I think that it just uses the system webview, whatever that is. I don't think it offers "dynamic" switching between multiple implementations.onnthe same platform.


Did it? Perhaps it's easier to support crossplatform things if you can control which features of all the engines are being used.


Doesn't it use WebkitGTK, at least on Linux? I expect it has the same problems, but it's less of a problem for developing UIs than for browsing to arbitrary web pages—it might get a bit annoying, but you can always work around the inconsistencies or limitations by tweaking your own HTML/CSS/etc.


Being able to customize my browser in lisp would be great, before I switch I'd need this browser to have something like:

- unlock Origin (for feature rich and sophisticated ad blocking)

- uMatrix (per-domain and subdomain Javascript blocking)

- NoScript (more Javascript exploit protection)

- Pentadactyl and/or Evil (vim-like modal browsing)

Lack of the first three was why I never switched to qutebrowser, despite it having a nice Pentadactyl-like UI.


Is there any need for NoSript with uMatrix and uBlock Origin?


Yes, same here. I want to want this, but the lack of third-party resource control (I'm a big uMatrix user) means I don't trust most browsers, and I don't want to resort to running my browser in a container.

I thought that earlier versions (when it was still called Next) did support keyboard-based browsing, but maybe I'm misremembering (I toyed with uzbl too). The first thing I'd want for keyboard-based navigation would be an easily accessible cheat sheet.


https://nyxt.atlas.engineer/documentation

It does support keyboard-based navigation, and you can define your own bindings to any of the functions so you can alter the defaults or extend them to your own purposes.

Scroll down to "Visual mode" for their take on vim-like bindings.


It is great to see that you are interested in Nyxt!

There is a whole article comparing Nyxt to extensions such as Pentadactyl (Vimium, Vimari, etc). Nyxt can do way more than them.

Check it out:

https://nyxt.atlas.engineer/article/nyxt-versus-plugins.org

Also, it is already possible to have emacs and vi keybindings in Nyxt:

https://nyxt.atlas.engineer/documentation


You can disable javascript in qutebrowser, and the default adblocker works pretty good if you remember to update your sources, but I agree that it's not like ublock Origin


> You can disable javascript in qutebrowser

uMatrix gives you way more fine-grained control over this (JS on/off per-domain and per-subdomain) along with lots of other features and a great UI that makes all this manageable. Just a simple on/off switch for JS is no comparison.


FWIW qutebrowser can disable JS (and also many other settings) per domain, though not on an as finegrained level as uMatrix.

However, there is this: https://gitlab.com/jgkamat/jmatrix

It's quite a hack and I have no idea where it is UI-wise, but it seems to work for some people at least.


By default it more or less has everything besides ublock (which is why I haven't switched yet either.)


Nyxt has uMatrix?


It filters js per domain IIRC.


So one of the most powerful features of emacs is everything being implemented in lisp so everything can be tweaked, edited, replaced, etc. This kind of flexibility is amazing for my text editor because every 3rd party package I install can change ANY aspect of emacs, giving them the same power that the official emacs code has. I'm not so sure I want that kind of flexibility in the software that handles my passwords, my banking details, my private communications, and my pornography.


Emacs also has risks. It has access to the internet. A solution for both (Nyxt and Emacs) could be sandboxing.

But... are you worried about sandboxing when use your regular browser (Chrome, Firefox, Opera, Safari...) or Emacs?


It looks a bit like Emacs, so I intuitively pressed CTRL x 0 to close a window.


It started out as the desire to have an Emacs experience while surfing the web better than what Emacs was providing.

On one hand, there are multiple similarities:

https://nyxt.atlas.engineer/article/article-how-can-i-make-e...

On the other hand... There are also differences:

https://nyxt.atlas.engineer/article/why-building-nyxt-instea...


Is there anybody who uses more than one browser as daily drivers simultaneously? What's your workflow like? I have tried to give Nyxt multiple tries but had to give up cause some things just don't work and had to use Firefox for those.


The use of tools like Finicky (https://github.com/johnste/finicky) have made it pretty easy for me segregate certain workloads to certain browsers (as long as the links are opened from outside of the current browser).

Safari is my daily driver, but I only take Google Meet meetings in Chrome and Teams meetings in Edge. I’ve also forced certain JIRA URLs to different browsers (Firefox or Edge, depending), because I have to be logged in as particular users for them.

I rarely use other browsers for anything else, but will occasionally test things in them—but using the separate browsers has been really good for segregating certain classes of work.


> as long as the links are opened from outside of the current browser

How do you invoke Finicky, then?


Finicky is set as your system default browser and opens the appropriate browser based on the URL.


How do you invoke Finicky, then?

:)

I'm curious about the workflow. Finicky is set as the system default browser, and then how is that typically invoked when using Finicky? Spotlight? A custom app? Shell tool? etc.


Safari for general browsing (and default) because it's the most energy efficient one.

Firefox for work. The best implementation of pinned tabs. Shame it's a resource hog.

Chrome for reference and research type stuff. No reason why Chrome, I just want that separate from other contexts.

Chrome Canary for development. Still a Chrome, the best browser for development, but I get to separate all the reference stuff nicely from actual Chrome

Brave for streaming, because it's still a Chrome (so supports all the things) and blocks video ads really well.

Tor for... nice try, FBI. :)

I set up iTerm to open up reference type links I care about in Chrome, and all the other ones in Safari.


I use Chrome for anything Google and streaming sites/Chromecast, Firefox for everything dev-related (and of course test on both).


I use several different browsers. I have one completely locked-down (no images, js, cookies, etc), exceptions by whitelist-only + host blocking. That one is used for most of my daily browsing. I use a separate browser for anything that requires webapps or cookies, and an entirely different computer for anything financial or important. The only problem I have is occasionally being frustrated by how bad the Chrome and Firefox UIs are compared to literally anything else, or even themselves a few years ago.


I have really aggressive privacy mechanisms on Firefox and when they break something I need to do I switch to Chrome to do that one thing. (It seems to be mostly a certain kind of oauth flow that gets broken, I’m not curious enough to figure it out because I couldn’t change it anyway)


Every day, firefox for "personal" stuff, chrome for work stuff. Of course, these are both very mainstream browsers so I would be very surprised to come across things in the wild that don't work in both (that wasn't caused by my configuration).


Yeah.

Brave for general browsing/watching videos, Chrome for work apps, Firefox w/ FoxyProxy for some stuff at work only reachable via SSH tunnel, and whatever the embedded Chromium that ships with BurpSuite is for testing webshits.

Each will tend to have a fuckheap of tabs open too.


Yes. I use Chrome to access my work Gmail and Firefox for everything else.

It's a good way to keep things separated. And means I'm unlikely to accidentally share my YouTube viewing when I share a tab in a Google Meet.


Corpo intranet amd a very few other sites don't work properly on Firefox (even more on Android FF), so I occasionally use Chrome to get around that.


I use Firefox with containers on my laptop for my day-to-day, and occasionally use Chrome for dev, testing, or if I just can't load a page right.


Yeah, I alternate between Brave, Chromium, Firefox, and Opera (and Safari on Mac). Firefox any time I want to try to download some media like YouTube vids that are difficult or impossible in other browsers. Brave, Chromium, and Opera are all Chromium under the hood so they’re pretty interchangeable. And Safari on my Mac laptop for optimal battery life.


The last three companies (including where I am now) use Google GSuite so I use Chrome on my MacBook for work. I otherwise use Safari. This makes sense to me.

BTW, I used to donate to the Nyxt project but I started having major difficulties getting it installed (perhaps this is when I did the M1 transition?).


On my work laptop I use chrome for corp stuff and development, firefox for personal usage, and brave for media streaming.


Why Brave for streaming?


Just because it's a third browser that I happened to have installed. Separation of concerns and all. I keep Spotify and Brave in their own workspace on sway/i3, and have YouTube and SoundCloud loaded in Brave.


LibreWolf for everything, qutebrowser for playing games (LibreWolf really sucks at playing web games for some reason)


Firefox for personal, no extension Chromium for dev (besides cookie editor, vue tools, and JSON prettifier)

(devtools > ff tools)


eww and FF daily. I wish Nyxt had less critical issues, I would 100% use it.


Would be nice if this was embeddable inside (and integrated with) emacs.


There's a bunch of support already for controlling the browser via a SWANK/SLY repl, and also remotely run emacs functions from Nyxt.

https://nyxt.atlas.engineer/article/emacs-hacks.org

(I guess it would be embeddable using xwidget, but I haven't tried that).


Oh, there is a lot of cool things already possible. Some users outside of the team are doing interesting hacks

Check this out:

https://nyxt.atlas.engineer/article/emacs-conf.org


This looks really nice! I will definitely try this out when I get the chance, although as it is I can't do much other than playing around with it - I'm stuck with windows :(


There is an unofficial support for Windows via WSL.

Check it out: https://nyxt.atlas.engineer/download


For a lighter experience there is https://github.com/drewc/gurf


Interesting observations from the comments in this thread so far:

- Nyxt merely integrates WebKit so isn't actually a browser, where a browser consists of an HTML and CSS parsing and rendering engine, plus, optionally, Js; this is disappointing insofar as the enormous HTML and CSS tower-of-Babel specs produced over the last 20+ years still are unproven by a from-scratch implementation

- professional web users other than on Mac OS use Chrome for webapps and FF for actual web sites (presumably b/c privacy features), giving rise to the perspective of separating-out extant web apps into containerized Electron apps in the future (where those aren't already eg MS Teams et al), so by chance we can get rid of the Js ballast and recent CSS atrocities and return to a healthy competitive browser landscape.


There is a PWA extension for Firefox which allows you to easily make a PWA with Firefox under the hood (I always disable telemtry and install uBlock).


I'm down if this supports a Chromium backend.

Also, how does developer experience look like, e.g. DOM inspector, source code debugger?

My job requires heavy debugging so it cannot be my daily driver unless there is comprehensive developer tools.


I haven't checked if it already includes it, but they have made a Common Lisp binding for Qt WebEngine which uses code from Chromium, so it at least seems to be the plan.


Is WebKit stable on Linux? Gnome Web frequently crashes for me, but I would love to try a stable WebKit based browser on Linux.


Qutebrowser[0] and Luakit[1] are 2 WebKit-based web browser that I know that are pretty decent, though very similar to each other.

[0]: https://www.qutebrowser.org/

[1]: https://luakit.github.io/


qutebrowser used to use QtWebKit back in 2013, but doesn't use it anymore by default ever since its v1.0.0 release in 2017.

Ever since then, it uses QtWebEngine, which is based on Chromium. You can still use it with QtWebKit (at least until the upcoming v3.0.0 release), but that's mostly for historical reasons - I really can't recommend it, as QtWebKit is still based on a WebKit from 2016 and pretty much dead.


nyxt has channel (for example, different settings for youtube, wikipedia, etc) where you can customize keybindings, noimage, nojs, darkmode for each url/domain

the problem is, there is no example how to do it


YES this is great to see.


I get the technical merits, and that they would appeal to places like HN in particular, but I'm getting really tired of the whole "Project X, in language Y" meme (typically with a higher emphasis on Y than on X, and no indication why this even remotely matters in the slightest).

Imagine other professions doing it:

- I've written a new symphony ... IN SIBELIUS!!!

- I've published a new patent on artificial heart valves ... USING MICROSOFT WORD!!!

- I've discussed with our local parliamentary representative a new legislation on copyright law ... USING MY SAMSUNG GALAXY!


I think I understand your point. But, maybe, what you are missing is that the "language Y" is the reason behind multiple "competitive advantages" and cool features behind "Project X".

For instance, Common Lisp is really introspectable. This is the reason why Nyxt is so good for live hackability (inspecting and changing things on the fly).

See the lecture below on the connection between the architecture of Nyxt, the language (Common Lisp), and the features:

https://www.youtube.com/watch?v=wUujk1vjnYM&t=20s

Obs.: the lecture was after Nyxt 1.0 and before Nyxt 2.0 release. Take into account that Nyxt is close to releasing 3.0 version.

Also:

https://atlas.engineer/technical-article/why-lisp.org


Yeah, I get that. But that's exactly what I mean. If you're going to focus on Y instead of X, make it obvious why this is relevant. If not, one of two things happens: 1) it sounds irrelevant and gives the impression it's just fanboyism, or worse, 2) it effectively says "if you're not in the inner circle enough to know and be excited for the Y more than the X already, then I don't have to tell you and this isnt for you."

Which means you as the interested reader now have to go spend your precious time learning all about Y independently, from scratch, to figure out whether it is in fact important in this very specific case, or if it is just fanboyism.

Very annoying and disrespectful to an otherwise interested reader. Either state your call to action up front and why Lisp is a feature, or leave it out entirely and focus on the product.

(not having a go at nyxt specifically btw, just frustrated at the trend with this kind of titles.)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: