Scott Hanselman

What would a cross-platform .NET UI Framework look like? Exploring Avalonia

September 21, '17 Comments [39] Posted in Open Source | WPF
Sponsored By

Many years ago before WPF was the "Windows Presentation Foundation" and introduced XAML as a UI markup language for .NET, Windows, and more, there was a project codenamed "Avalon." Avalon was WPF's codename. XAML is everywhere now, and the XAML Standard is a vocabulary specification.

Avalonia is an open source project that clearly takes its inspiration from Avalon and has an unapologetic love for XAML. Steven Kirk (GitHubber by day) and a team of nearly 50 contributors are asking what would a cross-platform .NET UI Framework look like. WPF without the W, if you will.

Avalonia (formerly known as Perspex) is a multi-platform .NET UI framework. It can run on Windows, Linux, Mac OS X, iOS and Android.

YOU can try out the latest build of Avalonia available for download here:https://ci.appveyor.com/project/AvaloniaUI/Avalonia/branch/master/artifacts and probably get the "ControlCatalog.Desktop" zip file at the bottom. It includes a complete running sample app that will let you explore the available controls.

Avalonia is cross-platform XAML ZOMG

It's important note that while Avalonia may smell like WPF, it's not WPF. It's not cross-platform WPF - it's Avalonia. Make sense? Avalonia does styles differently than WPF, and actually has a lot of subtle but significant syntax improvements.

Avalonia is a multi-platform windowing toolkit - somewhat like WPF - that is intended to be multi- platform. It supports XAML, lookless controls and a flexible styling system, and runs on Windows using Direct2D and other operating systems using Gtk & Cairo.

It's in an alpha state but there's an active community excited about it and there's even a Visual Studio Extension (VSIX) to help you get File | New Project support and create an app fast. You can check out the source for the sample apps here https://github.com/AvaloniaUI/Avalonia/tree/master/samples.

Just in the last few weeks you can see commits as they explore what a Linux-based .NET Core UI app would look like.

You can get an idea of what can be done with a framework like this by taking a look at how someone forked the MSBuildStructuredLog utility and ported it to Avalonia - making it cross-platform - in just hours. You can see a video of the port in action on Twitter. There is also a cross-platform REST client you can use to call your HTTP Web APIs at https://github.com/x2bool/restofus written with Avalonia.

The project is active but also short on documentation. I'm SURE that they'd love to hear from you on Twitter or in the issues on GitHub. Perhaps you could start contributing to open source and help Avalonia out!

What do you think?


Sponsor: Get the latest JetBrains Rider preview for .NET Core 2.0 support, Value Tracking and Call Tracking, MSTest runner, new code inspections and refactorings, and the Parallel Stacks view in debugger.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb
Thursday, 21 September 2017 06:00:34 UTC
This is AWESOME. The way to go for UIs. UWP isn't cross-platform by now, Avalonia IS. I really love the project. My personal congratulations to Steven Kirk (@grokys) and the guys. They're doing a very good work. Keep it up!
José Manuel
Thursday, 21 September 2017 06:05:34 UTC
Some healthy competition for electron makes a lot of sense. Awesome thing!
Frank Quednau
Thursday, 21 September 2017 06:19:36 UTC
With a little tweaking, and custom building, you can even use it on Linux on the Raspberry!!
Matthijs ter Woord
Thursday, 21 September 2017 08:04:34 UTC
When will Microsoft support Windows Forms/WPF in .NET Core as an official cross-platform solution?
Thursday, 21 September 2017 08:40:27 UTC
@Hamed: I don't think that Windows Forms could (and probably should) be made a cross-platform solution. There is, well, too much Windows on it :-) The effort to port all these APIs and make it 100% compatible would not be worth it. WPF on the other side is probably more platform agnostic, but a HUGE project to migrate.
Raul
Thursday, 21 September 2017 09:08:37 UTC
Given MS has got Xamarin and is pushing that for cross platform (iOS/Android/Windows) then why aren't MS doing this?

Ultimately using OSS is a huge risk to a company making a product unless that OSS is massive, like jQuery for example. If you have a product that's going to last years then you need tech that will do the same.

