5 ms·
ExoBrowser: The Experimentation Platform to Build a Next generation Web Browser
- neilk 13y agoI don't know what experimentation you plan for synchronizing browser state, but Chrome and Firefox already can sync practically everything, securely.
- spolu 13y agoExcept the cookies, which seems interesting to sync. Additionally we'd like to experiment with pushing your session to any instance of the browser (running on a machine you don't control).
- bachback 13y agoVery interesting, but I can't quite rap my head around the idea. Aren't the protocols and the execution engine the plattform on which a browser is built? I find it very interesting to think about it what the minimal executable code is and how we ship it over the wire. Chrome was originally an OS as well as a browser (that's how I understand the history).
- spolu 13y agoI'm not sure I understand what you mean by "Aren't the protocols and the execution engine the plattform on which a browser is built?". But I'll try to elaborate. Chrome is built on the Content API. So it's a whole lot of C++ and GUI code on top of an API that lets you create a view and display web contents in it. The ExoBrowser wraps this Content API (part of it for now) into a JS API so that you can do all the GUI and specific browser code in Javascript instead of C++. Additionally Chrome is not really an OS, Chrome OS is an "OS" (more a window system on top of Linux) based on Aura (View Management, kind of like GTK) and Chrome to run the apps.
- Groxx 13y agoIt may not have syncing, but Stainless[1] has a very clever notion of bookmarks that are sessions. Makes it ridiculously easy to e.g. have a bookmark for each account you use on site X, and open them all simultaneously. I absolutely loved it. Unfortunately it's a mostly dead project, though it's open source now. [1]: http://www.stainlessapp.com/ http://www.stainlessapp.com/
- spolu 13y agoDidn't know it. Very very cool and interesting. Thanks for sharing the link. If I understand correctly the bookmark was an URL + the Cookies related to it?
- Groxx 13y agoBasically yeah. I imagine there's more to it (localStorage, other forms of persistent data), but that's the idea. Importantly (to me anyway), you can have multiple tabs to the same site open at once, each with a different session. Tabs opened from one of those tabs will retain that session, so you can e.g. fire up two Google accounts, open a few YouTube tabs from each, and keep your viewing history separate. It's like Chrome profiles on steroids, with way less memory use, and way easier to use.
- spolu 13y agoYep, Chrome Content API provides everything needed to handle that as well: PartitionStorage. I wander how was the UX, when would you decide to create a new "session"?
- Groxx 13y agoI don't remember in great detail (the app still exists, probably works, I/we could poke at it if so), but I think it was an always thing. By making a bookmark you included the session data, so by logging in and making one you ensured you were always logged in after clicking the bookmark.
- roarroar 13y agoWhy not go all the way and move the rendering engine out of the privileged base of the system? Why is all this HTML and Javascript garbage in "kernel land" anyway? Why not make your browser kernel concerned solely with providing asm.js or PNaCL plus WebGL and some other primitive services? Then everything else can be preloaded libraries. And what on Earth does Node.js have to do with any of this? Why not just create some Javascript bindings to WebKit and V8, then.. write the browser in Javascript? The browser needs less of this kind of ridiculous bloat, not more.
- spolu 13y agoAgreed with direct Webkit bindings in JS... only if you want to handle networking and file storage in Javascript, you'll end up rewriting node.js which is exactly that bindings for libuv... So node.js is not chosen because it's cool or anything, it's just because it's exactly what's needed. Not sure I see what you mean by HTML and Javascript garbage in "kernel land"?
- roarroar 13y agoHTML and Javascript are a horrible basis for a computing platform, which is why in the end they have resorted to providing a tiny, statically typed subset of Javascript plus some graphics primitives. And now the primitives exist, comically, side-by-side in the privileged base of the system with a bunch of application-level stuff (HTML etc) which could be built out of the primitives themselves. Your diagram doesn't indicate that you're just using libuv bindings for portability - it includes a local server.
- lutusp 13y ago> Why not go all the way and move the rendering engine out of the privileged base of the system? Why is all this HTML and Javascript garbage in "kernel land" anyway? There's a little-known emotional factor in software development at work here, apparently not clearly understood, indeed it might as well be a secret. And that is that kernel development is high-status, and user-space development is low-status. Many software developers want desperately to add to their resumes the fact that they contributed code to the Linux kernel. This is why so much user-space code has made its way into the kernel. Someone powerful should go through all the kernel-space code and order the deportation to user-space of all the stuff that doesn't belong, that has slipped across the border over the years like phony political refugees. This probably won't happen, but it's uncontroversial that much of the kernel code has no right to be there, and much of it is written so badly that it's dangerous for it to be in kernel space.
- est 13y agoWhile the project objectives are very nice, I hope it solves one other problem, the "contentEditable" problem In the pre-historical days, web pages are static, served as a file blob, in one way, or both ways (FTP) Then there came server side templates, we now have dynamic pages. Then CGI and Perl came, we have <form> so user could put their contributions to the server. Then there's AJAX opened the possibility of "Web apps" However, all of existing efforts left behind a very basic concept of HYPERTEXT: It is always read-only or partially read-only. The browser is good at display HYPERTEXT or manipulating part of it, but not create those. We have WYSIWYG editors, and the famouse Markdown (and alternatives), they lowered the level of entry of a "writable" Web. I hope in one day, users can write hypertext freely, as easy as make an edit on contentEditable, the user input & interactions could become parsable data, and the developer's layout/css tweaking and js debugging could be made from web browser Firebox/DevTool directly back to LESS/Coffeescript. Browsers, really, should consider shifting from a consumerism tool to an authoring platform. Branched, incremental and versioned. My two cents.
- gioele 13y ago> I hope in one day, users can write hypertext freely, as easy as make an edit on contentEditable, the user input & interactions could become parsable data, and the developer's layout/css tweaking and js debugging could be made from web browser Firebox/DevTool directly back to LESS/Coffeescript. If you only care about the content, then a wiki engine with support for flexible styles should be enough to fulfil your hope. Instead if you want to be able to completely rewrite a page, including its layout and behaviour, then you need to take into account that the page you see is not just "content" but "code + data". I always wanted to have a "Edit source" button in applications, but then, what does it mean to "edit the source"? Decent web pages are produced by quite deep applications stacks composed of megabytes of running code. To show a link to a certain resource you need, in current frameworks, something like a 20-level deep stack of functions calls. At which of these points would your editor works? If applications where completely client-side you could think of editing most of it in the browser, but still, which client could handle the client-side creation of a Wikipedia page, for example?
- AndrewDucker 13y agoIsn't this similar to what Firefox does - where the browser UI is written using javascript and XML - which is why it's so easy to write add-ons for it?
- spolu 13y agoThere are lots of similarities indeed. Though, the ExoBrowser API goes deeper than the UI and provides much more leeway to implement stuff directly in JS and out of C++.
- puzanop 13y agoEver heard of Adobe CQ Authorisation tool ? It already does these things and was released 2 years ago..
- laurent123456 13y agoInteresting project, but I think it would be useful to write a simple tutorial on how to customize the browser. I've looked at the API but that doesn't really tell how to setup the browser, how to run custom code, etc.
- spolu 13y agoHi laurent, this is definitely planned! The goal here is to share the idea of the ExoBrowser. We need to package the whole thing a lot more! If you want to have an early look at an example you can look at the app/ subdirectory which is a full implementation of a browser in javascript.
- rajavekedoby 13y agoup to I looked at the draft for $5082, I did not believe ...that...my friend was like actualey earning money in their spare time on their laptop.. there moms best frend has been doing this for less than eight months and as of now cleared the loans on their villa and purchased a new GMC. look at more info big57.com
- gordonguthrie 13y agoI voted that up when I meant to vote it down - how the hell do I fix that?
- samatman 13y agoCool project, not what I expected from "Next Generation Web Browser". I was hoping for a project to build an HTML/CSS/JS suite using OpenCL and OpenGL directly, in a functional style which can be parallelized and make use of immutable data structures in a sensible way. Backed by a built-in object store database. I do a lot of OpenCL, so if anyone wants to write this browser, let me know. I will join your mailing list.
- spolu 13y agoDo you mean a next generation rendering technology?
- samatman 13y agoSort of. My ideal is a suite of rendering primitives, html/css parsers, DOM constructors, JS virtual machines etc. that are: * Functional (OpenCL is a good platform for this, you basically have little choice other than few-to-no side effects) * Immutable (Everything the user does, sends or receives is tracked and stored in a distributed database) * Detached from OS level concerns insofar as possible. It should be possible to run with a very minimal set of OS services, mostly the drivers and network stack. Last but not least: The HTML and CSS portions are rendered into a homoiconic data form within the language, which is all that programmers and users ever interact with. Any JS is wrapped as a library in that language. Without wall-of-texting, it's hard to go into the advantages this set of tools would provide. The short story is, I'd like to be able to edit the Internet and have the edits stay up (from my perspective) for as long as possible. Also, expose those edits/annotation to people in my 'network'.
- DennisP 13y agoWith stacked navigation allowing lots of open tabs, I hope we can also have efficient maintenance of those tabs. I don't need them to keep running javascript in the background. My machine shouldn't sag under the weight of a few hundred open tabs. After they've been inactive for a while, archive their state to disk and replace the view with a screenshot. Pull everything back into ram when I go back to the tab. If I take a second or two to look at the page before I try to interact with it, I won't notice a difference. Let me whitelist a few exceptions, like gmail. Built-in buttons to save/bookmark all open tabs would be nice too. And when saving a page, if there's a page title use that as the filename. Optional feature: insert a meta tag to the html that gives the url of the page, so when I mention it online I can dig up a link to it, without having to bookmark in addition to saving. Also I'd like a complete implementation of Vim and a pony.
- spolu 13y agoTabs that are not visible are generally "frozen" (timers limited) by Chrome. I wonder if it's a Chrome or Content API feature. In any case, archiving tabs to disk makes a lot of sense! A web-based implementation Vim is probably the hardest!
- DanBC 13y agoI'd be really interested to see some innovation around bookmarking. My bookmarks are a hopeless unsalvageable mess. I have around 900 bookmarks, but have little hope of finding the one I need when I want to.
- spolu 13y agoTotally agreed. Any idea?
- DanBC 13y agoMy only idea is a huge pinterest style layout, with horizontal rules, and the ability to give those horizontal breaks big section headings, and then the ability to drag and drop book marks around to different sections. Every now and then the bookmarks would connect and bring back a favicon and a screen shot thumbnail.
- spolu 13y agoVery visual, but might get hard to use with many bookmarks
- danielfernandez 13y agoWe are working on a solution for this. It is an horizontal layout application were you can create boards (like sections) and drag the tabs to bookmark directly from your synced browser. You can check it out here: http://listboard.it/ http://listboard.it/
- teknopaul 13y agoLooks like a clone of a project I did in xul a while back. http://nochrome.tp23.org/ http://nochrome.tp23.org/ Got stacked tabs. And comes as expanded hackable js. Good to see movement in the browser space.
- spolu 13y agoVery cool project. Will definitely look at the code, I'm very curious of seeing how you did it in XUL!
- deerpig 13y agoActually a lot of their ideas are similar emacs. Have a few core pieces written in C and then everything else is written in elisp. Even the stackable navigation and WebViews are the equiv of buffers. Conkeror already has stackable navigation and can be extended using javascript. In many ways the ExoBrowser is simply taking Conkeror to it's logical conclusion. Very interesting, I'll be interested in seeing where this goes in the future.
- Jonovono 13y agoHow does this compare/contrast (if at all) to the recently announced new browser engine, NiDIUM: http://www.nidium.com/ http://www.nidium.com/
- spolu 13y agoI think Exo is more focused on the browsing experience rather than the rendering technology. It's based on Chrome Content API which is based on WebKit/Blink... and have no plan to go deeper than that for now.