Hacker News new | ask | show | jobs
by danShumway 1640 days ago
> No one asks if Excel or Hearthstone or Git or other desktop applications have progressive enhancement

I do! Yes, let's talk about native apps and documents!

https://news.ycombinator.com/item?id=21347067

https://news.ycombinator.com/item?id=21639043

https://news.ycombinator.com/item?id=23607320

etc...

----

Can you imagine how great it would be if nearly every graphical native app on your computer had a pure-text representation of its state that you could query/extend/manipulate? Or if you launched an app and it was missing a dependency and it launched anyway and just disabled a small amount of functionality related to that dependency? Some applications already kind of do this with their dependencies (Firefox will launch even if you don't have a GPU or video codecs installed), but it would be great if they did it even more.

The divide between applications and documents has always been a lie. Most (not all, but most) native apps are interactive documents, they are documents that change when you do something to them, and that are just styled to be displayed in 2D space instead of as pure-text trees. There are very few native app interfaces on my computer that couldn't render out to HTML or something similar. And it would be amazing if native apps were rendered out as pure-text XML/tree-based documents, that would be so useful. It would be even better if there were system-wide conventions for things like links/buttons inside of that tree that could be specified declaratively and that were user-inspectable. That would be a big improvement to accessibility and extensibility for application UIs. It would be like having CLIs for everything, but even better.

Applications are documents, and documents are often interactive. There is no actual distinction, it's just a gradient of how complicated the document is and how often it updates.

This is my pet-cause and at some point I'm going to finally snap, sit down, and write an extensive manifesto about it. Basically every single native app on my computer should work headlessly, should implement progressive enhancement, and should split out declarative representations of state that can be styled and intercepted by other programs.

Native app developers have gotten hung up on the bad parts of the web and the bad parts of HTML/CSS/Javascript (admittedly there are a lot), and it's caused them to completely miss the revolutionary idea that Unix already proposed all those years ago -- that most apps should output human-manipulable text formats that users can inspect, restyle, and pipe into other programs. HTML is the next evolution of that idea, and native developers are so hung-up on the details of the web that they've missed the broader picture and are stuck in the past in how they think about UX presentation. Even worse, they've started to push those outdated ideas onto the web; instead of taking a step back and trying to think about how to make more modular and more inspectable interfaces, instead of thinking about what a better implementation of HTML for native apps could look like, instead they argue that the web itself should do away with these concepts and just render out blobs of pixels compiled in WASM threads.