 Hello, everyone. I'll talk about the next browser today. So I'm part of Atlas Engineer. We've been working on this browser for the last two years, something. And we try to look at 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 at all. So personally, when I use Firefox and Chrome, what frustrates me a little bit is that I feel a bit imprisoned. I feel like I cannot do much configure. So a little bit like this black box or less. You could argue that, OK, there are extensions. But those extensions really are limited. They don't really 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 is that. And then other smaller browsers, then tinkering to the more geeky crowds. And those are usually keyboard focused, minimalist. You can configure them in Python or different languages. And those browsers, well, there are so many of them, actually, they're all 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 what a web browser truly is. It's a user interface. It's a user experience that allows us to interact with the web with the content. But it shouldn't really be stuck to the web renderer itself. So we don't really, I mean, it matters, of course. But maybe it is not all that matters for a browser. So that's what we've been trying to do with next browsers. So the key 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 from. 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 the very core. And I like to make it to have full control of 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 introspectable. That can be fully molded around. And I think maybe the right language here is a language from the Lisp family. Because those languages are extremely powerful in that sense, so very introspectable. So which shows common lists here? And well, that's enough of the details. I'm just going to show you some demos, and, well, you will see for yourself. So this is a, no, it doesn't matter, I will explain it. So if I can start a browser, OK, here, there I go. So first of all, it's, well, really barren. But what I want to show is this area here, which is a little bit similar to, and oops, OK, sorry about that. OK, sorry. So first thing is that by default, we don't show tabs, but instead we use an approach that's used by EMAX in particular. We list all the tabs, or what we call buffers. And what's cool about that is that we can search them. So if I write wiki and geeks, I can first search my tab and go directly to the GNU Geeks Wikipedia page. And we can extend this concept of what we call the mini-buffer, or the address bar, essentially, in a browser, to actually do this for everything. For instance, say I'm browsing here, and I say there is this table of contents 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 this concept, this first search concept everywhere. So that'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 were really lost with them? And you wanted to, OK, let's kill just a bunch of Wikipedia pages you don't need. So then I can just delete my buffers. I can narrow them down to Wiki, set them all, enter, and they're all 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. 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 I get this is a slime, a slime for command list. This is an introspection window where I get all the details, like the title, or the URL, et cetera. And if I go back to my buffer, I can start calling functions. I can say set URL, and let's go to my website. And there, it works. Now I 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. Sorry, where is it? Oh, sorry. OK, there. So I copy paste this. OK, there. So this is essentially a command that will repeat what I just did. I want to delete all we keep our first. Say I keep doing this all over again all the time. Well, maybe I want to write a function that will essentially 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 commands I have at my disposal. If I start further searching delete we key, there it is. And well, it's double and it's long story. I'm sorry about it. So, and I can call it. Or I can actually do even better. I can bind it to a key, 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 command evaluate, and I evaluate this here, there, so I've already evaluated the form. Now I open a new Wikipedia window, first them. And I've deleted all the weekend. Just pressing the right key binding, I've rerun the command again. So I've essentially hacked the browser while it was running. I define a function, I bind it to a key. But you can do everything. You have full access 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 US components. If you want to hook on to Git, it's very easy to go on your whatever GitHub page. Let's say this one. And here, if I call the command vcsclone, I've cloned a repository to my favorite, to my local project directory. That's very convenient. 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. Beyond that, we've also, 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, very convenient. So we've also simply wrote a bridge to KeePass XC and our password store. And depending on what you've got installed, you can just create copy password and your browse here. And first time, then you get your password and you can paste it. Then next, I mean, I can go on and on, let's say bookmarks. 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 end of the lines here, the end of the candidates, if I want to match, say, against Geeks and Fast or Crypto, I can start writing complex expressions, like, sorry. And Geeks, Fast, Crypto. And as soon as I close the parentheses, I've matched exactly those two types of bookmarks. One that has Fast and Geeks, the other one has Crypto. So imagine you have thousands of bookmarks. You can have extremely powerful tag matching from within a browser. What else? So what about, let's go back to, let's go to Tor. 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. So I go there. I start browsing and go to documentation. Then I realize, all right, 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. Now I'm going down a few more links. And at this point, if I go back again and forward again, well, I've written the history. I don't have access to the first branch of the history, which was the Tor website. But here we're a bit smarter. We try to store everything. We try to store the whole tree of history. So we can essentially go, sorry, history, tree, and there. We 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 showed a lot of things already, bookmarks, yeah. So if you're like Emacs, maybe you're like Augmoud. Something else you can do is go to your favorite website. And if you want to bookmark this link into your text editor as a log 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 link in my org agenda. So here I've actually essentially wrote a function to communicate with the outer world by passing code around, which is quite amazing. I'm passing a list to an external process. And this is just one function. It's really trivial. That's the kind of power we can get when we choose the right language, I believe. So that would be it for the demo. And well, I hope you enjoyed it. We have a few minutes for the questions. So thank you very much. Yes. So you mentioned there was a password to manage integration for KeyPass, XE, and some other. Is there also? Password story. Is there also a password to manage integration for Bitward? For Bitward? I can hear you. Is there also a integration for the password manager Bitwarden? Bitwarden. Oh, okay, thank you. I mean, of course. So the question is, can we have integration with more password managers? And of course, really that's the whole point is that it's really easy to integrate with all sorts of external processes. And when it comes to the password manager, we wrote this virtual interface and you can essentially connect to it and then you get everything for free. Can the language be used to control the page itself? Like automation similar to what Selenium would do? Link? 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 within the language? So really you can leverage the web renderer 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've heard of ClusterScript, CommonLisp has the equivalent called parent script, so 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 the web page. Hi, thank you for the talk. Is there a way 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, so last question, the question is, is how do we make sure that extensions can be exchanged and are secure? So you mean third-party extensions. So the answer is very simple for now. We don't have third-party extensions. But in the future, of course, we want something very robust here. I mean, I personally work with Geeks package manager which provides a lot of security here. So that could be, we could leverage this package manager to distribute the extensions. That gives us a lot of guarantees here. Thank you very much.