Homepage    |    GitHub    |    API    |    FAQ

[GSOC Idea] Sharing Notes via Git

Hello all!

I've been researching the idea of collaborative notes as suggested in GSoC project ideas. And honestly, after considering multiple options, I think having LIVE editing is not something that's really required at all, atleast for me, I wouldn't use it at all!. Being able to simply "sync" with other users would already make perfect sense for me.. If I want live editing, I can just use Google Docs or something. But being able to collaborate with others on the notes would be awesome! And git is a perfect candidate!

Frankly, I haven't collected all thoughts yet and I'm just trying to gauge interest here rather than provide a full spec sheet and details... So I'll try to deliver the idea in terms of points better!

Pros:

  • You can easily use ANY of the available git hosts online so it's way easier then having to host a custom server yourself.
  • You can easily limit access to the git repo, thus it kind of acts as a good "permission system" already available for you!
  • Users would be able to import a "Joplin Workspace" from a git which it then downloads a copy locally.. And also the opposite for exporting to Git.
  • On conflicts, git would be perfect as it'll automatically provide diff features, I'd think adding a VS-Code style merge thingy instead of it being plain text would be incredible.
  • Maybe add ability to view file history (AKA commit history), compare versions, and even checkout old versions.

Cons:

  • The only huge challenge I can see occuring is mobile support. I don't how would that work and if it will even work. A quick google shows it's possible though, atleast for android.

Let me know what do you guys think! :slight_smile:

Keep in mind that this is more of a feature suggestion then a GSOC proposal, if I find a decent acceptance on the idea, I'll ofcourse make more thorough and reasonable plans that fits with GSoC and the proposal would include all details.

1 Like

This has been requested multiple times.

One issue I see here is that this is a pretty big change and, unlike some other GSoC ideas, you can't build it incrementally - it has to be all or nothing.
It probably can't be built as a plugin either; and there are no plugins on mobile anyway.

1 Like

Actually, now that I think of it..

We can have a plugin that monitors a folder Joplin syncs to; then, assuming a plugin can have a callback like onSyncCompleted it can push the folder to git & pull changes from remote and this way achieve a basic, desktop-only git sync.

This only requires a relatively small change in the core to notify plugins of sync status, which is useful anyway (I could use it for my resource search plugin).

1 Like

I agree it's a pretty big change. But I disagree on the point about "it has to be all or nothing".. We could start with literally JUST ability to import and export to git as a project on it's own.

Not sure what you mean here. Import a folder that's under git? You can do it as long as it contains data in a supported format.

I think there has to be a minimum set of requirements for any feature, and the minimum for sync is to work on all platforms. That's really what sync is about. Mobile you can forget about it. But even on desktop any solution would be quite ugly as it would require people to install a git client, which is not expected on Windows (where most of our users are).

1 Like

I'd think most people who want synchronization with git would be ok with installing a client.

There's also GitHub - nodegit/nodegit: Native Node bindings to Git.

I think most people haven't thought this through.

How are you going to solve sync conflicts with git? We can't expect people to leave Joplin to resolve conflicts manually.

Uhm now that you phrase it that way, I'm not entirely sure tbh what'd it do that a user can't just do in terminal haha..

But what I had mind is that we could start with being able to add a git repo as a sync target and it manages pushing/pulling etc.. At this point it's no difference then just syncing to local folder and typing git commit && git sync in a terminal ngl but I guess it'd be progress towards a better synced project system?

In future, we could add better conflict management and more git features built in. One thing I'm thinking about is even branches support!

It's quite a bit of work, but ehh just brainstorming.

Yeah, conflicts is the worst part. Again, I assume people who want git may even prefer it that way actually. I might be wrong though.

Also I don't see how this is related to sharing. Sure, multiple users can commit to a repo, but multiple users can also share Nextcloud account and that would achieve "sharing" in the same way. But what we actually need is for example sharing a single note or a notebook, and git wouldn't solve any of this.

Absolutely true!
I've wrote a bit about this above, but I'll reiterate. Basically something like how vscode does them would be nice. Basically a UI where a user can see "theirs" and "ours" and ability to select one or both of versions.

Fair point. I hadn't thought about this tbh. moving all my notes right now :joy:

I really don't like this idea. One of the things Joplin is going for is the relative simplicity of its sync solution, so one can host it in multiple providers. Adding a weirdo geek dependency, famous for its insanely complex structure, seems to go exactly against that design decision.

Also, git's real power won't be needed or used; it would also make troubleshooting harder; and what about history? Joplin already does a good job of tracking history/note changes. I have set the history retention to 90 days, because even that is way more than I'll actually need. Truncating older history is not exactly something git was built to do.

2 Likes

To be fair, adding git as a sync target should not affect other targets so I don't see an issue here.

Quite the opposite, I think. Although that depends on specific implementation.

Not really - for instance you can't compare 2 versions to see what has actually changed.

Which is something I've needed exactly 0 times.
(I do use git for some of my datasets and the like - never needed it for notes though.)

Likewise. But I was just responding to your comment.