Happy birthday, qutebrowser!

5 years ago today, this happened:

commit 11a94957dc038fc27c5ff976197ad2b2d0352d20
Author: Florian Bruhin <git@the-compiler.org>
Date:   Sat Dec 14 22:15:16 2013 +0100

    Initial commit

That's how qutebrowser looked a day after that (and that commit still seems to run!): https://imgur.com/a/xoG1r4G

Exactly a year later, things were finally ready for a v0.1 release, after spending two weeks of holidays with fixing bugs.

Originally, qutebrowser was born because the dwb project was discontinued: https://portix.bitbucket.io/dwb/

That's what I (and many others) were using at the time, and all alternatives were stuck with an unmaintained WebKit1. Since everything was using WebKitGTK which was horribly buggy (and WebKit2 in WebKitGTK lacked a lot of basic features), I decided to start my own thing, based on Qt instead.

Back then, there were already discussions about QtWebEngine, and I originally wondered whether I should just wait with starting qutebrowser until it's ready. QtWebEngine support was finally added in July 2016, a lot later than I imagined. Initially, many features didn't work yet, but in September 2017 it finally became the default backend.

Later, it turned out that qutebrowser also was a viable alternative for many Pentadactyl/Vimperator refugees, and qutebrowser got more popular than I ever imagined.

So far, there have been:

  • 17,227 commits
  • 3,193 issues
  • 1,273 pull requests
  • 242 contributors
  • 47 releases
  • 2 crowdfundings
  • dozens of t-shirts
  • thousands of stickers

Thanks a lot to the whole community - y'all are awesome! I never imagined I would be working on this for so long, or that it'd gain so much traction. I also didn't believe the crowdfunding thing would work. You showed me otherwise o/

Some 3-4 years ago, I noticed there were a couple of big things I'll be busy with for a while:

  • Adding a testsuite because things broke a lot
  • QtWebEngine
  • The new config system
  • An extension API

I'm currently working on the fourth one. Not many new very big tasks have appeared (except maybe a testsuite which isn't as unreliable and slow, and some refactorings to keep my sanity when working on the code).

I'm really looking forward to the point where I can work on smaller things (and new features) again - for a long time, most of my time was spent reviewing contributions, fixing bugs, putting out fires with Qt upgrades, and working on those four major things.

All posts

  1. CVE-2018-10895: Remote code execution due to CSRF in qutebrowser
  2. qutebrowser v1.3.3 released (security update!)
  3. qutebrowser v1.2.0 released!
  4. T-Shirts shipped, initial implementation of per-domain settings
  5. Current state of per-domain settings
  6. qutebrowser v1.0.0 released!
  7. qutebrowser v1.0.0 is coming closer
  8. New config merged!
  9. Config revolution - Part 1 finished
  10. Refactoring more things, a working YAML config, and more!
  11. Refactoring all the things!
  12. First week
  13. First 2 days
  14. Getting started again
  15. Second qutebrowser crowdfunding launched!
  16. qutebrowser v0.10.0 released
  17. Wrapping up and looking at the future
  18. Days 39/40/41: Lots of features!
  19. Days 37/38: Hints in master, tests
  20. Day 36: Hints!
  21. Days 33-35: Mouse functionality, and rewriting hints
  22. Days 31/32: More web elements
  23. Days 29/30: Web elements
  24. Days 27/28: Settings and web inspector
  25. Day 24-26: Refactoring the WebElement API
  26. Day 21-23: After Europython and releases
  27. Day 19/20: Bugs everywhere!
  28. qutebrowser v0.8.0 released
  29. Day 18: Javascript
  30. Day 17: Printing and searching
  31. Sending out qutebrowser and pytest stickers
  32. Day 15/16: Merged!
  33. Day 13/14: Almost merged!
  34. Day 12: Tests running!
  35. Day 10/11: Refactoring!
  36. Day 9: A bit of everything
  37. Day 8: More fixing and pytest sprint/training
  38. Day 7: Fixing things
  39. Day 6: Branching off
  40. qutebrowser v0.7.0 released
  41. Day 4: Playing whack-a-mole
  42. Day 3: Last pull requests and managing requirement files
  43. Day 2: More pull requests and nicer test output
  44. Day 1: Merging pull requests, and a stupid bug
  45. About and Timeline