Offer to take over maintenance Odysseus development has been discontinued in favor of Epiphany a.k.a. Web & independant browser engines.



What has been going on in Odysseus development?

Farewell Odysseus!

Jun 4, 2022

Its been too long since I last worked on Odysseus, or have written to this blog! But looking at the state of elementary’s builtin browser (codenamed “Epiphany”) in Jolnir I have to say I feel Odysseus has less of a reason to exist. Epiphany is a nice enough browser that I’m happy to contribute what I consider to be some of Odysseus’s most important features to it, so that I can focus on other projects I consider more important. Namely my own browserengines exploring the potential of the web without JavaScript to be perfectly suited to viewing on absolutely any device! Show how versatile text is as a medium!

Tagged Bookmarking

Sep 27, 2020

I view getting bookmarking right, so it’s more convenient than performing that websearch again on a centralized non-private webservice, as being vital for Odysseus!

Retrospective 2019

Jan 1, 2020

I have two major drivers pushing me to work on Odysseus. The first being how much I love and appreciate software freedom, elementary OS, & the sheer range of things published to The Web! These aspects of Odysseus were easy to implement.

Repost: Deconstructing Google’s excuses on tracking protection

Aug 24, 2019

Deconstructing Google’s excuses on tracking protection

Personalized Suggestions

Jul 17, 2019

A new Odysseus update is out supporting personalized link suggestions, so why is this important? And how does it work?

My Own CSS Engine

Jun 24, 2019

I’ve stated before how I vital I see it is for new browser engines to be developed, in order to fight the collapse of browser divirsity and push the web to simplify enough to continue surviving. For my small part of this I implemented a CSS engine from scratch.

Repost: Web engines in Haskell

May 31, 2019

Web engines in Haskell

The collapse of browser engine diversity has been very concerning to me as a browser developer. I rely on it to keep the Web cross-platform, and as such I’m pleased to see developers like Chris exploring the feasability of reimplementing a subset of the web platform. My own attempt wasn’t near as successful, possibly because I knew too much about how existing browser engines work.

Repost: Into the Personal-Website-Verse

May 31, 2019

Into the Personal-Website-Verse

This blogpost recommends embracing personal websites as an alternative to the pandora’s box of social networking, and of particular interest me explores some options for decentralized discovery. This is very much the future I want to see for the Web, and I don’t know what to add.

Repost: Re-decentralizing the Web

May 30, 2019

Re-decentralizing the Web

Cross Distro Packaging

May 28, 2019

I’ve been busy recently packaging Odysseus for multiple distros and making sure it looks great across all of them. Because I’ve heard from people not on elementary OS who are keen to use Odysseus.

Odysseus supports webfeeds!

Apr 9, 2019

As I’ve blogged before I deeply believe you shouldn’t have to rely on some central service, waste your time revisiting websites, or provide your contact information in order to keep up to date with your favourite websites. Subscribing for updates must be trivial and private.

Page Status Indicators

Oct 8, 2018

It is my goal in designing Odysseus to keep it looking as simple as it’s MVP despite it’s accumulation of features, and over the last several days I’ve been working on a UI component that will facilitate that - incorporating numerous new features in a succinct and unobtrusive way. Or looked at another way it provides a communication channel through which I can communicate information about webpages in a way they can’t fake it.

Repost: The Powerhouses of the Internet Are Turning Hostile to Websites

Sep 27, 2018

The Powerhouses of the Internet Are Turning Hostile to Websites

This artical describes how many of the major “social networks” are trying to keep people on their silo rather than venturing off onto the wider web. To me this is terrible! That wider web is the web,k and where all it’s value comes from! If you’re just using specific services, why have The Web in the first place? (Certainly we’d still need The Internet though).

Repost: How to Build a Low-tech Website?

Sep 26, 2018

How to Build a Low-tech Website?

This is a very interesting read about the impact on energy demand the way we consume and even publish websites impacts the environment via electricity demand. It’s very valuable reading for an web, or web-adjacent, developer. I find it inspiring.


Sep 26, 2018

You may have noticed this site now has it’s own domain name: I’m doing this to reduce how tied I am to GitHub. And thus show my commitment to the open decentralized web outside of the major silos like Google.

Happy Internation Day Against DRM!

Sep 18, 2018

Today in celebration of International Day Against DRM, I tightened up my recommended links relating to DRM-free entertainment as guided by’s campaign site. So now via greater focus Odysseus will guide it’s new surfers towards ethically distributed media they can actually view in Odysseus or elementary’s other apps. Feel free to checkout these links in your celebration!

Topsites Performance

Sep 15, 2018

