Ask HN: Is there still a place for native desktop apps?

524 points by Jaruzel ↗ HN
Modern browsers these days are powerful things - almost an operating system in their own right. So I'm asking the community, should everything now be developed as 'web first', or is there still a place for native desktop applications?

775 comments

[ 5.3 ms ] story [ 372 ms ] thread
Well the browser is still not good at things that say Blender or Protocols can do. Media pros still need desktop software for example audio latency in chrome is far too high to use it for any serious pro audio applications.
CAD and BIM
Exactly what I came to say.

As someone who has used Autocad since Ver 9 (1993) this is important.

Also - heavy 3D design. Blender/Alias/whatever these days.

Solidworks as well.

webgl and wasm?

Edit: I presumed that the context of the discussion was apps in a general sense. Obviously not every application is going to be on the web and there are a lot of niche software that will never make the switch. I was thinking more qucad or sketch 3d for woodworkers to plan their desks, not solidworks and all its plugins to handle complex fluid simulation in mission critical areas.

Still wishful thinking at this point.
I worked in the EDA space for a while and even built an online circuit simulation tool [0] while there. I'm aware of couple of startups such as [1] that tried to move these tools to the browser. There are a number of challenges that make web apps difficult in this space such as"

1. Pricing model: For the simulation side of EDA, you need a lot of computing power. With desktop apps, the user already has a powerful machine available that you don't have to pay to use. With the cloud, you need to pay for all the machines so finding a pricing model that works is a challenge.

2. User expectations: The users who are willing to pay > $100k/seat/year expect very advanced features that would probably take 10s or 100s of engineering years to get working. These users also don't care as much about the UI/UX problems that a modern app would solve.

References

0. https://www.multisim.com/

1. https://upverter.com/

We've had some success with 2D AutoCAD on WASM, but it's not as easy as just recompiling when you are dealing with a nearly 40 year old codebase and care about pixel level accuracy. Also, it will never be as responsive as native, mouse events lag on the browser even if you are doing nothing else. AutoCAD users care a lot about such lag.

The BIM stuff (i.e. Revit) is very Windows-specific so a straight port with WASM is a no-starter.

The actual 3D rendering with WebGL is the least problem, we have that nearly solved (in terms of performance relative to desktop -- we never really needed 60fps anyway). The problem there comes in when you have a huge design that does not fit in the allocated/allowed heap space.

(throwaway for obvious reasons)

Place? Absolutely. Developers will to provide quality apps and customers will to pay for them? Not so much...
Browsers have one huge problem and that is they override important hotkey space (like cmd+w, cmd+f for searching etc). So native apps will always provide a better experience.
Google Docs actually hijacks CMD+F.
And nowadays even websites that don't hijack the shortcut itself are non-"find in page"-able, due to the trick of disposing unused/out-of-view components (which is actually I suspect what Docs is doing, too, but they made their own find so people wouldn't get stuck)
Yup you're right, ay least for Google Spreadsheets. GS is a canvas app so what you see is exactly - and only - what is rendered.

Though, I think Google Docs is not a canvas app.

