NHacker Next
  • new
  • past
  • show
  • ask
  • show
  • jobs
  • submit
Uno: Create Beautiful Cross Platform .NET Apps Faster (platform.uno)
brushfoot 5 days ago [-]
Some questions that aren't in the FAQ:

- What is the license? Apparently Apache 2.0 [1].

- What is the minimum web bundle size and startup time?

- On desktop, what is the minimum RAM usage? Binary size?

- Is there a WYSIWYG editor?

[1] https://github.com/unoplatform/uno/blob/master/License.md

francoistanguay 5 days ago [-]
- Yes, Apache 2.0 - Web is meant for WebApps, not websites. Including Uno+DotNet runtime it's about 4mb compressed. - No WYSIWG editor, yet, but Hot Reload works really well.
irq-1 5 days ago [-]
Is the website wrong? The repository for the toolkit is MIT, but the website says free for under $1million...

https://github.com/unoplatform/uno.toolkit.ui/blob/main/LICE...

https://platform.uno/uno-toolkit/

DEV FRIENDLY LICENSING

Uno Toolkit License

Uno Toolkit is available for free for individual developers and businesses with revenue of less than USD 1,000,000. If your revenue exceeds this threshold, please reach out to us to obtain a license for Uno Toolkit and access the complete suite of development accelerators.

cfn 5 days ago [-]
One thing I don't understand about Uno is how do they make money. Everything looks very well done and I have been following them for a few years but I don't see how they will survive without selling anything.
francoistanguay 5 days ago [-]
Sustainability explained here: https://platform.uno/blog/sustaining-the-open-source-uno-pla...

We're also building products of Uno with licensing, first one being the Figma plugin for Design-To-Code: https://platform.uno/unofigma/

mrbungie 5 days ago [-]
They offer paid support plans. That actually may explain why everything looks so polished.

https://platform.uno/support/

cameronh90 5 days ago [-]
Any company that is giving away open source software for free seems to eventually go down the route of open core or restricting commercial use of their open source product.

Uno seem to be starting to go down the enterprise support route - plus open core with their recent Figma plugin release. At least the Figma plugin is very tangential to the core product so it's hard to imagine it competing for features at this stage.

Though with the recent spate of open source company rug-pulls, and I'd struggle to justify using it. It seems like open source is increasingly just being used to build market share, then the VC/PEs come in, make a "contact us" enterprise pricing page, and suddenly issues and PRs start getting rejected because they compete with the paid add-ons.

I really hope the same won't happen with Uno, because it looks like a great library, and something that's missing from the dotnet world. Their sustainability blog post gives me hope, but... sadly it would not be the first time that founders with good intentions find out that running an open source company is nearly impossible, end up taking funding to keep up, then the rest is history.

francoistanguay 5 days ago [-]
Uno founder here.

Uno as a UI framework is and will remain FOSS. It's been our strategy from day one and core to how we operate.

We see real opportunities to build productivity-focused products on top of it that will bring licensing revenues. Our Figma Design-Code plugin is a proof point and we have a lot more to come.

Thank you for caring and for the insights.

belthesar 5 days ago [-]
I appreciate your statement here, but I think part of the reason the GP commented on this is that we hear this from companies all the time. We all recognize that you're speaking the truth of today, but things change. This may be important to you, but unless Uno is your lifestyle business and you maintain control despite external pressures from board members brought on as capital sources, you're not capable of providing a guarantee in perpetuity, let alone for any well defined metric of time.

It's fair for us to be gunshy. There's simply too many examples of OSS projects highly used across the web that made these kind of promises earlier on in the product's lifecycle, many if not most of them with the best of intentions at the time the promise was made. I trust that what you're saying is true today. Until we start to see more OSS projects with sustainability models that are both successful at staving off negative influence from funding partners, and those sustainability models leading to companies making good on the declarations of altruism they made when they were younger, I think we're going to remain unsure and unconfident in promises like this.

Don't think it's going to stop us from checking out your product or potentially building really cool stuff with it. But until you prove to us that you'll keep this ethos, we will start using this really cool framework with one hand while we keep another hand free to stabilize ourselves in what feels like an inevitable rugpull that isn't a matter of if, but when.

CrimsonCape 5 days ago [-]
I wonder if your point of view, which I describe as "open source absolutist/optimist", has any facts to prove that your point of view is actually a thing that exists, or is fantasy...no offense. Maybe even the biggest open source projects are currently on "borrowed time"?

I'm sorry I wrote this as I didn't actually review the project and see if the source code is available. It appears to be closed source. Your concerns are definitely valid.

My comment was more directed to open source, and I would say to you that the only in-perpetuity guarantee is to fork it.

ImHereToVote 5 days ago [-]
Looks awesome. How easy is it to use other libraries together with Uno? Say OpenGL for iOS and Android. Any examples? Looks very interesting.
francoistanguay 5 days ago [-]
You can embed any native component per platform.

We're actively working on bringing an unified OpenGL control in our Toolkit so it works on all platforms and be ready-to-use. Stay tuned!

userbinator 5 days ago [-]
It's .NET, mentions Windows and native, yet none of the screenshots look anything like native Windows controls.
humzashahid98 5 days ago [-]
Uno wants applications to look the same across platforms (as Flutter does) but still wants to use native controls. So their approach[0] is to have default styling applied to every control which makes the native controls look the same on each device [0].

I think the main benefit with this approach is expected-behaviour (like how different desktop operating systems have different textbox behaviour), and that whatever accessibility you get by default with native controls is there. [1]

I don't really find their approach to GUI development compelling though, with them choosing a middle ground between "wrapper around native controls" and "implement everything yourself".

[0] Except on Linux and web, where Uno draws everything itself, imitating controls that look like GTK (on Linux) or UWP/WinUI (on web). These are the platforms I briefly tested on and I didn't have an enjoyable experience with the output due to non-native/non-expected behaviours.

[1] Page on accessibility: https://platform.uno/docs/articles/features/working-with-acc...