Separation of concerns will make it easier to replace your UI but it doesn't make it zero effort. If you have a large product then if the UI OSS goes under or drops out of favour for the next big thing of the week then you are kind of screwed. It's costly to replace your UI whilst having to simultaneously implement more work. MS should take on the mantle of something like this and improve Xamarin.
Peter
Thursday, 21 September 2017 11:00:48 UTC
It would be even more awesome if it could output a web application
William
Thursday, 21 September 2017 11:34:10 UTC
Hurry up and make UWP cross platform Microsoft :)
Pete
Thursday, 21 September 2017 11:49:44 UTC
Don't know if others spotted it, but at .net conf this week Miguel announced that Xamarin.Forms would be usable from WPF. Not sure what that will look like yet as there don't seem to be any posts about it.

XAML standard will hopefully mean that most of the UI code can be shared and you can choose to use whichever 'runtime' you want like WPF, Avalonia etc. Think I've understood it anyway!
Mark Adamson
Thursday, 21 September 2017 11:51:29 UTC
Neat. Have you ever looked into https://github.com/picoe/Eto?
Thursday, 21 September 2017 14:47:02 UTC
This is cool, but doesn't xamarin.forms already do a lot of this? In 3.0 they are wanting to get it working on linux also.

I do like that XAML is being used as the basis for some other UI frameworks though that is awesome.
Jonathan Simon
Thursday, 21 September 2017 15:21:06 UTC
This seems pretty cool but what does it offer over Xamarin.Forms? Does it provide more controls? Just trying to understand what value it provides over XF.
Fred
Thursday, 21 September 2017 15:44:35 UTC
@Hamend: The answer is never. That is the whole point of the project introduced in the article. Did you even read it?
Oliver
Thursday, 21 September 2017 17:23:47 UTC
Thanks for the writeup, Scott! There are some questions that people often ask, so to try and preempt these, I'll answer a few of them here:

Q: Why don't you follow the WPF/UWP/Silverlight API? I have stuff I'd like to port but you're making it difficult!

A: When I started writing Avalonia, it was intended to be an OSS port of WPF (you can see how far I got here https://github.com/grokys/Avalonia) but after a while I just wasn't enjoying it - I wanted to improve things. Since this was all being done on my free time, it came down to a choice between giving up or working on something I enjoyed: I chose the latter.

At this point I never really expected that anyone would actually want to use this thing I was writing so I didn't give much thought to keeping compatibility. Since people have started noticing Avalonia and even using it to create applications, that has changed somewhat. Now we're trying to follow existing XAML frameworks where it makes sense, and modernise or steal take inspiration from other frameworks where we think they've got some good ideas.

Q: Why don't you use native controls? Templated controls suck! They'll never look right on all platforms.

A: A very valid concern! If you want native controls take a look at https://github.com/picoe/Eto. @cwensley is doing amazing work there, and we're even using his Portable.Xaml as our XAML engine.
Steven Kirk
Thursday, 21 September 2017 17:41:28 UTC
Oh yeah, also: yes our docs are terrible - please help! :)
Steven Kirk
Thursday, 21 September 2017 18:30:48 UTC
This looks really interesting awesome. Looks first link to Avalonia is broken.
Frank
Thursday, 21 September 2017 19:20:15 UTC
This comment is the BEST EVER and is music to all XAML dens like myself lool:

"... Some folks really like desktop apps written in JavaScript, but the REST OF US are sane people :)"

Yeb, UI frameworks like these are for us sane people lool
Mohamoud
Thursday, 21 September 2017 19:21:47 UTC
sorry for the typos: Devs* not "dens".
Mohamoud
Thursday, 21 September 2017 21:05:43 UTC
This is a cool project and I'm glad the community is working on something like this.

That being said, this seems like the logical place for Microsoft to take Xamarin Forms (and make it an official upgrade path for WPF).

Though no one at Microsoft is willing to discuss this or even admit the need for an upgrade path for .NET Framework applications. All we hear from Microsoft is the absurd claim that .NET Framework and .NET Core will both continue to be developed concurrently ad infinitum , which is obviously nonsense.
Sam
Friday, 22 September 2017 06:23:58 UTC
This is great! Anything but UWP.
David Rogers
Saturday, 23 September 2017 00:28:11 UTC
In my opinion, Avalonia is in desperate need of a community forum. The documentation is admittedly not in the best shape, and it's not even obvious that you can't do much development with it on linux. I tried to do a few things in the hope that if I just ignored the windows-only information, it would just work somehow - but it didn't :(.