It does feel better to use a native app. Marketing as a "premium" product could work.
Lots of software would be better (from the user's POV) as a desktop app. However as a developer and as a software business owner/investor, it's (much) better to write web apps. So it depends on what you're asking here. Should you invest in desktop dev skills to further your career? No. Should you write your software idea as a desktop app if you want to make a business of it? Not if you can avoid it. If you're asking something else, well I guess the answer is 'maybe'.
OTOH, creating desktop apps is a skill in itself that one might want to master. At least in the Mac ecosystem this is a regarded skill and amongst the users there is a willingness to pay for apps. SaaS might still be more lucrative though.
> However as a developer and as a software business owner/investor, it's (much) better to write web apps.

Why do you say that?

Scaling out cross-platform, lower cost of investment to support multiple OS/Devices.

User does not need to worry about dependencies and libraries - they just need to make sure they're running a somewhat up-to-date version of a modern browser.

Users are not tied to a single device either.

As a business, it's not to your advantage to have to ask permission from app store owners. The web does not require permission from a third-party that may decide to compete with you.
But with the app stores you get more users

I basically had no users for one of my desktop apps for seven years, till I ported it to mobile and put it in the normal app store

Because of the main advantages of SaaS: recurring payments and data lock-in.
Adobe achieves that with desktop apps, if you can call it an achievement.
Achievement is a big word here. They had to shove it down people's throats with a bloated, buggy, and expensive app suite.
Yes although people still put their hand in their pocket every month so they must be getting some value from it.
I think he is saying that because with webapps you have

- control over your software and updates

- no one can pirate your software/service

How do you have more "control over your software" with a web app? With a native app, I can do virtually anything. With a web app, I can really only do what (Google ∩ Apple ∩ Microsoft)'s web browser teams decided to prioritize, and allow, and optimize.

As for 'pirating', is that a serious concern these days? I've only ever heard about it being an issue at big companies selling software to other big companies, where it's solved with "license servers".

I think they mean rapid, continuous deployment. If it’s a web app you can push out changes every day to near universal adoption. With a native app you have to cajole users to update
Also on mobile you are constrained by the app store requirements as well.
There are auto-updaters for desktop software, too.
>> How do you have more "control over your software" with a web app?

It means they can break a program I'm using at any moment they wish, even after I paid for it.

I think pirating is a serious issue in other countries (i.e mine), I practically never saw anyone actually pay for any office suite, adobe software and some offline games. All of them get pirated and very quickly too.
> no one can pirate your software/service

Huh? Given how most web applications these days are using client-side rendering there's nothing stopping someone from just downloading all of the frontend assets. You can also connect to a server from your desktop application so I don't understand how desktop makes it easier to pirate anything.

Web applications have lots of essential parts on the server-side even if they do client-side rendering. And each paying user is logged in when using it, so the company can accept/deny requests depending on the user.

Proprietary desktop applications are usually downloaded after a payment, and then the full software is available locally. By hacking the security parts of it one can then have a totally free version and distribute it. That's why it is easier to pirate.

Not anymore!

Games and even productivity apps are known to be moving small pieces to their servers so that you cannot run the entire application on your own...

How does this address my point about being able to connect to a server from your desktop application? Just because historically companies have not deployed their product in such a fashion doesn't mean it isn't technically possible. How do you think social mobile applications work? Have you ever worked on an application that wasn't running in a browser?

> That's why it is easier to pirate.

There are no technical reasons why a desktop application is inherently easier to pirate. Only implementation details.

I like a desktop app for uploading / syncing large files or directories to the cloud.

I'm sure there's a good web implementation out there for the Dropbox-style sync thing, I just haven't seen it yet.

(comment deleted)
The web versions of Office software still feels way less polished than the desktop version. It just doesn't feel quite right
OS extensions like command line tools, Alfred or Little Snitch will remain native by necessity.

As will applications like Final Cut Pro and Logic Pro. As I see it, the web platform is neither adequately performant, nor are its timing mechanisms accurate enough.

So no, native is sliding. I argue that >95% of users are happy with browsers and/or electron apps.

Either that, or those peeps move over to iPads. Which by design forces native or psuedo-native apps.

IMO: To some extent, yes.

Here are some desktop applications I enjoy and have gladly paid for:

Acorn (image editor) / 1Password / Evernote+Skitch / Pingplotter / djay

(comment deleted)
(comment deleted)
No internet? No web-app.

I suppose I am increasingly frustrated with the inability to use my computer if it has no internet....

This needn’t be true. You can use a service worker to make the code load when offline, and IndexedDB to store data.

As a trivial example, https://jakearchibald.github.io/svgomg/ (which has no data storage requirements) works just fine offline.

Offline support is a banner feature of the PWA (progressive web apps) movement.

I was excited to see how this worked, so I visited the page, clicked around to see what it did, disconnected from my network, and tried opening the page again in a new window. I got the usual browser error page: "You Are Not Connected to the Internet". So I connected to the network, loaded the page, then disconnected from my network, clicked the Demo button, and got: "Couldn't fetch demo SVG".

So by trial and error, I found that I need to load the page before disconnecting, and only use the 1st of the 5 buttons on the side (even "About" requires network connectivity). Then it works offline. Which is pretty cool!

But every native application I have works perfectly offline, and I don't need to do anything special ahead of time, or worry about which parts might not be available. There's a big difference between "some parts may work offline sometimes" and "entire app will definitely work offline always".

From decades of experience, when a "trivial" app struggles with demoing a feature, there's little chance it'll be widely supported among real apps. PWAs have been "any day now!" for 10 years now.

Sounds like the service worker didn’t register for you.

The logic that decides whether the browser accepts service workers is a little bit iffy. My vague recollection is that browsers default to something like “when you access the site for the second time, keep the service worker”. (Don’t quote me on that, and if anyone knows better, please correct me.) “Add this to your home screen” functionality will definitely make the service worker go. (That’s mostly for mobile browsers only at this time, though desktop browsers will eventually get it consistently available, as we’ve been promised for… hmm, about 8±2 years, I think.)

Privacy and blocking extensions may block service workers from being registered, too.

If the service worker is loaded, then it loads just fine with no internet connection, and the demo works too. The contribute and about links, being to GitHub, still don’t work.

I first actually discovered this completely by accident: I was offline, and thought “I need to shrink this SVG file, so I’ll open a tab to the SVGOMG URL and that error page will remind me to do it when I reconnect; huh, it loaded, must have a service worker. This is really great.” On later reflection, I realised that it being by Jake Archibald (a big mover in the service worker space) pretty much guaranteed it was going to work offline.

Service workers are an antipattern. I don't want to visit a website and have it install something that runs in the background.

If you, as a website owner, want me to run an application then you should ask for permissions. No ifs, no buts, no ors.

>No internet? No web-app.

I've seen lots of tools that spin up a local webserver and then use that to serve the webapp even offline. But then the question becomes is this really a webapp if I have to install a native server?

Truly, that old quote about "computer engineering concerning with solving problems that didn't exist before computers" gets less funny every year.
I‘ve always been on the fence about this. I can see both sides, and don’t have a strong opinion either way. But answering is there still a place for native? I think yes for sure! I guess it comes down to if it is really important to your philosophy as a developer, or your type of app could really benefit from native capabilities.

A good example of a recent app that chose to leverage native platforms is Table Plus. They are developing native apps on Mac, Windows, and Linux. I respect the effort/skill and dedication required to pull this off! https://tableplus.com/

Every single app that I use, I try and make sure it is native. I shun electron apps at all cost. It's because people who put in effort to use the native APIs put in a lot more effort in the app in general based on my anecdotal evidence. It is also more performant and smaller in size, things that I cherish. It also pays homage to limits and striving to come up with new ways of overcoming them, which hackers would have to do in the past. I don't think not worrying about memory, CPU, etc are not healthy in the long run. Slack desktop app is almost 1 gig in size. That is crazy to me, no matter the "memory is cheap" mantra.
Bonus points if it includes offline documentation. As nice as it is to have "updated" online docs, the reality to me seems to be defined more by broken links than by actual up-to-date documentation.
1 gig for Slack ? I count < 300 MB on my Windows C:\Users\[MY USERNAME]\AppData\Local\slack counting app-4.5.0 and packages folder

And currently taking < 300 MB RAM

"storage is cheap"

"memory are cheap"

"cpus are cheap"

Say the same people who spend a million on AWS every year

Agreed. If you have a CPU from 2012 onwards, 16GB of RAM and an SSD, that’s a respectable hardware setup. It might not be the fastest piece of kit on the planet, but I don’t see any reason why it couldn’t last another 3 to 5 years without feeling slow.

Electron apps invariably make such kit feel slower than it actually is. You can get good performance out of even older hardware if you treat it well and load it with good software that respects the hardware.

I type this from a 2014 MacBook Air with 8GB of ram, still going strong, no upgrades except a battery replacement. Everything is still as snappy as the first day I got it.

No electron apps!

Yep, the new Steam library being a bloated web app is what forced me to install more RAM. I normally don't close out of applications when I'm not using them, so I was always hovering around ~6-7 of my 8 gigs of RAM in use. Then they update the library to the new bloated version, and my computer starts freezing because the library memory footprint is so much larger that my computer was having to use over a gig of swap space.
I have a rig powerful enough to run a lot of last-gen games at 4K with high quality settings, and a lot of current-gen ones at mid to high settings and 1080p. The fucking redesigned Steam library lags, none of the animations (why does it need animations?!) are even close to smooth, and there's massive delay on every input. I've never once encountered a move toward webtech, or toward heavier and "appier" JS use in something that's already webtech, and gone "oh good, this works much better now, I'm so glad they did that."
And somehow it's still dramatically better than the Epic Games launcher.

I don't know what these companies are doing. Clearly they're not paying attention though. This is not merely low-hanging fruit that's going ignored, it's watermelons.

>I normally don't close out of applications when I'm not using them, so I was always hovering around ~6-7 of my 8 gigs of RAM in use.

That sounds like your problem. And I refuse to believe that the new steam UI uses 2gb of memory.

I agree, in part because of performance, but also in part because I value being able to bootstrap from source as much as possible. There are only a few projects seriously working on this, one being GNU Guix: https://guix.gnu.org/

The trouble with Electron apps though (and most Node apps) is the sheer number of dependencies. It's just infeasible to package them for a distro if you care about their dependencies being packaged as well - at least, not without the entire process being automated.

Slack desktop app is almost 1 gig in size.

On a whim I just checked how big the copy of Adium still lingering in my Mac is: 60 megs.

And Ripcord (a native discord/slack client) is a mere 40.

(comment deleted)
ooh I'll have to check out ripcord!
I use it daily. It's OK. It's better than having a full electron app/browser running, but it's fairly incomplete. (For example, in Slack I can't find a way to set my status.) I also have to reauthenticate every Monday morning which means launching Slack in a web browser to grab my credentials. It's a pain.
I've found it's great for Discord, and pretty good for Slack (although I've been using Slack in my browser now that it's become critical during WFH).