jlaban-uno 5 days ago [-]
Uno Maintainer here - Thanks for trying out Uno! At this time, the default render mode is provide a uniform look across platforms, and it's possible to alter the theme using Material, Fluent or Cupertino, or to design your own theme using control template styling, or even use native controls directly where applicable.

On Linux, we've just released our support for X11, removing the need for GTK. As we're drawing the whole app surface, we're always interested in adjust the UX of our controls on individual platforms. If you have examples, let us know.

Finally, for WebAssembly, our current rendering backend is using the HTML DOM, which means that accessibility and other native behaviors are functional. Same here, if anything accessibility related is missing, we're all ears!

humzashahid98 5 days ago [-]
Hi there. Appreciate the response!

I didn't know that the HTML DOM is being used for Uno's web output but that's good to hear. I was under the impression that things were being drawn to canvas (like how Flutter's web output works) but functionality like Ctrl-F (text search) works on https://gallery.platform.uno/, showing that's not the case.

I'm not sure why I had the impression that the web output used HTML canvas, but maybe that was something that changed since I last looked a few years ago or there might be another reason I was mistaken.

I think one misleading thing that gives the wrong impression is that text isn't selectable on Uno's web output (like https://gallery.platform.uno/), similar to how text isn't selectable on HTML canvas.

I think it's worth having a discussion about that with other employees, because it's one divergence from user expectations about how the web usually works (but application developers may also prefer to make text not selectable so it may be the behaviour you want in some cases after all).

jlaban-uno 5 days ago [-]
Indeed, text selection is a specific behavior that was chosen to be disabled by default in order to be closer to the original behavior of WinUI on desktop. This is a configurable behavior on the TextBlock control, though.
pjc50 5 days ago [-]
That's the choice people face: "native" (different on all platforms) vs "synthetic" (looks the same but loses true native functionality).
sasakrsmanovic2 5 days ago [-]
Correct - and with Uno you get to chose either one of those approaches - https://platform.uno/pixel-perfect/
pjmlp 5 days ago [-]
Uno is based on UWP, on Windows it uses the native UWP stack.
jlaban-uno 5 days ago [-]
Uno Platform maintainer here - Uno is compatible with both WinAppSDK/WinUI and UWP API sets. Our default project templates have been on WinUI for two years now, UWP mainly being supported for temporary upgrade scenarios to WinUI.
sasakrsmanovic2 5 days ago [-]
Nope it is not.
neonsunset 5 days ago [-]
[flagged]
pjmlp 5 days ago [-]
[flagged]
neonsunset 5 days ago [-]
Uno is a third-party open-source project. It is not related to UWP beyond the fact of being a .NET GUI framework.

It's like complaining that a particular Yamaha bike is bad because a Yamaha digital piano of particular model is bad.

Do take pills before posting, thanks.

pjmlp 5 days ago [-]
[flagged]
alkonaut 5 days ago [-]
I don’t think native here refers to the control styling being similar to Win32 on Windows.
jeremycarter 5 days ago [-]
I could be wrong, but it might be able to host native components or draw your own.
francoistanguay 5 days ago [-]
Indeed, an Uno app is a native app, it uses UIKit on iOS, Views on Android, HTML on Web, except on Linux where you only have access to our Skia renderer.

Therefore you can embed native controls.

KacharKhan 5 days ago [-]
"on Linux where you only have access to our Skia renderer" ... means what? Can I make a basic GUI app on Linux with Uno. If yes how ?
francoistanguay 5 days ago [-]
Yes, on Linux it behaves similar to Flutter and draws directly to a Skia Canvas.

It used to have a dependency on GTK but no more since the 5.2 release.

There's just no notion of "native controls" that you can embed in an Uno Linux app like you could have if you wanted to embed a 3rd party native UIKit control on iOS.

rkagerer 5 days ago [-]
Is there a "gallery" where I can try out one or two apps developed using this, on different platforms?
jlaban-uno 5 days ago [-]
Uno Platform maintainer here - We're maintaining production apps ourselves, like NuGet Package Explorer [1], or Uno Calculator [2], and many third-party apps are in production, with some shown in case studies [3]. You can also find some other tech Wasm demos [4] on our repo.

1: https://nuget.info

2: https://calculator.platform.uno

3: https://platform.uno/case-studies

4: https://github.com/unoplatform/uno#live-webassembly-apps

javajosh 5 days ago [-]
I just learned about this thing today, so take this with a grain of salt: there are links out to two apps, Simple Calc and Tube Player, at the bottom of the home page. These are tutorials and source code, not a finished product. There is also a "gallery" on the top right, and you can play with the UI components rendered in the web: https://gallery.platform.uno/.
arunc 5 days ago [-]
Uno has been around for over 4 years. Wondering why this hasn't picked up so far, albeit being a very flexible platform/framework.
ejiblabahaba 5 days ago [-]
Presumably because, much like the half-dozen other flexible cross-platform frameworks Microsoft and friends have gotten one-third of the way to a viable product before abandoning to chase the next shiny thing, it's riddled with bugs, about ten years behind the documentation of a more usable framework from the 2010s, and has basically zero third party support from the likes of Infragistics and SyncFusion.

UWP left behind a shockingly large number of perfectly serviceable pieces of WPF, at a time when the emergent UI experience on Windows 8 was being written off by almost everyone, Windows Phone was DoA, and people were starting to realize they could just write web pages and run GUIs in the browser instead. It's been a long, bumpy, downhill ride ever since. The fact that Electron.NET and Blazor is a serious UI suggestion from Microsoft these days should tell you everything you need to know.

I'm sure with enough effort it's usable and maybe even nice in some ways. I did some proof-of-concept work with it two years ago and got maybe 50% of the way to where I wanted to be in 8 hours, but got stuck at styling issues for which there was limited documentation. In the end, I'm more confident these days in WPF + Avalonia if I really need cross-platform - even if there's comparable bugs and limited documentation, there's at least some momentum still behind the project. UWP, all three busted half-finished versions of WinUI, MAUI, Blazor + Webview2, Blazor + Electron.NET... even Avalonia, thanks to the weird decision to change styles to behave more like CSS... it all still struggles to be as usable as WPF.

dtquad 5 days ago [-]
Why do people always complain about the lack of mature cross platform desktop GUI development options for .Net? Most other programming languages and ecosystems don't even have viable options for desktop GUI development. When was the last time a new version of Elixir, Ruby, Go or Rust was released and top comment was complaining about the state of desktop GUI development options?

The whole industry is unfortunately moving towards web interfaces being the default. That is unfortunate but it is an industry wide trend.

vunderba 5 days ago [-]
Elixir, Ruby, Go?? Maybe because the C/C++ and JavaScript/Typescript user bases are about 10000 times larger and we have relatively robust cross platform UI solutions for both in the forms of QT and Electron. C# is a weird outlier for having a very large user base but very few decent cross-platform GUI support.
miki123211 5 days ago [-]
Python's user base is pretty large, it's the most popular programming language by some metrics, and yet the situation there still sucks.

You can use tkinter, which doesn't work well with native platform features and forces you to rewrite your app from scratch in something else when you finally need to do accessibility. QT is free for noncommercial use only. WX kinda sorta works, but WX apps on Mac feel like they were on Windows, and the naming conventions are extremely unpythonic. Toga looks like a nice option, but it's still pretty young, I'm not sure how far I'd trust it.

michaelsbradley 5 days ago [-]
> QT is free for noncommercial use only.

How so? It’s LGPL.

actionfromafar 5 days ago [-]
LGPL is very problematic when distributing for things like iOS, what with the user re-linking requirements. On Windows, Mac and Linux it can be quite easy to solve.
aryonoco 5 days ago [-]
There are, and have never been any issues distributing LGPL applications on iOS. You might be confusing it with AGPL?
actionfromafar 5 days ago [-]
No
Kwpolska 5 days ago [-]
C#'s user base was historically tied to Windows, and there are many C# GUI frameworks for Windows.
orphea 5 days ago [-]
I, being a .NET developer since v1.1, won't touch most of them.

WPF, a framework from 2006, and Avalonia, a 3rd party framework, are the only two worth considering.

memsom 5 days ago [-]
Six months ago I would have argued with you, but currently doing a MAUI transition from a Xamarin Forms app, and you are very right.

I wish Avalonia UI's mobile solution had had Navigation sorted a year ago when I proposed that we needed to do something with the XF EOL announcement. I had a POC with it working well enough, but sadly it was "too much work" to migrate the rest of the app. Now with MAUI we have realised that we are probably doing just as much work anyway, and it is seriously half baked as an ecosystem.

irq-1 5 days ago [-]
Thank you for this comment. Trying to sort through the mess of GUI frameworks for .NET and other languages is difficult.
TheCleric 5 days ago [-]
Exactly this. Anecdata, but the vast majority of the C# developers I know not only don't use anything but Windows, they are actively HOSTILE to non-Windows systems. Many of them view non-Windows systems as either toys ("MacOS is for graphic designers") or too spartan to be worth their time ("Linux is for sys admins").

As well with the rise of new tech/stacks that has displaced C# in a few places, the people who stay in C# tend to bristle at other OSes as that's what the people who are using the other techs use (and us vs. them type attitude).

So in the grand scheme of things, it's unsurprising that this happens.

aryonoco 5 days ago [-]
I think this is an outdated view. I run a dev shop which develops applications in . Net + Angular. We have always given devs freedom to buy whatever laptop they want and put whatever OS they want on it, as long as they can work with everyone else. 5 or 6 years ago, we had 1 person using Ubuntu, another person using Mac, and everyone else used windows. Right now, roughly 40% are on windows, 30% develop on Mac and 30% develop on Linux (Linux has recent grown at the expense of Mac actually).

Our production environment where all applications are run is based on Debian (though we test on Windows Server as well) in a kubernetes cluster, running in Azure.

C# is decent language for writing line of business application logic, and these days .Net is a completely cross platform, open source framework.

I remember using a bunch of C#/Mono applications (F Spot, Banshee, etc, they were all the rage once) on my Linux desktop over 20 years ago.

neonsunset 5 days ago [-]
I've worked with a team that used Rider + macOS combo in the past and have friends who had a similar experience. There are those who choose to use Neovim + csharp-ls instead, or any other combination besides the historical Windows + Visual Studio.

Keep in mind that .NET has "inherited" a huge ecosystem and developer community that existed and still exists within the confines of .NET Framework. It roughly splits into two groups - the one that is moving or has moved on to .NET and left the legacy in the past and the one that harms the ecosystem by refusing to do so. Luckily, the former is in the minority compared to the latter especially as the time goes by.

It is also helped by new generations of developers who came into working with the tech after .NET Core and .NET became the mainstay or developers who moved on to .NET from other languages and ecosystems.

alternatex 5 days ago [-]
You're correct about that sentiment from .NET developers historically but things have changed. At Skype, a company that's been under MS for a decade, more than half the devs use Macs.
brungarc 5 days ago [-]
C# is still my favorite language and I haven't used Windows since 2017. JetBrains Rider is my IDE of choice on a Mac. It was pretty rough during the early releases of it, but for years now it's working well enough. Also .NET Core 1.0, 1.1 and 2.0 was a ride. project.json anyone?

Fastforward to .NET 5, 6, 7, 8.. it's just doing great x-plat life and innovation

TheCleric 5 days ago [-]
I'm sure that is true. I just know the C# developers I work with now and recently fall into the camp I mention.
kcartlidge 5 days ago [-]
Maybe we have different circles.

I'm one amongst many using Net on other systems (Mac & Linux) as well as Windows. Larger enterprises which use VS on Windows often deploy the results onto Linux servers too (especially with microservices), which is hardly being hostile.

Though to address the issue of GUIs in Net-land, I've given up as nothing since WinForms (and possibly WPF) has lasted. They are 'supported' in many cases, but it always feels half-hearted or half-dead.

DeathArrow 5 days ago [-]
> C# is a weird outlier for having a very large user base but very few decent cross-platform GUI support.

MAUI is pretty decent.

zerkten 5 days ago [-]
That's not what people say when the daily poster in r/dotnet asks what framework they should use for a GUI app.
datavirtue 5 days ago [-]
MAUI is not ready. I started a Greenfield project this year. Having tried a serious project in Xamarin Forms, I reached for WPF. The app is almost ready and the speed at which I was able to get stuff working (and beautifully so) has resulted in our company being able to win new business. WPF has no limits. It just works. Tons of community support.

My hope is that MAUI gets to WPF level soon. Refactoring away from WPF to MAUI should be almost trivial, if desired.

memsom 4 days ago [-]
Okay - this is not going to happen. WPF lets you do really complicated binding tricks that XF was just not capable of. Maui is just an evolution of XF, but so far I think iit is a step back from what we had before. We have some stuff working, but it was painful to make it work and some of the WPF tricks we used in XF with binding are broken in Maui so far. I'm sure we will fix most of them, but it feels like we will just refactor a lot of it away to simple properties rather than complicated multitrigger bindings. I echo "Maui is not ready".
ok123456 5 days ago [-]
Microsoft had remarkable native frameworks that they just decided to ditch. Many Forms and WPF applications still work and run entire businesses, but because of Microsoft's unnecessary churn, they are stuck with the legacy .Net Framework.

Yes. Many FOSS ecosystems don't even have adequate GUIs, but they never had them. Microsoft had them but then lost them. Every "modern" replacement requires you to import a whole browser in some form or another with all the baggage that comes with it, both in terms of development, runtime and security.

ClickedUp 5 days ago [-]
> they are stuck with the legacy .Net Framework.

I develop WinForms applications at work and we use .NET Framework by choice, to aim for long-term stability and not the 'new thing'. We are not stuck we're loose. It's important to understand that MS Windows will never be able to get rid of the ability to run .NET Framework apps. Also, even though the new .NET supports WinForms, it's not a 1 : 1 port yet and we've done extensive testing on this. Not using .NET Framework would mean degrading the performance of the app (~30%). Try it out for yourself with a controls heavy application. I'm talking 100+ controls on a single app with real-time data fed through it. We use 3rd-party WinForms controls that's been in development for over 15 years. The GUI is modern and the performance excellent.

Words like 'legacy', in our case, means better stability and higher performance, and frankly, we neither trust nor care about Microsoft's opinion.

That said, I can understand that the new .NET is useful and an upgrade for those who wants cross-platform support among other things.

ok123456 5 days ago [-]
If you were to fire up your IDE and start a new greenfield C# project, would .Net Framework be your first choice?
ClickedUp 5 days ago [-]
Absolutely. Main reasons being 1) that we don't need any of the new features modern .NET can offer and 2) we specialize in mission critical, high performance apps

