“imagine if […] Apple had evolved AppKit […] to provide built-in support for collaboration and live-editing.”, writes Ben Thompson. This is the exact thought I’ve had in the past weeks when reflecting on Sketch’s campaign in favor of native apps and the ensuing criticism.
Conversation
related art
Quote Tweet
Incidentally, @craftdocsapp is (roughly) a native Notion competitor—an extremely exciting prospect, even if it's still quite young!
Electron apps drive me just completely bonkers.
Show this thread
1
3
My last big project at Apple was actually an attempt to do what Ben describes for AppKit/UIKit. It was put on hold for a few years when Swift was introduced, then others evolved it into Combine / SwiftUI—unfortunately without any collaborative layers (yet).
2
13
I wonder if it has to do with the intractibility of CRDT/OT? It's too bad Xi editor, built entirely on CRDTs, hit a dead end github.com/xi-editor/xi-e
Keynote and Pages have collaboration, but I imagine it was a lot of hacks they'd rather not ship to devs.
2
3
No, we never really regarded those elements as intractable, though there are many practical issues and boundary conditions to work through, as and co have been documenting. Bigger concern was: “how do app architecture + programming paradigms look shift in this world?"
1
4
We saw that MVC needed to be reconceptualized for a collaborative world. Reactive paradigms solve many of the problems we were struggling with in 2013, but many difficulties remain: local actions and remote actions share many but not all semantics, etc.
1
1
7
To your point, applications seem to have different semantics when it comes to real-time collaboration + history. The history semantics of, say, Figma, is different from that of a code repo. One is linear, the other, not. So it's a particularly hard challenge to define a set of ..
1
5
.. collaboration + history semantics that works everywhere. Though I can probably imagine a 20/80 solution.
1
4
Yes, exactly. Just one simple example: AppKit has a built-in document model with an undo stack. Probably “undo” should only apply to local actions, and there should be some mapping between undo stack groups and CRDT mutations. One of many APIs needing nuanced design attention.
Yes, we've been working on exactly these questions. How should undo work for a person across many devices, for example? The data structures must be designed to serve the human needs, not the other way around.
1
7