I’ve been experiencing some performance problems with Odysseus’s topsites display, and I hear so have some of you. So overtime I have been adding performance improvements to it, and I may continue to do so. In this post I will document what these have been, what these may be.

Repost: The Ecological Impact of Browser Diversity

Sep 1, 2018

The Ecological Impact of Browser Diversity

Webfeed Previewer

Aug 31, 2018

A new Odysseus update is currently being released with support for previewing webfeeds. It also includes some fixes so it still works on the latest WebKitGTK.

Microsoft <3 GitHub

Jun 5, 2018

tl;dr; Microsoft hasn’t changed but I don’t hate them, GitHub is fine, the acquisation isn’t a big deal, but the controversy is a good thing.

Encouraging a More Open Web via a Stronger App Ecosystem

Jun 2, 2018

Native vs Web, it’s a heated argument. But perhaps it’s not an argument we should be having.

Refactoring and Optimizing Prosody

May 31, 2018

I’ve spent the last few days making Prosody’s code read better, with there being two dominant changes. Both of which would also decrease Odysseus’s CPU and memory usage (Note: I haven’t measured this, but the latter of these makes a difference on human-visible timescales). And both of which serves as great illustrations of some Computer Science concepts.

Recommendations on the Homepage

May 26, 2018

In my last post I stated that I would next be incorporating those recommendations into the newtab page. And just today I managed to do so, which means that a new update is coming very soon.

New First-launch Site

May 17, 2018

On first launch if an elementary app doesn’t have any other data to show it should highlight some options for loading data into the app. The way you load data into Odysseus is by simply surfing the web, so to follow that principle I’ve designed a website with a bunch of links to start your websurfing on.

Let's Replacing JavaScript With Something Better — For Page Manipulation

Apr 21, 2018

This post is a reply to Let’s Replace JavaScript With Something Better, so I’ll expect you to have read it first. Did you read it? Good. Let’s procede!

Incorporating WebData Into Templates

Apr 20, 2018

One of the best things about the Web is that you can take data from multiple sites and combine them into your own display, even if most people celebrating that fact are really trying to get you to improve the value of their silos for free. But nevertheless it was a feature I wanted to incorporate into Prosody. And today I drafted the code to make it work, in what is essentially Prosody bindings for LibSoup.

REPOST: Let's Replace JavaScript With Something Better

Apr 14, 2018

Today I came across a fantastic artical through the fediverse.

Customizable Topsites on odysseus:home

Apr 13, 2018

This took me longer then I expected, but I finally managed to release an update that allows you to customize the topsites visible on the new tab page. It took so long because I needed to expose more capabilities to Odysseus’s internal pages, but also because it’s hard to see this working until I’ve pulled everything together. Saving your updates is entirely seperate from reading it back in, and both of those have their own “front-end”/UI and “back-end”.

Abstraction in Prosody Templating

Mar 18, 2018

Now I’m seriously beginning to work with the Prosody templating language (it’s basically just Django’s) I defined early on in Odysseus development, and now I’m seriously starting to use it. To discover it’s strengths and weaknesses, and how I can make it best suited to my work.

History FullText Search Integrated, How Does It Work?

Mar 17, 2018

Since version 1.1.0, two things have really been on my mind. First off initially I thought WebKit could handle it if I fed your browser history to it in chunks, but it turns out it reads the whole page in one go then renders it. Which I can understand leads to a better experience on the fast networks of today (but I swear browsers used to render partial pages). So I had to rush out a patch, before your browsers started freezing, to add pagination to the history viewer, which should get to you anytime now.

Odysseus 1.1.0 Released, Now With Browser History

Mar 13, 2018

Yesterday I completed the development of browser history, which is now available on the elementary AppCenter!

Language Roundown for Internal Pages

Jan 2, 2018

Happy New Years! You may think me odd, but I started my year adding the infrastructure I needed for Odysseus’s resolutions.

Odysseus Plans for 2018

Dec 31, 2017

It is New Years day for me, and while I do have other New Year’s resolutions (not that it’s a thing I tend to be very big on), I thought I’d celebrate in part by laying out my plans for Odysseus here and now.

Odysseus is on The AppCenter

Dec 29, 2017

Odysseus is now in the elementary AppCenter, and I quickly got one interested surfer who acted as a bit of a tester. However it appears AppCenter isn’t seeing my application metadata, but I’ve got an attempted fix for that in the pipeline. Perhaps it’s for the best as that gives me a chance to take WebShapedBiz’s feedback before it gets seriously promoted in AppCenter’s new app carousel.

Planning internal Trait Framework

Dec 26, 2017

While I wait for Odysseus to be accepted into the AppCenter (which is probably understandably slow during the Holiday season), I thought it might be nice to lay out a short-term roadmap for an internal framework to develop longer-term (though very important) browser features on.