For example, recently a customer wanted a security solution, a filesystem journaling application, powered by a low-level FS kernel driver (C/C++) together with a managed .NET assembly to interop with our unmanaged driver DLL. Running on the highest altitude - on top of the driver stack - means handling, filtering, and intercepting a huge amount of filesystem requests before it reaches other system components. Therefore, performance is key.

In that scenario, using modern .NET we experienced nonstop deadlocks which froze the whole system. .NET Framework had no issues keeping up.

I can also think of other examples e.g. issues working with custom virtual filesystems.

So yes, NET Framework would be my first choice for standard Windows-only desktop applications.

neonsunset 4 days ago [-]
In what scenarios can you make .NET Framework perform faster than .NET 8? The expected performance difference is 2 to 10x in favor of the latter. It’s not even a choice. If you can reproduce the issue, please consider submitting it to dotnet/runtime rather than choosing obsolete target.
ClickedUp 4 days ago [-]
I already gave two examples 1) large-scale WinForms app with third-party controls and libraries and 2) Interop with FS kernel driver under heavy load

We were told to benchmark the performance on several computers using different hardware. In example 1 we calculated ~30% worse performance (worst case scenario!). In example 2 we had micro stuttering and system wide freeze (requiring reboot).

Again, in example 2, are we supposed to accept our customer computer freezing under load? In a high security, sensitive environment? You must be joking! Instead we delivered a solid product which do not freeze the system and we got great feedback. What's considered 'obsolete' is irrelevant to us. The word means nothing. Our benchmarks are of the highest importance.