Unfortunately it's proprietary, but there's another native client called gtkcord3 [0] that seems to be progressing well.

0: https://github.com/diamondburned/gtkcord3

And Winamp is 4MB (after removing the stock plugins that I don’t need, like modern skins and the long-broken media library internet lookup stuff).

How big is Spotify now?

Spotify is 273MB (on Linux at least), 70MB for the binary and 137MB for Chrome, plus some other bits and bobs.

  $ pacman -Qi spotify
  Name            : spotify
  Version         : 1:1.1.10.546-4
  Description     : A proprietary music streaming service
  Architecture    : x86_64
  ...
  Installed Size  : 272.79 MiB
So at least it's smaller than Slack.
I have a noob question, but how do proprietary apps (IE: Slack) make it onto the AUR without having an official binary?
Both Slack and Spotify do provide Linux versions, even if not/less supported officially.
Thanks! I hadn't tried Arch yet, but I just saw the pkgbuild script on the site (didn't know it was there) and it makes since now :)
There’s nothing to really block much on the aur. There are some guidelines in naming and no duplicates, no maliciousness etc that are enforced, but that’s it. But anyone can upload a build script (PKGBUILD) for anything.

If you want to see how it’s done search the package name and AUR and you can see the build script right on the website.

There are many PKGBUILDs on AUR that cactually download rpm / deb packages and unpack the binaries and deps from it.
iTunes, in all its bloated, much-maligned media-managing glory, is a mere 188 megs on my Mac.
OTOH, if you are using Slack, you probably deserve it :P

