Local-first solution for version control

I just finished listening to the first episode of the podcast, and something that got my attention was the discussion about using git for version control.

This is a pain point I’ve found many times working with design. As a developer, being used to something as granular as git, it feels like going back to the past working with rudimentary versioning tools. So the idea that Penpot is built on top of SVG and JSON and can be tracked with git is very exciting. But one of the issues that may arise from this is conflict resolution. Git conflicts are already a pain to work with in code sometimes, I can’t imagine how that would be for SVG :sweat_smile:. But that’s when local-first and CRDTs came to mind :).

In case you’re not familiar with those concepts, I strongly suggest reading Ink&Switch’s excellent essay: local-first software.

TLDR: CRDTs (Conflict-Free Replicated Data Types) are a data structure that allows merging changes in distributed environments without conflicts. This type of architecture empowers things like collaborative real-time text editors with offline support.

I believe something like this for Penpot would be beyond awesome :D. It could also be a very elegant solution to have a standalone version. Of course, I understand that this is a stretch and implementing something like this would probably require a complete refactor of Penpot (I’m not familiar with the internals). But I thought I’d post this in case you weren’t familiar with it. If nothing else, it may serve as an inspiration :).

I really like the idea of local-first software, because even though it’s very technical in essence, the motivations and ideals a very aligned with UX (as you’ll notice if you read Ink&Switch’s essay). There have already been some experiments using this architecture for GUI-based applications, such as PushPin (which is open source, by the way). So I hope to see more like this in the future. It would be great if Penpot is one of the first design tools to embrace it :).

PS: The parts in cursive are text I would have made links pointing to the relevant page, but it seems like I can only have 2 links because this is my first post in the community -.-.

1 Like

I agree, local, git-style control is great.

I remember how much better Abstract for Sketch was than Figma, especially for rockstar IC designers or complex scale designs like design systems.

Without guessing too hard, I wonder if local saves and git handling would be a first good start.