Let me try again on monday though, I can reproduce the results then. Your claim piqued my curiosity, but I think you underestimate the specific requirements in which we work. Perhaps they've fixed something since last time we tried. I'm certainly willing to try again.

exceptione 4 days ago [-]
Would be interesting to learn more. It seems like you know your stuff well, but could it be that your ported code doesn't do things like it should be done in modern .net?

Like using the apis that fully utilize spans. Also, I have the feeling (but nothing tangible) that old .net and .net core do behave differently wrt async stuff too.

ClickedUp 4 days ago [-]
> could it be that your ported code doesn't do things like it should be done in modern .net?

I'm actually curious myself after this discussion. I didn't port it, my coworker did it and I'd have to ask him. I did take part in the benchmark though and watched all the deadlocks happening.

Found this old screenshot of our internal FS driver debugging tool - to give you an idea of what I mean by needing high performance: https://postimg.cc/mc6YQFbC

24,654 filesystem events in C:\Windows\ in just 1 minute and 30 seconds on idle. 814 read operations (36,7MB) + 948 write operations (66,9MB). Now imagine this system-wide (not just the Windows dir) under heavier load. This is where modern .NET could not keep up leading to the aforementioned deadlocks.

Sorry that I can't provide more specific info at this time. I can find out more on Monday.

exceptione 4 days ago [-]
Interesting, that is a good load test indeed. If it turns out to be a regression in .net core, it would certainly make sense to file a bug on github.
neonsunset 4 days ago [-]
If there is an issue, chances are it's in the for-new-.NET implementation of WinForms. Any regressions in the GC or CoreLib themselves are definitely not expected and can be submitted as issues to be fixed.