"The emperor wears no clothes" and all... paying for threaded messaging, hmmm that's up there with To-Do MVC and Hello World in complexity... well, ok it's a bit higher. Not to mention their billing system lol...

not saying you have any choice in the matter of using Slack or not, but I can assure you that Slack software is aware of their bloat and inefficiency and they don't care.

The core task Slack is charged with WAS done 2 decades ago with significantly lower resource usage?

Why does this matter? because Slack is not your main productivity app (I HOPE) it's just a background process, effectively, most of the time, a communication channel you keep open and check in with from time to time.

Being able to keep an app open while you run your main productivity suite is a clear win. Slack loses in this respect.

But go on, downvote and flag me some more for speaking truth to power... it's rather obvious, i would say...

First, you say:

> OTOH, if you are using Slack, you probably deserve it :P

then you say:

> not saying you have any choice in the matter of using Slack or not

Now, I don't actually run Slack nowadays. I run Teams, which sounds like it's efficient since it only uses 600 MiB RAM rather than a full gigabyte.

But the choice between Slack, Teams, and any other product we might use is determined not by the user, but by the company we work for. Companies have a tendency to decide what works without respect to empirical data. Business people are unconcerned with mere technical matters; they optimise for purchase processes.

I think you got downvoted for saying we have any choice in the matter. When you made a valid criticism, your comment fared much better.

It is true that there is a a correlation between lower level programming and better programming in general. You probably won't see someone writing asm but creating crazy O^2 algorithms that run on every frame with memory allocations that run in the inner loop.

At the same time a native win32 program can pack significant functionality into a 20KB exe. Put these together and you have a program where everything is instant, all the time on any computer. The original uTorrent was just over 100KB and installed then ran in an instant.

These two refinements together are such a massive difference from any electron program that it melts my brain when people say that it isn't a problem to have a chat program feel like using windows 95 on a 386.

People say talk about needing cross platform programs, but something like fltk has everything most people will need and also runs instantly, while adding only a few hundred kilobytes to an executable.

I strongly disagree with the idea that lower level is better.

Yes, lower-level languages allow for programs with good performance, small executables, and so forth. There are many domains where they are clearly the way to go.

But higher-level languages allow for better safety, tremendous productivity, portability, exploration, and flexibility.

If you keep your data in an SQL database and you can easily query and update it in any number of ways that you didn't initially realize you wanted. If you instead keep it in hand-crafted C structs, you can probably provide awesome performance. for whatever you originally thought you needed. Once your needs go outside of that box, you'll have to spend significant development effort.

The correct choice depends almost entirely on the domain.

How about "being aware of what your abstraction layers cost, and being palpably aware of every needless contortion you create"

know what everything does. call if from up on high? fine, but only if you literally can trace that high level call down to the machine code it emits :D C compiler suites can do that no problem "gcc -S mycode.c"

For an appropriate dose of humility, so that you know that I'm not elevating myself here, but pointing out reality, check out GCC or LLVM source code.

Something like Lua or Berkeley DB can be defined inside your program in a matter of a few hundred lines of included library code, but what does it DO?

Bringing SQL and a database on board is rather odd for a desktop app, wouldn't you say? Configuration should be flat files, ideally, or managed via the apps gui, in which case an embedded database like Berkeley DB is usually more relevant. Your mention of SQL smacks of "all things are nails, always use hammers", to me at least.

Have you worked with the actual computer itself in any capacity? I mean ASM, C, C++, etc, but essentially being aware of what an ABI is, what types actually are (memory shape patterns so we can define physical memory in terms of our data structures) Javascript is not computer programming, but rather programming the browser, or it's disembodied transplanted javascript engine. the animal is completely different from physical memory and actual instructions.