One reason I didn't get anywhere is that I'm an experienced .NET developer who is running away from Windows as fast as I can. I have no chops at all on linux, so I'm still very lost. In short, I need help. If I could get some for Avalonia, I could potentially give a lot back to the project. My home machines are all linux now, and that's the way it's going to stay. It's develop on linux with netcore, or not at all.

I think the project is mainly unaware of the demand for a working solution to this problem. Most of the devs I know are toying with netcore on linux, and when a real solution becomes available, I believe we will see an explosion of .net apps on linux. But, we are only close. It's not there yet, and without a common place to share and discuss issues, anyone like me will be forced to remain on the sidelines.

Please, Avalonia, set up a forum. Heck, I'd donate a year of hosting if you do :). I believe the reward would be cementing Avalonia's place as the go to interface toolkit for netcore, destined to become as popular or more popular than WinForms or WPF.
MisterAcoustic
Saturday, 23 September 2017 12:23:19 UTC
It would be great to see a PoC, using Core for service and Avalonia for client.
Zafer Balkan
Saturday, 23 September 2017 15:21:41 UTC
Hurry up and make UWP cross platform Microsoft :)
https://janaganamana52sec.blogspot.com/
Mantra
Sunday, 24 September 2017 00:09:42 UTC
@MisterAcoustic

The problem with Linux is that it doesn't have any real IDE for .NET anymore. MonoDevelop doesn't have proper .NET Core support and their distribution model with flatpak is completely broken. And that was the only IDE where we could potentially get our current XAML previewer working.

I'm planning to create a plugin for Rider, but it will require quite a bit of work.

Another issue is .NET Core SDK being unable to properly build projects targeting full .NET, anything that has net461 in TargetFramework(s) is broken. Same for goes for OSX, but VS4Mac at least has .NET Core debugging support.

But community forum is a good idea, we might figure out something about that. For now you can use StackOverflow with avaloniaui tag
Nikita Tsukanov
Sunday, 24 September 2017 18:02:38 UTC
you just can't stand the fact that WPF is thriving in spite of the year of effort by you and your associates, build 2011 was 6 years and 2 weeks ago, what have you got to show for all these years ?
there predictions, the proclamations, pomp the pompous, remember the WPF funeral ? remember JS/Metro, the Store ? and now the Core, your coming up on three years and

https://w3techs.com/technologies/details/pl-aspnet/all/all

looks to me like you've got 0.1% marketshare, remember your ASP .net 5 is DEAD, what are you going to say when they have no choice but release full framework 5.0 ?

and now one your people actually having the nerve to suggest UWP/.Net core would be golden light!
does it even occur to you that Silverlight is more powerful than anything you've created since?

and you have the gall to proclaim this cool but tiny framework is an improvement on WPF?

you and most the current DEV Div's acumen is appalling, you are not a WPF DEV never have been
your track record of self promotion may have landed you a reasonable paying job @MSFT, I've seen people suggest an effort to inform the board of directors about this 6 year plus war with WPF and the real developer that make the world go round, your a net negative for the human race, your dabblers and bloggers, end the charade, your an embarrassment to our profession, and outside of the ever dwindling fanzy dabblers , you are held in lower and lower regard by the vast majority and an outright joke by many others myself included, it's one thing to promote your work , it's a completely different matter to undermine other people in order promote yourself, WPF is 10, UWP/Metro is 6, yet ones ancient Legacy Desktop and the other is cutting edge, please, we are talking about a 10 year old that been accepted to MIT vs a 6 year old that sh!ts the bed and has to keep at least one hand on his genitals, have you ever tried taking windows 10 out into the deep water and make it use virtual memory ? you can turn it into a zombie with 5 lines of code in any language and it doesn't come back, keep thing you guy would fix something so simple, yet I test again and now, I'm putting together a new Kabylake machine that I have no choice but Windows 7 for actual real technical reasons and find and artificial barrier created by you guys and you got the unmitigated gal to claim it's for technical reasons. we may end up all going the way of MisterAcoustic, the bottom line is war on we need to at least make an effort to run you turd off first, I see now why Soma left, that guy had balls,brains and class