There can be latency differences in edge cases of interaction between threadpool used by specific version and Overlapped IO on Windows, but that's likely about all there can be.

It's important to note that .NET Core 3.1 -> .NET 5 -> 6 -> 7 -> 8 is a huge difference in compiler and corelib internals (less so in GC, with major steps in 6, 7 and 8 in regards to regions and now DATAS), so an issue that could have existed in one of the previous versions is likely to be fixed by now.

neonsunset 5 days ago [-]
That would be an exceedingly poor choice. Libraries have even started to drop NS2.0 target as it is too limiting or requires if-defs and extra maintenance effort for obsolete targets.
alternatex 5 days ago [-]
Both Win Forms and WPF work with .NET 6+ though.
ok123456 5 days ago [-]
Lots of asterixes and special cases. It's not just a drop-in replacement.
ejiblabahaba 5 days ago [-]
If Microsoft said "Windows-only, good luck with cross platform," I'd accept it and move on. It's their prerogative to spend their resources enhancing their own platform.

Instead, I've been told a half-dozen times that there's a new cross-platfotm GUI option, and had I bought into any such endeavor, I would have been rugpulled by sudden deprecation or loss of focus. I think people who did buy into any cross-platfotm GUI frameworks from Microsoft in the last ten years are justifiably feeling like they've been hung out to dry, sometimes multiple times.

I don't complain about Elixir, Ruby, Go, or Rust GUI development because I don't try to use these languages for GUI development, because their core leadership and marketing doesn't promote this as one of the primary use cases. C#, and the .NET ecosystem at large, are THE premier Windows GUI development tools. When their marketing pivots to cross-platform GUI development, and they rugpull you a half-dozen times in a decade with half-finished and baffling experiments, it kinda smarts.

Most people developing desktop apps are probably okay with switching to web-based options, including potentially running their own standalone rendering executable on top of a web view or chromium instance. But there's a significant minority that are building desktop apps because they want better performance and native visual integration/theming, who don't benefit from browser process isolation and the hairy JS event loop situation, who don't want to serialize every user action in the GUI, who saw what XAML set out to accomplish (GUI style templates that convert to framework code that could equally be hand-written, modified, or extended) and ran marathons with it. Maybe this will get better with WASM improvements in the next few years, but it doesn't change that the approach to GUI design is fundamentally different, and in a lot of ways needlessly harder, when you have to pretend your GUI isn't all running on the same machine.

wiseowise 5 days ago [-]
> When was the last time a new version of Elixir, Ruby, Go or Rust was released and top comment was complaining about the state of desktop GUI development options?

Because no one in their right mind would write anything GUI related in those languages.

Nuzzerino 5 days ago [-]
That doesn’t really answer the question though.
pjc50 5 days ago [-]
.. because there isn't a framework!
wiseowise 5 days ago [-]
…and they’re okay with it, because historically GUIs are written in platform native languages.
airtonix 5 days ago [-]
[dead]
ozim 5 days ago [-]
There are also people complaining that Electron is slow and bloated - but in reality there is no alternative for open cross platform GUI.
mike_hearn 5 days ago [-]
Sure there is. You can use JavaFX from any language that runs on the JVM (so that includes Python) and it's been steadily matured over more than a decade. It's maintained by a mix of corporate and community developers, and you can buy support from multiple vendors.

It doesn't get much love on HN but it's there, it works, I've used it to ship real apps.

obdev 5 days ago [-]
How does Hydraulic Conveyor improve the distribution of cross-platform JavaFX applications, especially compared to the standard jlink/jpackage workflow?
mike_hearn 4 days ago [-]
Our website https://hydraulic.dev/ covers the most important points but compared to jlink/jpackage:

• Delta software updates without code changes. On Windows apps update in the background even when not running.

• It can do web-style synchronous updates on app launch.

• Can build for every platform from any platform. Linux cloud CI workers can be 10x cheaper than Mac workers, so this feature can save you a lot of money!

• Lots of usability work and features around code signing/notarization. It can do signing without MS/Apple tools and it knows how to use cloud signing services, remote HSMs, local HSMs, the Mac keychain (protected from other apps), custom enterprise signing services that can only be accessed via scripts, it can check for many kinds of mistakes (a particular weakness of vendor tools), it will help you buy certificates by generating CSRs for you.

• Generates a download HTML page that detects your user's OS and CPU to give them a big green download button, it can upload all the artifacts to S3 or GitHub Pages/Releases or any other server via SFTP. It renders icons for you, etc.

• Deployment by Windows IT is easy and installation doesn't require users to have admin rights on their system.

• It can publish to the MS Store which lets you avoid needing to buy signing certificates for a one off $19 fee.

• It comes with commercial support. With other tools if you get stuck you're on your own.

----

All the above works for Electron and native apps too. For JVM users specifically:

• It figures out which JDK modules you need using jdeps and bundles a minimized JDK.

• It provides a Gradle plugin that can read config out from your build configuration automatically.

• Easily bundle JCEF if you want an embedded Chromium.

• (soon) It will provide an API that lets you check for updates and trigger them manually. This is done, it just needs to be fully documented and published to Maven Central.

• It has way better support for native code than jpackage. It will dig through your JARs to find native libraries that don't match the target machine and delete them, it will sign them in-place, it can extract them ahead of time and then set up your system properties to make them be loaded from the right places and so on.

• It can bundle custom TLS root certificates into your JVM trust store. That's especially useful for enterprise settings.

That's not even a complete list by any means. Conveyor is packaged with itself and is a JVM app written mostly in Kotlin, so the above features get dogfooded by us.

I wrote this tool partly because I really wanted to close the gap between web and desktop dev, to let developers have more freedom around frameworks and languages than they do today. It's not right for everyone but if you aren't hog-tied to the browser then the pain of distribution is really removed by this thing, and that lets you focus on building your app.