Computers essentially manipulate memory structures. The further away from this you get, the more likely that your abstractions will be leaky, not fit what computers are actually DOING with your data, and this results in beautiful script driving janky machine code.

Seriously, while we all like to pretend that everyone is equally special, let's recall that someone is a VBscript for Word expert, and that this is basically a virtual machine that itself is just defined inside someone elses program. Technological stacks are defined in terms of semi-arbitrary made-up things other people made-up and that you just need to know how to use.

Sqlite is inanely well tested, incredibly lightweight, and will be more reliable than the vast vast majority of flat file configuration systems.
Ummm Context here is "desktop software" configuration management will be key-value and you needn't bring SQL in for that purpose.

Let's not bring "in-house web app" into the picture just yet.

The "all things are nails, always use hammers" mentality is almost explicitly what I am arguing against.

My mention of SQL was particularly deliberate. It's an especially successful high level declarative language with clear semantics. Implementations provide sophisticated execution engines for optimizing and efficiently running queries. It is quite a lovely separation of concerns that gives you great flexibility and good performance.

Obviously SQL would be a disastrous choice for, say, storing the pixel data in your video codec. Meanwhile, hand-coded C data structures and algorithms would be a disastrous choice for an inventory management system. Tradeoffs everywhere.

agreed.

a well DESIGNED technological stack WILL allow for high-level control of low-level structures.

