IMO desktop apps aren’t quite equivalent to native apps. Native apps look and behave in a consistent way. They have
• Familiar UI primitives:
- Controls and chrome are in the same place
- Font sizes are the same across apps
- Consistent icons and button shapes
• Support standard keyboard shortcuts (including obscure ones that developers re-implementing these UIs might not know about)
- All the Emacs-style keybindings that work in native macOS text fields but are hit-or-miss in custom web text fields
- Full keyboard access (letting me tab and use the space bar and arrow keys to interact with controls)
• And consistent, predictable responsiveness cadences
- Somewhat contrived example: In Slack (browser or Electron app), switching between channels/DMs (via ⌘K) has a lag of about 0.5–1 second. If I start typing my message for that recipient during this lag, it actually gets saved as a draft in the channel that I just left and my content in the new channel gets truncated. I don’t think that kind of behavior would happen in a native macOS app, which renders UIs completely synchronously by default/in-order (so it might block the UI, but at least interactions will be in a consistent state)
• Familiar UI primitives: - Controls and chrome are in the same place - Font sizes are the same across apps - Consistent icons and button shapes
• Support standard keyboard shortcuts (including obscure ones that developers re-implementing these UIs might not know about) - All the Emacs-style keybindings that work in native macOS text fields but are hit-or-miss in custom web text fields - Full keyboard access (letting me tab and use the space bar and arrow keys to interact with controls)
• And consistent, predictable responsiveness cadences - Somewhat contrived example: In Slack (browser or Electron app), switching between channels/DMs (via ⌘K) has a lag of about 0.5–1 second. If I start typing my message for that recipient during this lag, it actually gets saved as a draft in the channel that I just left and my content in the new channel gets truncated. I don’t think that kind of behavior would happen in a native macOS app, which renders UIs completely synchronously by default/in-order (so it might block the UI, but at least interactions will be in a consistent state)