obdev 3 days ago [-]
Thank you. Your software has indeed a decent feature set. I will definitely try it out as soon as possible. I wish you the best of luck with the business!
oblio 5 days ago [-]
Can you use it on Android/iOS?
mike_hearn 5 days ago [-]
Actually, yes:

https://gluonhq.com/products/mobile/

Although it's not a mapping over the native UI toolkits so it has the same issues as Flutter etc.

ozim 5 days ago [-]
No it is not, it is just like QT, damn shady all over the page Creative Commons where framework code is not even on github but their docs and landing page is.

Electron is just using HTML/CSS/Javascript that are open, Electron alone is MIT licensed and there are no tricks like "2 developers - well you have to buy $900 a year license".

I don't expect everything to be free as in beer but JavaFX looks shady. I would never build my business on their platform, would rather go with QT.

vips7L 5 days ago [-]
What are you talking about? It’s GPL v2 with classpath exception.

https://github.com/openjdk/jfx

ozim 5 days ago [-]
It is owned by for profit company.
vips7L 5 days ago [-]
I don’t see how that is relevant especially when comparing to electron which is just Chrome.
croes 4 days ago [-]
And Electron depends on Chromium from the web killer Google
lelanthran 5 days ago [-]
> There are also people complaining that Electron is slow and bloated - but in reality there is no alternative for open cross platform GUI.

What's wrong with Qt? There's also Lazarus (https://www.lazarus-ide.org/) with almost transparent interoperability with C.

They may not be perfect, but in light of their existence, it's hard to argue that there is no real open and cross-platform GUI.

If you relax your definition of "open" a little bit, there's still things like flutter.

ozim 5 days ago [-]
HTML and CSS are open standards that are governed by W3C and JavaScript by Ecma. Electron is MIT licensed and OpenJs foundation seem like it is not going to do rug pull from under your feet.

- I don't mind GPL or LGPL and I don't believe everything should be free as in beer -

Still QT company pushy marketing is making it hard to just build stuff on their free offering is a huge turn down, to do a build I need to login to an account, crazy (well the same for Apple, but not the case for javascript/html/css).

Last but not least Lazarus/QT - how long will it take and how much will it cost to build a team of 5 developers to build and maintain product on these. When I put an ad for JS dev I am pretty much flooded, for QT/Lazarus I never posted an ad, but my gut feeling is I will be lucky to get any CV in 3 months.

lelanthran 5 days ago [-]
> When I put an ad for JS dev I am pretty much flooded, for QT/Lazarus I never posted an ad, but my gut feeling is I will be lucky to get any CV in 3 months.

Things like staffing for specific skills is a different issue.

The comment I responded to did not say "There are simply no other Js+Html+Css browser-based alternative to electron".

If they did I would not have responded, because then they would be correct: there are few browser-based alternatives to Electron.

They said that there are no open alternatives, which is what I did respond to.

Because, to be honest, if you're in a company and a team, you are all probably going to use the most popular tech (whether electron or something else depending on the platform).

For all other types of developers, stack popularity may not be a factor at all. From the question asked, there was no context around the type of development or team.

For example, I'm an independent developer, writing custom software. It's faster for me to deliver a cross-platform desktop GUI in Lazarus than in Electron (the delivery speed of the GUI is not even in the same order of magnitude for the type of projects a solo developer can do).

OTOH, if the client needs the type of fancy CSS animation, theming, etc that only a browser can do, then you have no choice but to use the browser.

javajosh 5 days ago [-]
Java still ships and supports Swing/AWT - which is still what most desktop applications use to render a UI, even IntelliJ. I haven't worked with it in a very long time, but there used to be tooling support for alternative platforms like web browsers. Angular feels a bit like a spiritual successor to Swing.

These days I feel like React Native is your best bet for open cross-platform GUI. Its a nifty idea: your app still runs in JavaScript but the rendering layer is replaced with something platform specific. There are some big warts (performance is NOT uniform) but its probably the best way for someone with frontend chops to leverage their skills for other platforms at this point. (Although for desktop Electron might actually be just as good or better, too.)

vips7L 5 days ago [-]
I tried to use swing a year or so ago. It wasn’t a great time. I’d probably go with JavaFX or compose multi platform if I did it again.
hasbot 5 days ago [-]
Well sure it takes a bit of time and study to learn it but it's a totally viable cross-platform UI toolkit.
vips7L 5 days ago [-]
Oh I agree it’s viable! It just wasn’t pleasurable to work in. I’m looking forward to trying JavaFX when the time comes :)
datavirtue 5 days ago [-]
I hope you tried it with the NetBeans visual designer. That is basically Java's Visual Studio.

FX is not flushed out. Though it does have some data binding, which is all manual in Swing.

jmaker 5 days ago [-]
Other than the already mentioned JavaFX which now goes by OpenFX due to Oracle’s TM license changes, there’s also

- Swing with FlatLaf look and feel, just exactly like the JetBrains IDEs, there’s a kitchen sink app JAR you can download from FlatLaf, there’s some nice extensions for the layout too, not for mobile though as far as I’m aware

- Vaadin and their 2nd framework whose name I forget, directly integrated with Spring and Quarkus

- Kotlin Multiplatform and Jetpack Compose Multiplatform, a very promising and awesome tech, works fine for my requirements, would be happy for them taking the lead, I love the syntax and their compositional semantics, similar to SwiftUI

- React Native worked great for me, can reuse some React.js stuff

- NativeScript, never tried

- Ionic Capacitor, never tried

I think it might make sense to watch a couple YouTube live coding showcase sessions with the respective developers.

Avalonia also has a kitchen sink app btw. And I really like Uno’s calculator app, though I recall having had a weird bug once in the calculation logic.

And as for Blazor, there’s always been JSF which have long had great UI components. To me Blazor is about replicating JSF.

Yeah, well, I wish there were just 1-2 really good choices to be made, but there’s a myriad of caveats in each framework, more so in some of them. Well, Qt comes closest I think.