Electron and Browser-based apps make a deliberate tradeoff that may be suitable for some kinds of apps (Balena Etcher, as I mentioned. You click a button and some process starts and alerts you when it's done.)

I would simply say that the OP should reverse the question: "in which cases can an electron app suffice for a desktop application" and not presume the death of desktop apps.

You are arguing against a point I didn't make. I'm not trying to rehash nonsense language arguments. I'm saying that many times the easy electron route is also correlated with programming that gives poor performance even outside of electron functions.
Not sure that I entirely agree there: I could easily imagine someone writing too close to the metal to stick to list iteration where a hash would be better and so on, unless it's prohibitively slower, whereas someone slightly higher would freely choose whatever they feel appropriate for the situation. They might often guess wrong and take a structure that is overkill for the typical dataset but the penalty for that will be negligible compared to the one paid for using a badly scaling structure on way too much data.
> You probably won't see someone writing asm but creating crazy O^2 algorithms

I watched a lecture by Bjarne Stroustrup that he gave to undergraduate CS majors at Texas A&M where he coded a solution to a problem using linear scans and then a "better" solution using better algorithms with better big O performance.

Then he did something interesting. He did a test on a tiny data set to demonstrate that the solution with linear scans was faster, and he asked the audience to guess at what data size the more efficient algorithms would start to beat the linear scan. After the audience members threw out a wide range of guesses he confessed that he didn't know. He had tried to test it that afternoon, but the linear scans outperformed the "better" algorithms on any data set that he could allocate memory for on his laptop.

IIRC he finished by telling them that professionals often do performance optimization the opposite of how the books present it. Using an algorithm with optimal big-O scaling isn't the optimized solution. It's the safe answer that you start with if you aren't bothering to optimize. When you need better performance, you evaluate your algorithms using real data and real machines and qualify your evaluations based on the characteristics (size, etc.) of the data.

You are focusing on an example and conflating it with the actual point that I'm making, which is that electron is not only slow, but compounded by slow programming in top.

That being said... I know exactly what you are talking about and it was always strange to me, because it was actually iterating through every time to find a value first, so the iteration through the linked list would always kill the performance. Even so, basic linked lists are practically obsolete. This is not a good example of algorithmic complexity, because the complexities were actually the same.

The "<resource> is cheap" mantra also really only makes sense if you are writing server code, where you yourself pay for all the memory your code will ever use. If you deploy code to a large number of users it makes little sense. If a million users start your app daily, and your app has a 5 second load time and uses 300mb of ram, you are wasting over 50 days of user time, and hogging close to 300 terabytes of ram.
So you are telling me that I can easily exchange development time which I would have to pay for end-user resources, which I would not have to pay? Sounds like a great deal.
In a fair society it should be taxed as an externality. There is a real environmental cost associated with software bloat.
People pay with electricity, uncomfortable temperature and fan noise, wasting time working on slow apps.

Apparently, they trade off still worth it, as many electron apps are popular despite these issues. Many times there is electron app or nothing.

Your last sentence hits the nail - many users don't have a choice in selecting the application, and due to industry fads can't expect to have a better option.

I can make a great chat system that uses fast native client, but it won't change the fact that Corporation A paid for a slack license and won't switch to mine.

Then I hope we would also tax the bad UX of the competing 20-year old Frankenstein applications, which lead to slower business processes (= more resources used as well).
In a fair society closed software would be illegal and people wouldn’t tolerate this kind of stupidity.

No need to hack it with taxes.

> In a fair society closed software would be illegal

What?

But, I am traiding my time for my user's CPU and RAM, and evidence suggests many users are willing to pay the CPU and RAM to get more apps with more features.
Waste the company does not have to pay for is not waste as far as they are concerned. Customers rarely notice that kind of waste either, or at least not enough to do anything about it.
People also takes it a bit to far. Sure, RAM is cheap enough, but if your application requires 64GB of memory you may start having other issues.

We have customers who requires servers with 64GB+ memory, of single applications. This is running on VMs in VMWare. If a ESXi host crashes, you'd want VMWare to migrate your VM to another ESXi host, but that becomes somewhat tricky if you need to locate one with 64GB of available memory. Unless of cause you're way over-provisioned, which is actually pretty expensive. More realistically VMWare will start moving a ton of VMs around to put all those with little memory usage on other hosts, in an attempt to find 64GB for your VM. This takes time.

It can be difficult to explain to people that really this should look at their memory consumption, if nothing else to plan for fail-over.

I admire your words here.

I am on the other side, building electron apps, I appreciate the flexibility and ease because I would rather iterate on ideas then learn three different OS-hooks.

I do agree that memory usage is too high on these types of apps and we as developers can be lax about performance.

I agree too, and your average user is not going to care about the fact you've used Electron, or even know. It's a big win for development.
I disagree. I mean they may literally not know that your app uses Electron, but they'll certainly have the feeling of, "Oh, that janky app that doesn't quite work correctly and makes my system slow."
I think that might be true on Windows or Linux, but not on the Mac. It seems like Mac developers care more about making their application feel good to use.
Your average user has just come expect technology to suck nowadays. Go look around and many people are jaded by how poor things actually function.
When why not just use gtk or qt and call it a day? Electron is unnecessary.
Mainly due to them being both more tightly integrated to C++/Python than JS/TS for building desktop apps.
Yeah, but, honest question, why would you want to use JS if you didn't have to? It's like, the worst language possible.
When all you have is a hammer...
If you use typescript, the tooling is great and the parent also mention it so I assume they are using it.

Code reusability between browser/desktop/mobile is one. Easier to find developers, faster development speed due to ecosystem, previous experience/familiarity etc. I guess.

Maybe it is just your subjective opinion? I am pretty sure that there are people enjoy writing JS/TS over C++/Python.
If I were no experience for GUI development, I'd prefer to learn Web tech than Desktop tech like Qt because it look like more popular and versatile skill.
I would pick writing JS over C++ any day. Of course, that's just my opinion. I am sure yours differs.
JavaScript is actually not too bad. It lacks static types, but Typescript gives you one of the better type systems. But I'd take JavaScript over PHP or Bash any day of the week and twice on Fridays.
I prefer well-designed desktop applications to web applications for most things that don't naturally involve the web:

* Email clients (I use Thunderbird)

* Office suites

* Music and media players

* Maps

* Information managers (e.g., password managers)

* Development tools

* Personal productivity tools (e.g., to-do lists)

* Games

As Windows starts on-boarding their unified Electron model (I can't recall what they have named this), I suspect we'll see more lightweight Electron desktop apps. But for the record, I like purpose built, old-fashioned desktop applications. I prefer traditional desktop applications because:

* Traditional applications economize on display real-estate in ways that modern web apps rarely do. The traditional desktop application uses compact controls, very modest spacing, and high information density. While I have multiple monitors, I don't like the idea of wasting an entire monitor for one application at a time.

* Standard user interface elements. Although sadly falling out of favor, many desktop applications retain traditional proven high-productivity user interface elements such as drop-down menus, context menus, hotkeys, and other shortcuts.

* Depth of configuration. Traditional desktop apps tended to avoid the whittling of functionality and customization found in mobile and web apps. Many can be customized extensively to adapt to the tastes and needs of the user.

Bottom-line: Yes, for some users and use-cases, it still makes sense to make desktop apps. It may be a "long-tail" target at this point, but there's still a market.

What is your maps desktop application?
I just use Maps that ships with Windows.
(comment deleted)
Email doesn't naturally involve the web? What?
Email over ARPANET and the internet predates the web by a couple of decades.

The way we use email hasn't really changed that much since the 70s.

Ray Tomlinson's design for email came in the 70s. RFC 788 (SMTP) was published in 1981.

Email predates the Web, and, imo, has been made much worse by all the Web-adjacent features shoved into it.

I believe they’re referring to the web as port 80/443 http(s) traffic. It’s the old World Wide Web vs internet distinction, if you will.

Email really is just a protocol for message sending, and it lives on it’s own port with its own server. If you have an email client and access to an email server (POP/SMTP/however), you can use email over the internet but without the “web”.

Basically, the web email client ought not be the only email client.

It was the ambiguity of the word 'web' that tripped me up. You still need a network of computers for email to be useful.
I don’t think you’ll find many people here who agree that “web” is ambiguous.
Totally fair! Frankly, I only know the distinction from a high school computers teacher who was adamant about the distinction.

I guess the easiest way to get the name is to see the “Web” as a “web” of hyper text documents, where hyperlinks act as the strands in the web (graph edges, if you will).

Honestly, like you say, it’s all built on top of a computer network (yet another web/graph). As a consequence, the distinction never really made a ton of sense to me, either.

Alas, this is the common parlance, so it is what it is.

Nope, different protocols. You don't need web browsers for email, and the email clients that run in web browsers are using mail servers to send and receive.

If the web didn't exist, which it didn't prior to 1991, email would still work fine. There just wouldn't be any web-based email clients.

Thunderbird isn't a native app, for the record. It's a web application similar to an Electron application, but with extra steps.
Eh. XUL isn't really a web technology the same way as Electron.
It's not XUL anymore, actually, as far as I know. That's why it ripped out support for XUL addons.
Firefox has been ripping out xul, but Thunderbird still appears to support it.
Only if you're using a ridiculously outdated copy:

changed

Add-on support: Add-ons are only supported if add-on authors have adapted them

changed

Dictionary support: Only WebExtension dictionaries are supported now. Both addons.mozilla.org and addons.thunderbird.net now provide WebExtension dictionaries.

changed

Theme support: Only WebExtension themes are supported now. Both addons.mozilla.org and addons.thunderbird.net now provide WebExtension themes.

https://www.thunderbird.net/en-US/thunderbird/68.0/releaseno...

Literally here's a doc explaining how XUL has changed as of Thunderbird 68, the most recent version, released about a month and a half ago. Yes, some elements have been removed, but others have been modified and still exist.

https://developer.thunderbird.net/add-ons/updating/tb68/chan...

And that's in the add-on documentation, not even just internal development docs.

Also, describing information changed in the most recent stable release, a month and a half ago, hardly qualifies any older as "ridiculously outdated ".

Last time I looked, Thunderbird was about:

    - 1/3 C/C++
    - 1/3 Javascript
    - 1/3 everything else (XML, CSS, etc) known to humanity
I'll grant you that an Electron app is generally 90% C++ (ships a web browser), but I'm not sure if that makes Thunderbird (ships a web browser) any better.
This is a big part of why I still use MacOS. The mail, notes and reminder apps are simple, easy, fast and can be used with third party providers like Fastmail. The Windows apps are fairly sluggish by comparison. I prefer most native MacOS apps in general, Finder/Explorer is a big exception though.
> Thunderbird

The search is not very good on Thunderbird...

it's still better than Outlook!
Not yet for music production. DAW's, software synthesisers, drum machines, latency matters here.
Funny that the other day I discovered bandlab. It's not professional but for my hobby usage it's the best I've found
Same here - I was a Cakewalk user back in the 90s, and decided on a whim to find out if it was still around.
I imagine DAWs like many others could be a very small native audio processing binary with a gui on top that can be whatever it wants. Some are already Java UIs over C++ backend (e.g Bitwig). Should be possible to do an electron or web frontend over the C++ backend too. Replacing the processing bits will be hard though. Driver interfaces aren't exactly the strong point of web dev.
On Office 365 (desktop version), sometimes when you click a dropdown like the "different kinds of bullet lists" the whole application freezes for a couple of seconds while it builds the menu content or something. This didn't happen with earlier versions, if memory serves me right. I'm not sure if this is web tech or some other kind of new framework under the hood, but it makes me sad that with the speeds and cores we have on modern processors old-fashioned things like word processing have got slower than they used to be.

Native Applications in the platform's toolkit (not some cross-platform abstraction on top) will always squeeze a little bit more performance and usability out of the corners.

In some (most) cases, desktop apps could be better - performance, latency, offgrid capabilities, and even privacy. In most cases, I prefer offline desktop apps, then their online counterparts.

One area which is really tough to nail is cross-platform support though. Getting a good app on one system is hard enough, getting it in all three - rarely done. This is one of the things where web shines.

From business standpoint, I think web-first with an eye on native works for majority of cases. That is, as long as the majority of users don’t care about the above. In some future, if we start valuing efficiency and especially privacy more, this could turn around. But it feels like, even then, web will probably find a way to make more sense for most people.

But building a good app on all three major operating systems is not solved by an abstraction layer, neither by a cross platform gui toolkit nor by a web layer. Different operating systems have different conventions, metaphors and standards. A portable application will usually feel foreign on all, but the developer's primary platform. Unless, the developers invest in adapting to the differences of the platforms.
You need a desktop app when 1) you’re spending a ton of time in the app or 2) you need every ounce of performance and feature set that you can obtain and 3) you’re willing to pay for it.