Faster Startup with Delayed Loading of Pages

Dec 21, 2017

I just added a nice new feature to improve Odysseus’s startup performance, while it will still reopen the pages you had open last time you used Odysseus now it will hold off on loading those webpages. That is Odysseus now has a blazingly fast startup which remembers where you left off, it’s just what the doctor ordered.

Great New Downloads Experience

Dec 20, 2017

It took me a little bit to get this working right, although much of that was me unwinding after all the refactorings I’ve been doing recently, but Odysseus now has a great downloads experience.

Meson and Dock Progress

Dec 18, 2017

Today having gotten through all the refactoring I wanted to do, I rewrote my build files to use Meson rather than CMake and started to work on some new features to better integrate Odysseus into elementary OS.

Repost: How the Sausage Gets Made: The Hidden Work of Content

Dec 18, 2017

How the Sausage Gets Made: The Hidden Work of Content @

Release Cleanup: Day 8

Dec 17, 2017

Today I reimplemented the internationalization infrastructure for internal pages. This has long been a source of SEGFAULTS whether I used OS internationalization or my own code, so I rewrote that infrastructure yet again today. On a similar note I also setup a Transifex account for Odysseus. Unfortunately the translatable text from the internal pages have not been loaded into Transifex due to it’s custom code. Maybe if I can get a WebLate instance (perhaps my own or elementary’s) I can hack it to understand my messages format.

Release Cleanup: Day 7

Dec 16, 2017

I slowed down a fair bit on Odysseus development over the previous 3 days because I was busy graduating in Computer Science. However I did manage get some work done over those days and I finished that chunk of work today.

Repost: Bitcoin+Server Farm Energy Concerns

Dec 15, 2017

If You Are Going To Worry About Bitcoin's Energy Consumption, Worry About Server Farms Too -- For More Than One Reason @

Release Cleanup: Day 6

Dec 12, 2017

Today I scheduled towards cleaning up all of Odysseus’s “traits”. To my surprise they were all simple enough that they hardly needed tidying up at all. Sure there’s some FIXMEs in the error reporting trait, but I’m not sure how to fix them at the moment, they’re not serious bugs, and the code remains clear regardless. The biggest thing I did there was to extract the singleton code for a WebKit.WebContext out into a new “service” whilst keeping most the configuration in a trait. This was done to maintain an ideolized dependency graph between my Model, Services, Traits, & UI layers.

Release Cleanup: Day 5

Dec 11, 2017

Today I focused on the Widgets/header package, but as that’s mostly code sourced from other elementary projects there wasn’t much to clean up leaving me to focus on the AddressBar. AddressBar was already very nicely written, in part because of how simple it is, but I did manage to find some things to correct.

Site Upgrades, Now With Branding & Comments

Dec 11, 2017

If you’ve been reading this blog (which I don’t imagine many have been yet), you may have noticed it looks much more professional now. This came about over last night with most of the changes revolving around incorporating a splash of branding. Though I also made the header’s gradient more pronounced and adjusted the layout of whitespace so the site both looks nicer and so it no longer triggers an ugly scrollbar at the bottom. It actually quite surprised my how big of a difference a little branding makes.

Release Cleanup: Day 4

Dec 10, 2017

Today’s work is much more along the lines of bugfixing rather than cleaning up my code style. The status bar now behaves correctly in how it reports the find-in-page count and destinations of links, and now all tabs will reliably have a favicon at all times.

Release Cleanup: Day 3 Part 2

Dec 9, 2017

Another class cleaned up in the second part of the day, this time WebTab. There I moved concerns out into Persistance and other “Traits”, and continued splitting the constructor into seperate methods & Widgets. While I was at it I moved to using my own UserAgent string as I’ve been struggling to keep up to date with Safari’s, and I corrected the behaviour of the find toolbar.

Release Cleanup: Day 3

Dec 9, 2017

I’ve still been on BrowserWindow refactoring today, working on some much more intense refactoring. Essentially the main thing I did was to extract out the common layout patterns into a HeaderBar subclass so I can write the BrowserWindow code a bit more declaratively. It’s not as concise as the psuedocode I shared yesterday as it wasn’t worth it (unlike before) to implement that syntax; it creates more effort then it saves.

Release Cleanup: Day 2

Dec 8, 2017

Today’s cleanup was fairly involved, but on the lighter side I started by integrating the recommendations site into the first start. This was then followed up by numerous refactorings of the BrowserWindow class.

Release Cleanup: Day 1

Dec 7, 2017

