Community Highlights
Community Highlights
Community Highlights
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
commit c8df546e73f90951f5117f1eeb168a33b207652b Author: grokys <grokys@gmail.com> Date: Wed Dec 11 22:43:22 2013 +0100
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
commit c8df546e73f90951f5117f1eeb168a33b207652b Author: grokys <grokys@gmail.com> Date: Wed Dec 11 22:43:22 2013 +0100 Re-measure/render when window resized
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
commit 581a037cb8b87561003184012f1d48cf732f8fe9 Author: grokys <grokys@gmail.com> Date: Tue Feb 4 01:17:42 2014 +0100 Style council. commit ae79a51d727f4df07b5e83a03ddcca47478195ff Author: grokys <grokys@gmail.com> Date: Tue Feb 4 02:12:08 2014 +0100 Styley style. commit ac659701b8811c6d2e75e6bbb8c40b26a28669e7 Author: grokys <grokys@gmail.com> Date: Tue Feb 4 18:00:19 2014 +0100 Style away the hours. commit 63f674d897ba4e9b7f37ce9e6e1d99b86a05a9fc Author: grokys <grokys@gmail.com> Date: Tue Feb 4 18:15:18 2014 +0100 Gangnam Style commit 18bbb2c41e3bd03e57d55c57413b34fc43a9ac70 Author: Steven Kirk <grokys@gmail.com> Date: Wed Mar 12 23:17:39 2014 +0100 WIP Not sure where I am - went away for 2 weeks and forgot what I was doing. oops
By April I had a couple of very basic controls working (Button and CheckBox):
commit c1a09314456ebd7dbe604f9d8709d4a74277c27d Author: Steven Kirk <grokys@gmail.com> Date: Sun Apr 6 01:09:28 2014 +0200 Added (VERY!) basic 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:
commit 7167f26c93b2bffc30143d928523f9fe10478717 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:14:43 2014 +0100 Trying to create a cairo renderer. Not working. Nothing is drawn... commit 848f8e7b4bfff7c5bbd400ac73cdb3d4c842f750 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:38:17 2014 +0100 Now at least draws something. Need to implement a fair bit more before it makes sense though! commit b9609d3621fd64bb1fee69f83fc800feacc6a7a5 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:56:36 2014 +0100 Make transforms work. Now draws something resembling the proper content
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é!
commit 5f1b9617bb5d5ae4f2426097ff5c4917de257037 Author: SuperJMN <superjmn@outlook.com> Date: Sun Nov 30 23:36:57 2014 +0100 Title property for Window
Soon after that, @keichinger came along to help with documentation (something we struggle with to this day!)
commit 7aec2d141cabecd5f590aee3660be324312de0f1 Author: Kai Eichinger <cH40z-Lord@outlook.com> Date: Thu Dec 11 15:48:45 2014 +0100 Added syntax highlighting to intro.md
And the same day, another outside contribution from @ncarrillo:
commit a6476cb7ec69f7a220de0bd33ed989ec3b906806 Author: Nelson Carrillo <ncarrillo@harbortouch.com> Date: Thu Dec 11 09:59:50 2014 -0500 - Added Ctrl+A to select all text in the TextBox - Made the TextBox lose its selection when focus is lost
@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:
commit fc3cc76bd60e897d4aaf1e66ffcdfce7517603b1 Author: José Manuel Nieto Sánchez <superjmn@outlook.com> Date: Mon Aug 24 02:20:37 2015 +0200 Added XAML feature
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:
commit ef7d86f04e7c634579756672efb76691fdc12185 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Aug 31 22:33:58 2015 +0300 Broken link https://github.com/grokys/Perspex/blob/master/Docs/architecture.md - 404 https://github.com/grokys/Perspex/blob/master/docs/architecture.md - OK
A week later he was already infuriated by StyleCop:
commit 7f72c7763b227a3225f470bc84a4935fc3175791 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Sep 7 23:03:00 2015 +0300 Implemented cursors. Ceterum censeo StyleCopum esse delendum
A few weeks later, along came @danwalmsley with his first fix for TextBox
:
commit 8309adf6dac298b5c78b754f064bfdeb40e47933 Author: Dan Walmsley <dan@walms.co.uk> Date: Fri Sep 25 00:35:11 2015 +0100 Implemented caret inverting background colour
Followed by some other familiar names who contributed greatly to the success of the project in those early years:
commit b13b870741aefe63f3f7c7c83ae50cd256209be4 Author: Wiesław Šoltés <wieslaw.soltes@gmail.com> Date: Wed Nov 4 00:48:03 2015 +0100 Added RelativeRectTypeConverter commit 74cea9595637c6351b2f633d3be782a7b7c681ec Author: Jeremy Koritzinsky <jkoritzinsky@live.com> Date: Mon Feb 22 18:48:11 2016 -0600 Can now bind to a non-IList/Array indexer (with any parameter type convertible via TypeUtilities)
Designer Support
Almost immediately after his first commit, @kekekeks started to work on implementing the designer (or, more accurately previewer):
commit abf60b5a5ce84c905c2e2d8106d7a88de11ce8f7 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Wed Sep 2 12:29:50 2015 +0300 Added EmbeddedWindowImpl for embedding and designer support commit eee5da30a0214869b2f99f7bcd29b0e0510084e8 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Thu Sep 3 00:12:12 2015 +0300 Designer: Initial out-of-process renderer implementation
And just a day later, along came @Seeker1437 to start adding that support to the Visual Studio Extension!
commit ecd6efe766324ecbb44d23b7d15837cf3001a14a Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Thu Sep 3 21:26:15 2015 -0400 Add Designer Support Part 1 commit fdcb454b27f95951ac5afa575df831f14aad4659 Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Fri Sep 4 07:47:46 2015 -0400 Small source code corrections commit 0d0e70312bb2829b08852276b0a9661d92ef7f18 Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Sun Sep 6 02:59:50 2015 -0400 Add Designer Support Part 2 * Add build start/stop detection * Removed unused references * adjusted injection code to keep trying if not able to find the needed entry point (rare) * Now displays designer properly * Now can detect output path (Improvable, current will not detect change without reopening designer) * Now detects when designer is closed * better namespace detection with fallback
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!
commit abd7edd6b04264048977a636db71e38593fd8169 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Nov 9 03:05:55 2015 +0300 Android support for skia commit 0870aad3d79b26222681a9ec3a0c4ef7f8dd605f Author: Nikita Tsukanov <keks9n@gmail.com> Date: Tue Nov 10 16:30:46 2015 +0300 Build Skia.Android on CI commit d6745e88c1d90d98c84425c025107a5fffda43a4 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Sun Nov 15 04:46:44 2015 +0300 Added iOS support for skia backend commit 043e1d5eaf0648d04f69348ea931c83d3d6ceebc Author: Nikita Tsukanov <keks9n@gmail.com> Date: Thu Nov 26 02:49:21 2015 +0300 Added nuget package for iOS
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.
commit 5be41985c32c1270b41aa531e8b2a96ddf6792cb Author: Steven Kirk <grokys@gmail.com> Date: Wed May 11 23:36:54 2016 +0200 Renamed Perspex -> Avalonia
0.4.0
Avalonia 0.4.0 was released in August 2016 - a year after Perspex 0.0.1-alpha.
commit e71e6714f0be6fae9136af4def747bce58af41a6 (tag: 0.4.0) Author: Steven Kirk <grokys@gmail.com> Date: Sat Aug 6 10:58:10 2016 +0200 Added link to VS extension
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! 🍻
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
commit c8df546e73f90951f5117f1eeb168a33b207652b Author: grokys <grokys@gmail.com> Date: Wed Dec 11 22:43:22 2013 +0100
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
commit c8df546e73f90951f5117f1eeb168a33b207652b Author: grokys <grokys@gmail.com> Date: Wed Dec 11 22:43:22 2013 +0100 Re-measure/render when window resized
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
commit 581a037cb8b87561003184012f1d48cf732f8fe9 Author: grokys <grokys@gmail.com> Date: Tue Feb 4 01:17:42 2014 +0100 Style council. commit ae79a51d727f4df07b5e83a03ddcca47478195ff Author: grokys <grokys@gmail.com> Date: Tue Feb 4 02:12:08 2014 +0100 Styley style. commit ac659701b8811c6d2e75e6bbb8c40b26a28669e7 Author: grokys <grokys@gmail.com> Date: Tue Feb 4 18:00:19 2014 +0100 Style away the hours. commit 63f674d897ba4e9b7f37ce9e6e1d99b86a05a9fc Author: grokys <grokys@gmail.com> Date: Tue Feb 4 18:15:18 2014 +0100 Gangnam Style commit 18bbb2c41e3bd03e57d55c57413b34fc43a9ac70 Author: Steven Kirk <grokys@gmail.com> Date: Wed Mar 12 23:17:39 2014 +0100 WIP Not sure where I am - went away for 2 weeks and forgot what I was doing. oops
By April I had a couple of very basic controls working (Button and CheckBox):
commit c1a09314456ebd7dbe604f9d8709d4a74277c27d Author: Steven Kirk <grokys@gmail.com> Date: Sun Apr 6 01:09:28 2014 +0200 Added (VERY!) basic 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:
commit 7167f26c93b2bffc30143d928523f9fe10478717 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:14:43 2014 +0100 Trying to create a cairo renderer. Not working. Nothing is drawn... commit 848f8e7b4bfff7c5bbd400ac73cdb3d4c842f750 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:38:17 2014 +0100 Now at least draws something. Need to implement a fair bit more before it makes sense though! commit b9609d3621fd64bb1fee69f83fc800feacc6a7a5 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:56:36 2014 +0100 Make transforms work. Now draws something resembling the proper content
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é!
commit 5f1b9617bb5d5ae4f2426097ff5c4917de257037 Author: SuperJMN <superjmn@outlook.com> Date: Sun Nov 30 23:36:57 2014 +0100 Title property for Window
Soon after that, @keichinger came along to help with documentation (something we struggle with to this day!)
commit 7aec2d141cabecd5f590aee3660be324312de0f1 Author: Kai Eichinger <cH40z-Lord@outlook.com> Date: Thu Dec 11 15:48:45 2014 +0100 Added syntax highlighting to intro.md
And the same day, another outside contribution from @ncarrillo:
commit a6476cb7ec69f7a220de0bd33ed989ec3b906806 Author: Nelson Carrillo <ncarrillo@harbortouch.com> Date: Thu Dec 11 09:59:50 2014 -0500 - Added Ctrl+A to select all text in the TextBox - Made the TextBox lose its selection when focus is lost
@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:
commit fc3cc76bd60e897d4aaf1e66ffcdfce7517603b1 Author: José Manuel Nieto Sánchez <superjmn@outlook.com> Date: Mon Aug 24 02:20:37 2015 +0200 Added XAML feature
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:
commit ef7d86f04e7c634579756672efb76691fdc12185 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Aug 31 22:33:58 2015 +0300 Broken link https://github.com/grokys/Perspex/blob/master/Docs/architecture.md - 404 https://github.com/grokys/Perspex/blob/master/docs/architecture.md - OK
A week later he was already infuriated by StyleCop:
commit 7f72c7763b227a3225f470bc84a4935fc3175791 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Sep 7 23:03:00 2015 +0300 Implemented cursors. Ceterum censeo StyleCopum esse delendum
A few weeks later, along came @danwalmsley with his first fix for TextBox
:
commit 8309adf6dac298b5c78b754f064bfdeb40e47933 Author: Dan Walmsley <dan@walms.co.uk> Date: Fri Sep 25 00:35:11 2015 +0100 Implemented caret inverting background colour
Followed by some other familiar names who contributed greatly to the success of the project in those early years:
commit b13b870741aefe63f3f7c7c83ae50cd256209be4 Author: Wiesław Šoltés <wieslaw.soltes@gmail.com> Date: Wed Nov 4 00:48:03 2015 +0100 Added RelativeRectTypeConverter commit 74cea9595637c6351b2f633d3be782a7b7c681ec Author: Jeremy Koritzinsky <jkoritzinsky@live.com> Date: Mon Feb 22 18:48:11 2016 -0600 Can now bind to a non-IList/Array indexer (with any parameter type convertible via TypeUtilities)
Designer Support
Almost immediately after his first commit, @kekekeks started to work on implementing the designer (or, more accurately previewer):
commit abf60b5a5ce84c905c2e2d8106d7a88de11ce8f7 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Wed Sep 2 12:29:50 2015 +0300 Added EmbeddedWindowImpl for embedding and designer support commit eee5da30a0214869b2f99f7bcd29b0e0510084e8 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Thu Sep 3 00:12:12 2015 +0300 Designer: Initial out-of-process renderer implementation
And just a day later, along came @Seeker1437 to start adding that support to the Visual Studio Extension!
commit ecd6efe766324ecbb44d23b7d15837cf3001a14a Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Thu Sep 3 21:26:15 2015 -0400 Add Designer Support Part 1 commit fdcb454b27f95951ac5afa575df831f14aad4659 Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Fri Sep 4 07:47:46 2015 -0400 Small source code corrections commit 0d0e70312bb2829b08852276b0a9661d92ef7f18 Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Sun Sep 6 02:59:50 2015 -0400 Add Designer Support Part 2 * Add build start/stop detection * Removed unused references * adjusted injection code to keep trying if not able to find the needed entry point (rare) * Now displays designer properly * Now can detect output path (Improvable, current will not detect change without reopening designer) * Now detects when designer is closed * better namespace detection with fallback
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!
commit abd7edd6b04264048977a636db71e38593fd8169 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Nov 9 03:05:55 2015 +0300 Android support for skia commit 0870aad3d79b26222681a9ec3a0c4ef7f8dd605f Author: Nikita Tsukanov <keks9n@gmail.com> Date: Tue Nov 10 16:30:46 2015 +0300 Build Skia.Android on CI commit d6745e88c1d90d98c84425c025107a5fffda43a4 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Sun Nov 15 04:46:44 2015 +0300 Added iOS support for skia backend commit 043e1d5eaf0648d04f69348ea931c83d3d6ceebc Author: Nikita Tsukanov <keks9n@gmail.com> Date: Thu Nov 26 02:49:21 2015 +0300 Added nuget package for iOS
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.
commit 5be41985c32c1270b41aa531e8b2a96ddf6792cb Author: Steven Kirk <grokys@gmail.com> Date: Wed May 11 23:36:54 2016 +0200 Renamed Perspex -> Avalonia
0.4.0
Avalonia 0.4.0 was released in August 2016 - a year after Perspex 0.0.1-alpha.
commit e71e6714f0be6fae9136af4def747bce58af41a6 (tag: 0.4.0) Author: Steven Kirk <grokys@gmail.com> Date: Sat Aug 6 10:58:10 2016 +0200 Added link to VS extension
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! 🍻
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
commit c8df546e73f90951f5117f1eeb168a33b207652b Author: grokys <grokys@gmail.com> Date: Wed Dec 11 22:43:22 2013 +0100
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
commit c8df546e73f90951f5117f1eeb168a33b207652b Author: grokys <grokys@gmail.com> Date: Wed Dec 11 22:43:22 2013 +0100 Re-measure/render when window resized
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
commit 581a037cb8b87561003184012f1d48cf732f8fe9 Author: grokys <grokys@gmail.com> Date: Tue Feb 4 01:17:42 2014 +0100 Style council. commit ae79a51d727f4df07b5e83a03ddcca47478195ff Author: grokys <grokys@gmail.com> Date: Tue Feb 4 02:12:08 2014 +0100 Styley style. commit ac659701b8811c6d2e75e6bbb8c40b26a28669e7 Author: grokys <grokys@gmail.com> Date: Tue Feb 4 18:00:19 2014 +0100 Style away the hours. commit 63f674d897ba4e9b7f37ce9e6e1d99b86a05a9fc Author: grokys <grokys@gmail.com> Date: Tue Feb 4 18:15:18 2014 +0100 Gangnam Style commit 18bbb2c41e3bd03e57d55c57413b34fc43a9ac70 Author: Steven Kirk <grokys@gmail.com> Date: Wed Mar 12 23:17:39 2014 +0100 WIP Not sure where I am - went away for 2 weeks and forgot what I was doing. oops
By April I had a couple of very basic controls working (Button and CheckBox):
commit c1a09314456ebd7dbe604f9d8709d4a74277c27d Author: Steven Kirk <grokys@gmail.com> Date: Sun Apr 6 01:09:28 2014 +0200 Added (VERY!) basic 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:
commit 7167f26c93b2bffc30143d928523f9fe10478717 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:14:43 2014 +0100 Trying to create a cairo renderer. Not working. Nothing is drawn... commit 848f8e7b4bfff7c5bbd400ac73cdb3d4c842f750 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:38:17 2014 +0100 Now at least draws something. Need to implement a fair bit more before it makes sense though! commit b9609d3621fd64bb1fee69f83fc800feacc6a7a5 Author: Steven Kirk <steven.kirk@tricycleinc.com> Date: Sun Nov 30 22:56:36 2014 +0100 Make transforms work. Now draws something resembling the proper content
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é!
commit 5f1b9617bb5d5ae4f2426097ff5c4917de257037 Author: SuperJMN <superjmn@outlook.com> Date: Sun Nov 30 23:36:57 2014 +0100 Title property for Window
Soon after that, @keichinger came along to help with documentation (something we struggle with to this day!)
commit 7aec2d141cabecd5f590aee3660be324312de0f1 Author: Kai Eichinger <cH40z-Lord@outlook.com> Date: Thu Dec 11 15:48:45 2014 +0100 Added syntax highlighting to intro.md
And the same day, another outside contribution from @ncarrillo:
commit a6476cb7ec69f7a220de0bd33ed989ec3b906806 Author: Nelson Carrillo <ncarrillo@harbortouch.com> Date: Thu Dec 11 09:59:50 2014 -0500 - Added Ctrl+A to select all text in the TextBox - Made the TextBox lose its selection when focus is lost
@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:
commit fc3cc76bd60e897d4aaf1e66ffcdfce7517603b1 Author: José Manuel Nieto Sánchez <superjmn@outlook.com> Date: Mon Aug 24 02:20:37 2015 +0200 Added XAML feature
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:
commit ef7d86f04e7c634579756672efb76691fdc12185 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Aug 31 22:33:58 2015 +0300 Broken link https://github.com/grokys/Perspex/blob/master/Docs/architecture.md - 404 https://github.com/grokys/Perspex/blob/master/docs/architecture.md - OK
A week later he was already infuriated by StyleCop:
commit 7f72c7763b227a3225f470bc84a4935fc3175791 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Sep 7 23:03:00 2015 +0300 Implemented cursors. Ceterum censeo StyleCopum esse delendum
A few weeks later, along came @danwalmsley with his first fix for TextBox
:
commit 8309adf6dac298b5c78b754f064bfdeb40e47933 Author: Dan Walmsley <dan@walms.co.uk> Date: Fri Sep 25 00:35:11 2015 +0100 Implemented caret inverting background colour
Followed by some other familiar names who contributed greatly to the success of the project in those early years:
commit b13b870741aefe63f3f7c7c83ae50cd256209be4 Author: Wiesław Šoltés <wieslaw.soltes@gmail.com> Date: Wed Nov 4 00:48:03 2015 +0100 Added RelativeRectTypeConverter commit 74cea9595637c6351b2f633d3be782a7b7c681ec Author: Jeremy Koritzinsky <jkoritzinsky@live.com> Date: Mon Feb 22 18:48:11 2016 -0600 Can now bind to a non-IList/Array indexer (with any parameter type convertible via TypeUtilities)
Designer Support
Almost immediately after his first commit, @kekekeks started to work on implementing the designer (or, more accurately previewer):
commit abf60b5a5ce84c905c2e2d8106d7a88de11ce8f7 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Wed Sep 2 12:29:50 2015 +0300 Added EmbeddedWindowImpl for embedding and designer support commit eee5da30a0214869b2f99f7bcd29b0e0510084e8 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Thu Sep 3 00:12:12 2015 +0300 Designer: Initial out-of-process renderer implementation
And just a day later, along came @Seeker1437 to start adding that support to the Visual Studio Extension!
commit ecd6efe766324ecbb44d23b7d15837cf3001a14a Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Thu Sep 3 21:26:15 2015 -0400 Add Designer Support Part 1 commit fdcb454b27f95951ac5afa575df831f14aad4659 Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Fri Sep 4 07:47:46 2015 -0400 Small source code corrections commit 0d0e70312bb2829b08852276b0a9661d92ef7f18 Author: Darnell Williams <williams.darnell56@yahoo.com> Date: Sun Sep 6 02:59:50 2015 -0400 Add Designer Support Part 2 * Add build start/stop detection * Removed unused references * adjusted injection code to keep trying if not able to find the needed entry point (rare) * Now displays designer properly * Now can detect output path (Improvable, current will not detect change without reopening designer) * Now detects when designer is closed * better namespace detection with fallback
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!
commit abd7edd6b04264048977a636db71e38593fd8169 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Mon Nov 9 03:05:55 2015 +0300 Android support for skia commit 0870aad3d79b26222681a9ec3a0c4ef7f8dd605f Author: Nikita Tsukanov <keks9n@gmail.com> Date: Tue Nov 10 16:30:46 2015 +0300 Build Skia.Android on CI commit d6745e88c1d90d98c84425c025107a5fffda43a4 Author: Nikita Tsukanov <keks9n@gmail.com> Date: Sun Nov 15 04:46:44 2015 +0300 Added iOS support for skia backend commit 043e1d5eaf0648d04f69348ea931c83d3d6ceebc Author: Nikita Tsukanov <keks9n@gmail.com> Date: Thu Nov 26 02:49:21 2015 +0300 Added nuget package for iOS
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.
commit 5be41985c32c1270b41aa531e8b2a96ddf6792cb Author: Steven Kirk <grokys@gmail.com> Date: Wed May 11 23:36:54 2016 +0200 Renamed Perspex -> Avalonia
0.4.0
Avalonia 0.4.0 was released in August 2016 - a year after Perspex 0.0.1-alpha.
commit e71e6714f0be6fae9136af4def747bce58af41a6 (tag: 0.4.0) Author: Steven Kirk <grokys@gmail.com> Date: Sat Aug 6 10:58:10 2016 +0200 Added link to VS extension
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! 🍻