If you’re not building something like this, don’t build for desktop.

It's true that many apps could be replaced today with a website, specially those that are basically capturing and showing data.

But there are still many areas where native is king.

- Games

- Audio / Video work

- Adobe type of work (photo editing, motion graphics, vectors, etc)

- 3d

- Office. For me Google docs is enough, but not for heavy users.

- Desktop utilities (eg: Alfred, iStatMenus, etc). You could certainly use a web UI for those, and it would probably be fine , but you'd still need some native integration.

What a crazy mixed-up world: on desktop we ask if there's a future for native apps, while on mobile we ask if there's a future for web apps.
I mean, we built the Windows Terminal as a native application because we didn't want users to have to be saddled with 40MB of a webview/Electron just to boot up a terminal. It might take us longer to make the terminal as feature rich than it would have with JS, but no amount of engineering resources could have optimized out that web footprint. When we think about what the terminal looks like in 5 years, that's what we were thinking about.
Thank you. As you say, in the long haul, Windows Terminal is considerably better than it would have been thanks to that decision. It feels responsive and lightweight; unlike any Electron app, and that is greatly appreciated by many users, myself included. I look forward to each new version.
Didn't they eventually did some crazy optimizations to keep the terminal in VS Code performant?
They still do; for years now I read the patch notes and every time there's a segment dedicated to the terminal with things like font support or sane selection, things that IMO are both basic features and which should be in native terminal emulators already.