Today I started to look at what partial refactorings I could finalize, what deprecated APIs I could move away from, and how I could otherwise clean up my code. I’m doing this file by file, and have just decided I wanted to blog about each set of files I do. As such this is the inaugural post on the summer cleaning progress.

MVP - Is Feature Complete

Dec 6, 2017

Today I got dragging a tab out into it’s own window working, which is part of the behaviour of a standard elementary tabbar. This required messing with the task scheduling a little for it to work1, but the Scratch text editor served very well as sample code to get any issues resolved. What I didn’t manage to get working is restoring tab history, but that’ll have to wait until a particular WebKitGTK update which I won’t let hold up Odysseus’s release any longer.

New Recommendations Site

Dec 4, 2017

I’ve just put some time consuming effort into the first-launch experience of Odysseus, and unlike most other browsers it’s not a tour of Odysseus’s features. Instead inline with the HIG it’s a well-presented bunch of links1.

Tabs Now Pin

Oct 24, 2017

I know it’s been a while since the last post, but now I’m nearing the homestretch to when I’ll feel comfortable publishing this to the elementary AppCenter. I’m really looking forward to it.

A Day's Work

Oct 12, 2017

It took me too long to get back to Odysseus development, but today I got a lot done on it. I’ve fixed some issues I’ve been having with SQLite3, fixed some newcoming bugs, figured out where I currently stand in regards to EME, and made some fixes to my icon to fit in even better with elementary’s excellent ones.

Followup: Hypothetical Web Redesign

Oct 9, 2017

NOTE This is the final pure geeky entertainment post in this series about an alternative Web. The next post should be back to documenting Odysseus development. If you haven’t already, I recommend you read the first post in this series first.

Re: What Should Follow the Web

Sep 26, 2017

NOTE This is a continuation of the previous pure geeky entertainment post, and a reply to the continuation of the post which inspired that.

Hypothetical Web Redesign

Sep 26, 2017

NOTE This long post is purely for very geeky entertainment. Feel free to skip it.

EME now a W3C Recommendation

Sep 20, 2017

The W3C has just announced that the appeals process has failed and EME is now a W3C recommendation without any covenant against anti-circumvention laws. Needless to say I am deeply dissapointed by this.

Integrating SQLite

Aug 17, 2017

I like HTML and CSS. HTML’s syntax is specifically designed to make it easy to specify the typographic meaning of text to be communicated to users, and incorporating other resources into it. CSS meanwhile is specifically designed to specify how to communicate that typographic meaning. Compared to this JavaScript is a bit of a cope-out with it’s turing complete control flow taken straight from C. However SQL is not, and that’s why I have recently integrated it into Odysseus (for it’s own use) via SQLite.

Quick Tip

Jul 30, 2017

If your software is behaving strangely, consider your conditions. You may need to negate them.

On Non-native UX

Jul 28, 2017

As you may well know, Odysseus aims to feel native to elementary OS. However sticking too rigidly to the familiar and native controls may actually hurt the user experience. This might be when the Web UX Odysseus exposes handles page navigation better then those native controls, or it might be when a native control seems to be designed for the purpose you have but really handles a different one. The latter can be especially tricky when that native control has some atypical behaviour that’s tricky to reimplement.

New Odysseus Icon!

Jul 26, 2017

Surprisingly the main challenge I faced in developing Odysseus was not in getting it to render webpages1. GNOME and Apple have largely handled that for me. No, the main challenge was in designing an icon for it.

Page Generation in Odysseus

Jul 22, 2017

O.K., that’s enough ranting about the W3C. Especially since I believe what they’re doing is extremely valuable in that it allows not just one but two vibrant markets to survive — websites and browsers. Their open standards not only allow people to easily publish their knowledge and entertainment for pennies (if that), but it also allows new operating systems to incorporate that value in a way that best works with their User eXperience (UX). Ofcourse it also allows third parties to succeed in building their own browsers and thereby keep us1 on our toes, despite the lack of value they tend to place on a native UX.


Jul 21, 2017

Another recent standard that deserves consideration is WebAssembly, as it provides web developers a closer-to-the-metal language with which they can better obfuscate their code.

Encrypted Media Extensions

Jul 20, 2017

The elephant in the room around web standards at the moment is EME (Encrypted Media Extensions), sold by Apple as “Premium HTML5 Video”. However “premium” implies the best artists will always demand DRM, which is outright false. It also refers to EME as a (W3C) standard, which I am not onboard with as it has a gaping hole in the specification - a hole they call CDMs (Content Decryption Modules). As such the only thing I agree with Apple’s branding on here is that it’s about online video.


Jul 19, 2017

I wanted a place to comment on the development of the Odysseus web browser, and any web standards of particular note. For that reason I started this blog.