password4321 5 days ago [-]
https://fyne.io/ for golang (no accessibility yet).
pjmlp 5 days ago [-]
As someone that went from a strong advocate of UWP, into a strong critic of UWP.

They really messed up WinRT.

Although not perfect at Windows 8 launch, its evolution until Project Reunion came to be had potential.

It was .NET as it should have been from day one, a proper developer friendly wrapper on top of COM, and Microsoft had finally provided something comparable to C++ Builder for the C++ crowd.

Instead they never delivered feature parity to WPF, killed .NET Native, C++/CX, the designer, and then started from scratch on Win32 side, while expecting everyone jump to put up with them, and follow for the ride.

I consider that an ultimately lack of respect for paying customers.

zerkten 5 days ago [-]
C++ Builder fan from my early career. Did they add designer/XAML support for C++ and then kill it? Do you have to do C++ dev with code only now?
billfruit 5 days ago [-]
It's become a morass. Did they ever get back to atleast where Xamarin was like 5 years ago? Why exactly is Microsoft doing this, it all sounds very shambolic, the approach they chose and the outcomes.

I think this space needs some stability, and Microsoft seems keen on inducing volatility for some reason.

chubs 5 days ago [-]
Here’s the reason: the LPA cycle, unfortunately. https://twitter.com/buccocapital/status/1576909546164928513
m_fayer 5 days ago [-]
I think Avalonia is finally emerging as a partial way out of the morass, a qt-for.net. And why? Because it’s from the ground up, and not from Microsoft.
dgellow 5 days ago [-]
As someone who seriously tried pretty much all the mentioned tools to develop modern windows applications I feel this comment sums up everything perfectly. WPF is still the most usable solution.

I really wanted to like UWP, then WinUI, but for anything that isn’t a simple demo project you end up spending all your time fighting the framework and facing broken/unpolished parts that make you feel pain and frustration.

Avalonia isn’t perfect and has some rough edges but I would still consider it for cross platform support over anything else.

neonsunset 5 days ago [-]
This project is not related to UWP.

Is there actionable feedback you could provide to it?

ejiblabahaba 5 days ago [-]
For Uno specifically: I do like the attempt to build out a WASM target, it looks usable. Uno looks to be in a lot better state internally than even two years ago, which is promising - that's one thing I can't get out of either WPF or Avalonia.

Key things that need to improve: - Documentation appears to have gotten better in the last few years, but still many sparse or underdocumented corners. This is my biggest reservation today. - When I last used it (a few years ago), a lot of things weren't fully implemented - maybe this has changed? But it added a lot of friction.

datavirtue 5 days ago [-]
WPF is a joy.
isodev 5 days ago [-]
All cross-platform frameworks are somewhat underdelivering on their promises. Even if you get an app going quickly, you end up in some kind of maintenance hell a few months down the road.

This is a 3rd party framework on top of .NET (which itself is a 3rd party on mobile) which is 2 layers of abstraction on top of the actual thing that will run on the user's device. Microsoft takes a full year to update their GitHub runners with the latest macOS and Xcode versions, can you imagine the risk of having to wait for so many parties to update/fix their things?

Flutter and RN are not immune to this effect, every year when there is a new iOS or Android release, existing apps just break and tooling takes quite some time to catchup. It's so many side quests suddenly appearing without added value for the developer or the user.

cageface 5 days ago [-]
So far I have found this to be much less the case with Flutter than RN. With RN I came to dread upgrading anything more than a few months after starting a new app.
mpartel 5 days ago [-]
The rather prominent XML on the front page might scare folks off.
neonsunset 5 days ago [-]
Interestingly enough, in practice, there are various declarative SwiftUI-style nuget packages for Avalonia[0][1][2] and Uno[3]. You don't actually have to touch XML if you don't want to.

Edit: as someone else noted, the website itself links to a built-in option to do so as well - https://platform.uno/c-markup/

[0] https://github.com/AvaloniaUI/Avalonia.Markup.Declarative

[1] https://github.com/wieslawsoltes/NXUI