also I've never used the VS Code terminal, iterm works better for me. Also because it's its own dedicated app, so I can actually alt-tab to it instead of having to learn whatever shortcut it would be in the editor.

I don't use Windows, but thank you for having gone for it.
I am sorry but Windows Terminal is the suckiest Windows app ever and gives me a headache on a daily basis. Try opening multiple instances of this app in overlapping windows, like most developers do. Then fill them with text. Now see if you can tell where one window ends and the next window starts. Because of nearly invisible borders all the windows sort of blend into each other. Worst usability issue ever. This terminal appears to be designed for people who open only one command prompt at a time. Please bring back the old terminal.
I don't like the new Windows Terminal and I still use conhost.exe since it actually doesn't crash, but I don't think that's a fair criticism. The borderless design is part of Windows' theme. The terminal merely renders into the box its given. I think Microsoft (and Gnome) have made a mistake in this borderless fetish, but you can't blame the app for the designers fault.

And the fact that it crashes each time I resume my system seems like a much bigger issue than a person who refuses to keep a few pixels separation manually, or to color the windows differently.

There is a need for native apps, however that need is shrinking and, in my opinion, will continue to do so. I also happen to think that's a good thing.

The issue is that developing for a particular OS is, generally, more difficult than developing for the web. The app delivery mechanism is also more convoluted (for native apps) than simply entering a web address in the browser. The web also seems to have more ubiquitous standards that abstract away the differences between OSs - you can, with a high degree of certainty, ensure that your app is usable by 99% of computer users, given the current software they have on their device - with native apps, there is no such guarantee, especially if you're relying on shared libraries.

Browsers are also becoming more feature rich. This has had a negative impact on their memory consumption, but given it's 2020, some may retort "memory is cheap". And while some browsers (Chrome, looking especially at you) do a very poor job of memory management, I believe the competitive nature of the browser market will force a reawakening soon, where a lot of the inefficiencies in memory management will have to be eradicated (or vendors risk losing market share). Think back to 2014/15 when Node.js was really becoming established - the PHP team suddenly felt a need to re-optimise their engine for PHP7 (and with dramatic results)... Point is, only after ~20 years at the top did something spur PHP's team on enough to do something about their inefficiencies.

Finally, I can see a future where the line between web and native apps is even more blurred. WebAssembly is the first step, however things could get even more elaborate. Perhaps we could end up with the ability to start docker-like containers from within web apps (given the right permissions, of course) to spin up servers for audio/video/image processing on the client itself, and interact with them via a web page. If we get to this point, native apps would feel even more obsolete.

I know your question was only about the current state, but I felt the need to talk about the future to highlight the marked difference in the rate of innovation in the web ecosystem (fast) vs the native ecosystem (slower). It would not surprise me if the web ecosystem ends up winning in the end. If I was building an app today, and it only requires features I can deliver via the browser, I would almost certainly go the web app route.

Now, if I was building a video processing app today, I'd almost certainly go native, but in a couple of years, my answer may be very different.

If computers get significantly faster then no...but at this point I always reach for a native application if I have the choice.

The only non-native app I dont detest that much is VS Code but it still feels painfully slow compared to something like Sublime Text.

Lets look at the chat apps that provide a similar functionality.

* Teams

Takes between 600-800MB on my PC. It's sluggish as hell and will often choke to re-render if I click on something.

* A native chat app Takes 15MB...Is just as eye candy as Teams and yet i dont care if it's running or not.