Monday, 25 September 2017 22:24:27 UTC
I love the idea of having a cross-platform UI framework and I would love Microsoft to be the driving force behind a big effort like that. It's really the missing piece in the .NET Core story!
Tuesday, 26 September 2017 14:05:10 UTC
Mobdro is the one of the best online chatting application Bigo Live pc
bestonline chatting app Download mobdro Best online Movie Player Download Mx player good post
Tuesday, 26 September 2017 20:18:32 UTC
@WPFDev haha your rant is pretty funny, although I'm not sure why you're anti this. As a skilled WPF dev you could probably learn Avalonia pretty quickly and then you'd be able to build cross-platform apps.

Me, I only build web stuff these days so I couldn't care less about another XML-based UI framework, so this is not for me.

Matt
Wednesday, 27 September 2017 11:52:58 UTC
@Matt I like Avalonia , I also think NoesisGUI show promise, there are a bunch of XAML based projects out there and I fully support them all wtih one exception that being UWP and the dumber than dumb standard XAML, the have the nerve to call it stanard, but no WPF support, you may not be aware but there has been an anti-WPF clown squad at MS since the buttplug S Sinofsky days with RT/Metro.
what set me of is Mr hello world daddler who know jack squat about WPF proclaim that Avalonia is an has many improvements over WPF when he doesn't have a clue what he is talking about, doesn't really matter at this point UWP and .net core are in the death throws, thanks for noticing that it was meant to be humorous, all you can do is laugh at the ridiculous state of Dev Div these days, that are laughing stock of the industry, and yet still cocky as hell
Thursday, 28 September 2017 14:33:35 UTC
Regarding MS, I'm a bit confused. Shouldn't XAML Standard equate to this? Isn't it time Xamarin could output as WPF (I'll refrain from saying UWP) and actually, that the Xamarin name itself was either dropped unless it actually did this?

Regarding Avalonia, does it embrace HTML at all?

rod mac
Thursday, 28 September 2017 14:34:55 UTC
*delete 'either'
rod mac
Thursday, 28 September 2017 14:37:54 UTC
One more thing regarding Avalonia: instead of using markup, which I'd argue was inefficient with all those opening and closing brackets, can everything be done with C#?
rod mac
Thursday, 28 September 2017 14:39:03 UTC
...oh and could it reach out to WebAssembly?
rod mac
Thursday, 28 September 2017 15:36:44 UTC
Microsoft is actually going to add WPF, MacOS, Linux, and Tizen support for Xamarin.Forms 3.0. So your cross-platform .NET GUI framework is almost here.
Bob Reed
Friday, 29 September 2017 08:53:41 UTC
To be honest, i don't like the UI style at all... especially the spacing control. look at the space between "Transition" dropdown and the picture. And the title "Carousel" spacing, makes me not comfortable.
Sunday, 01 October 2017 09:35:36 UTC
Cross platform is the best to develop application for all the OS. This is one of the best article.
HP laptop price in India
Thanks
Jacowski
Monday, 02 October 2017 17:11:12 UTC
This looks really interesting awesome. mdu
James
Tuesday, 03 October 2017 12:37:19 UTC
@rod mac

Avalonia still has a way of defining styles, bindings and control templates from C# code. For example, that's how our default control theme had looked two years ago:

https://github.com/AvaloniaUI/Avalonia/tree/8df047400f26640802d3e8bda6b81ea0030ec195/src/Perspex.Themes.Default

and that's how UI was defined:

https://github.com/AvaloniaUI/Avalonia/blob/8df047400f26640802d3e8bda6b81ea0030ec195/samples/TestApplication/Program.cs#L79


WebAssembly is doable, but we need to wait for support from Mono or corert.
Nikita Tsukanov
Thursday, 05 October 2017 18:24:28 UTC
@Nikita Tsukanov

Thanks for the update. Avalonia sounds a compelling UI framework.
rod mac
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.