[2] (F#) https://github.com/fsprojects/Avalonia.FuncUI

[3] https://github.com/VincentH-Net/CSharpForMarkup

pjmlp 5 days ago [-]
Plenty of folks that criticise XML, have no issues dealing with JSON and YAML spaghetti, ironically.
mpartel 5 days ago [-]
I agree. It's just quite a lot of verbose-looking XML. "I have to write that much XML" is probably not the first impression you want to give. I did scroll down and see that you don't actually have to write such XML by hand, but many will not.
sasakrsmanovic2 5 days ago [-]
Good feedback. C# and XAML are on parity. But if you are seeing too much of one and not the other, it needs to be adjusted
theCodeStig 5 days ago [-]
Has anyone tried Uno with F#?
francoistanguay 5 days ago [-]
You can create an F# class library and use it with Uno, it's all .NET. We just don't have a dotnet Template for it just yet.
qwerty456127 5 days ago [-]
Isn't Avalonia better?
m_eiman 5 days ago [-]
Seeing several comments about Avalonia made go have a look at their website. Then I found the price page, and wow - that's a price!

€19,500 For the 1st app. Second app only €4,500

Semaphor 5 days ago [-]
Just to clarify what is what: Avalonia UI is free, what is expensive is their XPF solution, which allows you to get free cross-platform features for your existing WPF app. So this is very much targeted at companies with legacy code that they want to make cross-platform without even more expensive rewriting.
jug 5 days ago [-]
As others have said, this only for a particularly hairy product called XPF, not Avalonia, so the price point is probably warranted, lol. Basically, they remimplemented WPF itself, the whole shebang as far as they could, to make a transition towards cross-platform support. Microsoft never even attempted this. It's for people mainly having a large, legacy WPF product so they probably already are a business and a desperate one at that to look at these fixes.

But if you're making something from scratch, just use the free Avalonia.

By the way, Avalonia also supports NativeAOT, unlike WPF, if used with the compiled bindings feature. Pretty cool!

ClimaxGravely 5 days ago [-]
Oh wow they re-implemented WPF? Madness. I seem to recall not wanting to make WPF cross platform was one of the reasons visual studio on Apple is based on monodevelop.

I worked at a shop that wouldn't hesitate to spend the 20k in a second if they had to.

zczc 5 days ago [-]
There are two Avalonia products: free and open-source Avalonia UI and paid Avalonia XPF. Looks like [1] XPF allows making existing WPF apps cross-platform while Avalonia UI is more for developing from scratch.

[1] https://avaloniaui.net/Blog/migrating-wpf-applications-avalo...

S04dKHzrKT 5 days ago [-]
That's for Avalonia XPF, their product that runs WPF apps on Linux and Mac. Avalonia UI is free and licensed under the MIT license.
ammo1662 5 days ago [-]
Their website is

https://www.avaloniaui.net/

Where did you go?

[Edit] Sorry, I see that you are talking about the "XPF". I didn't use that before.

5 days ago [-]
dancemethis 5 days ago [-]
Used it for a couple of internal applications for a former client, zero cost.
watersb 5 days ago [-]
I was confused by the name, because I remember 'Uno' as part of OpenOffice.

I presumed that this was OpenOffice internals that support cross-platform UI and OpenOffice scripting.

But apparently, the 'Uno' internals in OpenOffice are just the internal object message bus and don't have anything that is visible to the user.

https://wiki.openoffice.org/wiki/Uno

issafram 5 days ago [-]
How does this compare to Avalonia?
exceptione 5 days ago [-]
The right question, as Avalonia is the gold standard for the cross-platform .net ecosystem.

Maybe this opinion piece might help: https://www.codeproject.com/Articles/5366945/Multiplatform-X...

His conclusions:

«Now what I mean by "better" - it (ed: Avalonia) allows considerably faster development, maintenance and support of the products. In particular:

   - It is a more powerful UI package allowing much more re-use and creating shorter code faster to achieve the same functionality. Part of the reason for that is that it is not confined to WinUI/UWP bounds - it is actually more powerful than WPF which is in turn better than WinUI or UWP. Another reason is that it has a better implementation with a lot of code re-usable across all of the platforms while Uno and MAUI essentially have completely different implementations for each of their platforms.
    
   - There are many features in Avalonia that are not implemented in Uno or MAUI, while I do not know a single feature implemented for Uno or MAUI that would not work in Avalonia. If someone knows a single feature available in Uno or MAUI but not available in Avalonia, please mention it in the comments and I will refer to it in this article.

   - Avalonia covers all the same platforms as Uno and more than MAUI does and has considerably fewer differences between behaviors on various platforms.


   - Avalonia is easier to switch to for an expert WPF developer than to Uno or to MAUI.»
lostmsu 5 days ago [-]
I would not call it a gold standard. It doesn't have a WebView control, and its TextEditor control is slow as molasses.
layer8 5 days ago [-]
Can I also create aesthetically neutral apps faster with this?
francoistanguay 5 days ago [-]
Yes, it's all simply a matter of styling.

You can leverage some of our existing design systems like Material/Fluent and customize them: https://platform.uno/docs/articles/external/uno.themes/doc/t...

Or you can start from scratch and define your own styles.

By default, they will be pixel-perfect and look the same on all platforms.

YellowTech 5 days ago [-]
Is this just me or does Firefox become completely unusable when opening the homepage platform.uno?
CaptainOfCoit 5 days ago [-]
Works almost perfectly fine for me with Windows 11 + Firefox 125.0.2 (64-bit), besides the top menu item icons not rendering. Reason for the icon rendering issues seems to be ill-configured cross-resource sharing, so should be the same for everyone else with a properly configured browser.
ajpinedam 5 days ago [-]
Using Firefox (Developer edition here, the blue one), and I don't see any issue.
KacharKhan 5 days ago [-]
How long have Uno being FOSS ??
francoistanguay 5 days ago [-]
Uno was open-sourced in 2018.

Has been in development since 2013.

postepowanieadm 5 days ago [-]
Killing XUL was a huge mistake.
jbverschoor 5 days ago [-]
What's the difference between the NativeScript UI library and this?
sasakrsmanovic2 5 days ago [-]
Many differences. To begin, NativeScript is JS based, where Uno is .NET Based (therefore C# and XAML).

Fun fact, I worked on NativeScript team, and now on Uno team.

king_magic 5 days ago [-]
Cross-platform development, the scam that never ends.
sasakrsmanovic2 5 days ago [-]
Why? Seems like a flaming comment without any substance to back it up. Could you elaborate please?
actionfromafar 4 days ago [-]
It's flaming but I can relate. Every cross platform UI describes itself as the second coming of Christ. In reality there is always a tradeoff and impedance mismatch. Of course there are more polite ways to point this out.
matijash 5 days ago [-]
this roughly reminds me of Xamarin? Is there a similar philosophy behind it?
francoistanguay 5 days ago [-]
Uno achieves similar goals to Xamarin.Forms/MAUI. It's also based on .NET.

Main differences are that it also targets Linux+WebAssembly, and it's meant to be Pixel-Perfect so it would look and behave the same on all platforms by default.

It also offers a variety of additional packages out of the box and aims to be an end-end platform instead of solely a UI framework: Hot Reload, C# Markup alternative, a toolkit of mobile-first controls, design systems, reactive state management (MVU-like), recipes for Authentication/Navigation/Logging/DI/...

KacharKhan 5 days ago [-]
These "additional packages out of the box" , particularly the Auth/Nav/Log etc ... also have FOSS licensing??
aryonoco 5 days ago [-]
Yes
gruntThenPunt 4 days ago [-]
[dead]
craigmcnamara 6 days ago [-]
[flagged]
jeremycarter 5 days ago [-]
Problem with it? It's good enough for the millions of web pages out there.
lf-non 5 days ago [-]
If you scroll down there is support for a pure C# builder API too which looks quite nice.

https://platform.uno/c-markup/

5 days ago [-]
Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact
Rendered at 16:35:03 GMT+0000 (Coordinated Universal Time) with Vercel.