We tried to look at uh the world of browsers a bit differently. So we’ve been a little bit frustrated with the popular browsers like firefox and chrome, or the more geeky browsers that allow us to be tinkering with the configuration and all so uh.
Personally, when I use firefox at chrome uh, what frustrates me a little bit is that I come, I feel a bit imprisoned. I feel like. I cannot do much configure uh it’s a little bit like uh this black box or or less uh. You could argue that. Okay, there are extensions, but those extensions really are limited. They don’t really you can’t access the internals of the browser. They can’t really communicate so much between each other and they can’t really communicate with your system.
So if you want to interact with git or your text editor, you can’t really do that very well. It’s not easy! So there’s that and then other smaller browsers, then tailoring to the more geeky crowds and those are usually keyboard – focused minimalist uh. You can configure them with uh in python or different languages, uh and those browsers. Well, there are so many of them actually they’re legions and i’ve been wondering.
I mean why actually do they come and go so fast, and I think the problem here is a lack of abstraction with regard to the renderer and really, I think, the what the web browser truly. Is it’s a user interface uh? It’s a user experience that allows us to interact with the web with the content, but it’s not uh. It shouldn’t really be stuck to the right brander itself. So we don’t really. I mean it matters of course, but maybe it is not all that matters for browser.
So that’s what we’ve been trying to do with next browser, so the the key uh design decisions that we’ve taken here is one to decouple the browser from the web renderer. That means that we support webkit and web engine, which is more or less blank chrome and on the other hand, we also try hard to make it extremely configurable. Because i’m a geek – and I like to configure my browser to to the very core – and I like to to make it to have full control over my browser.
So how do we do that? How do we have a fully customizable program where we don’t only expose an api to the user? We give the program the whole program to the user so that they can do whatever they want with it, and I think for that. We need the right programming language. That means the language is fully introspectible. That’s fully uh that can be fully moulded around and I think a good good um, the right.
Maybe the right language here – is a language from the list family, because those languages are extremely powerful. In that sense are very respectable so which shows commonness here and um. Well, that’s enough with the details. Now, just i’m just going to show you some demos and well, you will see for yourself, so this is a um. No, it doesn’t matter. I will explain here so if I can start a browser okay here there I go um.
So first of all, it’s really barren but uh. What I want to show is this area here, which is a little bit similar to and oops damn what um? Okay, sorry about that. Okay, sorry, so um first thing is that we by default we don’t show tabs, but instead we use an approach, that’s used by emacs in particular, we list all the tabs or that we call buffers and what’s cool about. That is that we can search them.
So if I write wiki and geeks, I can fuzzy search my tab and go directly to the gnu geeks wikipedia page, and we can extend this concept or what we call the mini buffer or like the address bar. Essentially, in the browser to actually do this for everything, for instance, uh say i’m browsing here and I see there is this table of content here. I can actually browse it the same way. So if I go roll back enter and i’m directly at the rollback section, so we can actually use the this concept.
This fuzzy search concept everywhere, so it’s pretty cool. We can even use it to interact with the browser itself, for instance, how many times have you found yourself with so many tabs? You, you were really lost with them and you wanted to okay, let’s hear just a bunch of wikipedia pages. You don’t need it. So then, I can just start deleting my buffers. I can narrow them down to wiki, select them all enter and they are gone.
So that’s much more productive right and it’s a very simple concept and when you start using it everywhere it starts becoming pretty cool. So that’s essentially basics for the ui or the ux um, but, as I mentioned before, it’s written in common list, which means that you can leverage the language to hack it, and I mean by that program every single part of it live so, for instance, here I Go back to my repo, where I can evaluate code.
So if I evaluate the function current buffer, I get an object here, which I can start introspecting, and here you get. This is a slide slime for command list. This is an introspection window where I get all the details, like the title or the url etc. And if I go back to my buffer, I can start calling functions. Uh, I can say say: set url and let’s go to my website and there it works. Um. Now we can start doing more sophisticated things like I can define a function, so i’m going to copy paste it.
It’s going to be easier and um wait, um! Sorry! Where is it? Oh sorry, okay, there! So I copy paste this okay there. So this is essentially a command that will repeat what I just did uh. I want to delete all wiki buffers say I keep doing this all over again, all the time um. Well, maybe I want to write a function that will essentially uh loop over all buffers match, all those that match wikipedia and delete them all.
So if I evaluate this – and I go back to my next window – and here this is the list of all comments I have at my disposal, if I start fuzzy searching delete, wiki there, it is and well it’s double and it’s long story – oh sorry about it. So um and I can call it or I can actually do even better. I can bind it to a key um and if I do this, I can evaluate code even from within next. You don’t need an extra setup that doesn’t matter so if you come and vary it and evaluate this here there, so it will evaluate the form.
Now I open a new wikipedia window. First them and i’ve deleted all the wiki uh, just pressing the right key binding. I’ve rerun the command again, so i’ve essentially hacked the browser. While it was running a default function about it to a key, but you can do everything you have full access to to the entire internals. It goes a long way down this road. When you can start extending stuff, for instance, you can easily call to the os components if you want to hook up to get uh.
It’s very easy to you go on your whatever github page. Let’s say this one, and here, if I call the command vcs clone i’ve, cloned the repository to my favorite uh to my local project directory uh, that’s very convenient uh. We would like to extend this a little more so that it actually updates the page. At the same time, to show you that you’ve cloned it stuff like that um beyond that uh we’ve also passwords man.
What about password managers? I mean they’re, really useful. I like to have a password manager integrated to my browser. It’s best for security, uh very convenient. So we’ve also simply wrote a bridge to keepassxc and uh password store and depending what you got installed. You can just pre copy password and you browse here and first them and then you get your password and you can paste it um. Then next I mean I can go on on.
Let’s say bookmarks uh. So if I want to open my bookmarks, I can also fully search them and I can match against some tags. So if you look at the uh at the end of the lines here, the candidates uh, if I want to match, say against uh, geeks and fast or crypto. I can start writing complex expressions like um, sorry, um and geeks, fast crypto and as soon as I close, the parenthesis. I’ve matched exactly those two types of bookmarks uh, one that has foster gigs, the other one has crypto.
So imagine you have thousands of bookmarks. You can have extremely powerful match, uh tag matching from within the browser um whatever. So what about um? Let’s go back to, let’s go to tour, and if I go here i’ll start browsing. So I go to the anonymity network and I want to go on the main page. Okay, so I go there. I start browsing and go to documentation. Then I realize all right uh. I want to go back.
I want to go back to the wikipedia page, so I go back to the history and go back to tor um. Now i’m going down a few more links and at this point I if I go back again and forward again well uh i’ve written the history. I don’t have access to the first branch of the history, which was the tour website, but here we’re a bit smarter. We we try to store everything we start to. We try to store the whole tree of history, so we can essentially go sorry history tree and there I can actually display the whole history of all the links, i’ve browsed and in a very well tree fashion, which is pretty cool right, so yeah.
A few more examples, so I think well, I think i’ve shared a lot of things already. Oh bookmarks yeah. So if you like emacs, maybe you like old mode, something else you can do is go to your favorite website and if you want to in bookmark this link into your text editor as an org entry, i’ve written very small functions for it and there I can Capture the link and this will be stored with the right title and the right thing in my org agenda, so here i’ve actually essentially wrote a function to communicate with the other world by passing code around, which is quite amazing.
I’r passing this to an external process, and this is just uh one function. It’s really trivial, that’s the the kind of power we can get when we choose the right language, I believe so that would be it for the demo and uh. Well, I hope you enjoyed it. We have a few minutes for the questions, so thank you very much yes uh. So you mentioned um, there was a password manager. Integration is for keepers xc and some other.
It’s also password story. Um also password manager, integration for bit. Warden, for which one uh I can hear you uh, is there also uh integration for the password manager, big one um, oh okay, thank you um. I mean, of course, so the question is: can we have um integration with more password managers and, of course uh? Really? That’s that’s. The whole point is that it’s really easy to to uh integrate with all sorts of external processes um and when it comes to the password manager, we wrote a this uh virtual interface and you can essentially connect to it, and then you get everything uh for for Free can can the language be used to uh to um control.
The page itself, like uh automation, similar to what selenium, would do like, like selenium so automating within the page, find the second link, click on that and then fill in the text box and then click the submit button. Can you do that kind of thing with the language? So what really you can leverage the web render to send any sort of javascript that you want, and what’s also pretty neat, is that with a language like lisp, you can have.
Maybe you know you’ve heard of clash of script. Uh communist has the equivalent called parent script, so it amounts to it, compiles lisp on the fly to javascript and sends it to the browser. So you can start compiling everything in lisp, but actually interact with a web page hi. Thank you for the talk. Uh. Is there a way for to exchange extensions, because there are quite a security risk, since they have access to a file system? Don’t they yeah? So have you i’m sure, you’ve thought about it, but how do you exchange extensions and make sure that they’re secure you mean so the question is uh.
So last question the question is: is uh? How do you make sure that extensions can be exchanged and or secure? So you mean uh third-party extensions, so this the answer is very simple: for now uh we don’t have third-party extensions uh, but in the future, of course, we want something uh very robust here um I mean I personally work with the geeks package manager, which provides a Lot of security here so that could be.
We could leverage this uh package measure to to provide to do, distribute extensions that gives you gives us a lot of guarantees here. Thank you very much.