10 years of Avalonia!

Steven Kirk
December 5, 2023
Reflecting on the 10-year journey of Avalonia, it's clear that this milestone represents a massive achievement for the community. From its inception as a mere experiment, Avalonia has evolved into a leading, cross-platform framework adopted by some of the largest and most prestigious organisations. This anniversary is not just a celebration of technological achievements; it's a testament to the power of open collaboration, our drive to solve complex challenges, and our unwavering commitment to continuous improvement. Join us in this post as we delve into the early history of the project.
The Initial Commit
https://github.com/AvaloniaUI/Avalonia/commit/cd2b7530f5e3e0cea2c45c39bdc9a433149c2200
At the time Avalonia was called Perspex and Perspex came about from another project which was, rather confusingly, called Avalonia.
The original Avalonia was me playing about seeing how difficult to would be to reimplement WPF as an OSS project. The answer would have been: "very difficult", but more importantly after a few months of sporadically working on it, I decided I wasn't having fun. I wanted to improve things where I saw problems, rather than blindly reimplement WPF warts and all!
Before starting on Perspex I remember thinking to myself "But does the world need another incompatible XAML UI Framework?" (these were the days of WPF/Silverlight/Metro). My answer was "No, but who cares? No one is going to take any notice anyway." And so I began work on Perspex, just to see how far I would get. And I never in a million years would have expected what I started 10 years ago to have become what Avalonia has become today!
The original commit was Windows-only, though there was clearly the intention of making Perspex cross-platform as all of the Windows-specific code was located in Perspex.Windows. It even had 5 unit tests!
Running the TestApplication
that initial commitment shows just how far we've come in 10 years:

A simple "Hello World!" that doesn't even handle window resizing correctly! This was quickly rectified an hour and a half later though:
https://github.com/AvaloniaUI/Avalonia/commit/c8df546e73f90951f5117f1eeb168a33b207652b
Of note is that the initial commit already had in place the strongly-typed DependencyProperty
equivalent that we now know as AvaloniaProperty
(at the time called PerspexProperty
).
Towards a Kinda-Functioning Application
The next few months saw sporadic work on Perspex, mainly starting with implementing the CSS-like styling system. I seemed to be enjoying myself with commit messages for these
By April I had a couple of very basic controls working (Button and CheckBox):

And by November of 2014, I had a pretty basic application which included things like a basic TabControl, TextBox, TreeView and even DevTools:

Moving Cross-Platform
Nearly a year after the initial commitment, I started working on making Perspex cross-platform. The initial cross-platform work was to add a Cairo renderer in addition to the existing Direct2D renderer:
First Contribution!
And then on November 30 2014, a milestone! Our first outside contribution from @SuperJMN: if you're ever wondering who to thank for being able to set your Window title in Avalonia, you can thank José!
Soon after that, @keichinger came along to help with documentation (something we struggle with to this day!)
And the same day, another outside contribution from @ncarrillo:
@ncarrillo was quite active in the months following these first commits and was soon joined by @robertofon too. In the meantime @SuperJMN was quiet, preparing something big...
XAML Support
Believe it or not, up to this point Perspex had no XAML support. All UI was defined in C# code (which is something that seems to have come back into fashion with a bang more recently) and I was pretty down on the verboseness of WPF XAML at the time too (I'm still not a huge fan if I'm honest, but that's for another day).
However XAML support remained a popular feature and so @SuperJMN had quietly went away and wrote the OmnXAML library; and on Aug 24 2015, added XAML support to Avalonia:
At this point, Perspex was still pretty basic, but things were starting to take shape, with a few controls now implemented, and even basic animations and popups in place, though it looks like, despite the work on cross-platform support, that the 0.0.1-alpha release was still Windows-only:

Familiar Faces
The 0.0.1-alpha release was pretty basic, but it was enough to get the interest of a few maintainers who have stuck around until this day!
The venerable @kekekeks showed up three days later with the following inauspicious commit, which was soon followed by many other more substantial commits:
A week later he was already infuriated by StyleCop:
A few weeks later, along came @danwalmsley with his first fix for TextBox
:
Followed by some other familiar names who contributed greatly to the success of the project in those early years:
Designer Support
Almost immediately after his first commit, @kekekeks started to work on implementing the designer (or, more accurately previewer):
And just a day later, along came @Seeker1437 to start adding that support to the Visual Studio Extension!
It's pretty interesting to look back and see how fast things were starting to move by this point!
Experimental Mobile Support
Shortly after adding designer support, @kekekeks started work on adding support for Android and iOS too!
The Big Rename
It was quickly becoming obvious that, far from being a personal project that I was working on to scratch an itch, Avalonia had the chance of actually becoming a feasible UI framework. With that, the potential legal troubles of using a trademark (Perspex) came to the front, and after what seemed like a long period of deliberation, we decided to rename Perspex to Avalonia, stealing the name of the aborted project that it replaced.
0.4.0
Avalonia 0.4.0 was released in August 2016 - a year after Perspex 0.0.1-alpha.
I think this can be thought of as the first "real" release of Avalonia: partly because it's the first to have the Avalonia name but more importantly one can really see the foundations of modern Avalonia were really in place by this point, even though there was still so much to do. I remember us planning to do a 1.0 release "about a year" after 0.4.0, but that never happened. In fact deciding on when we were at 1.0 proved to be such a difficult job that we finally jumped from 0.10 to 11.0 in 2023!
This release even had a video (made by @kekekeks, resplendent with relaxing music)!
https://www.youtube.com/watch?v=c_AB_XSILp0&t=28s
And with that, I think would be a good time to finish this first part of our walk through the history of Perspex Avalonia. A huge thank you to the hundreds of contributors who helped us along the way, and here's to another 10 years! 🍻