# GSoC 2026 Proposal Draft – Idea 10: Automatic Conflict Resolution – Divyansh

**URL:** <https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382>\
**Category:** GSoC Proposal Drafts\
**Created:** [27 March 2026 17:56 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382 "2026-03-27T17:56:41Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![divyanshkhurana06](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/divyanshkhurana06/32/28655_2.png) [@divyanshkhurana06](https://discourse.joplinapp.org/u/divyanshkhurana06)\
**Post date:** [27 March 2026 17:56 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/1 "2026-03-27T17:56:41Z")

</div>

I’m Divyansh Khurana , and I have been working on a proposal to bring Automatic Conflict Resolution to Joplin.

Please give feedback if possible.

[GSoC 2026 Proposal Draft – Idea 10\_ Automatic Conflict Resolution (2).pdf](https://discourse.joplinapp.org/uploads/short-url/j35hmBbgIYohPih96kJAH16xT4i.pdf) (506.3 KB)

[GSoC 2026 Proposal Draft – Idea 10\_ Automatic Conflict Resolution (3).pdf](https://discourse.joplinapp.org/uploads/short-url/4Ghyg21VKakNSYlrANNTYUZ69LC.pdf) (619.4 KB) (latest)

---

<div class="post-metadata">

**Author:** ![divyanshkhurana06](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/divyanshkhurana06/32/28655_2.png) [@divyanshkhurana06](https://discourse.joplinapp.org/u/divyanshkhurana06)\
**Post date:** [28 March 2026 09:15 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/2 "2026-03-28T09:15:06Z")

</div>

Hi @mrjo118, can you review this proposal if possible

---

<div class="post-metadata">

**Author:** ![divyanshkhurana06](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/divyanshkhurana06/32/28655_2.png) [@divyanshkhurana06](https://discourse.joplinapp.org/u/divyanshkhurana06)\
**Post date:** [28 March 2026 20:15 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/3 "2026-03-28T20:15:39Z")

</div>

Hi @laurent @CalebJohn , can you review this proposal if possible

---

<div class="post-metadata">

**Author:** ![mrjo118](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/mrjo118/32/23404_2.png) [@mrjo118](https://discourse.joplinapp.org/u/mrjo118)\
**Post date:** [29 March 2026 00:33 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/4 "2026-03-29T00:33:31Z")

</div>

Although the original proposal idea mentioned resolving conflicts automatically where possible (i.e. where there are no overlapping changes), I realised we should avoid auto merging conflicts silently, because it has the potential to corrupt binary data contained within notes. This is particularly a concern because we will likely be doing an encryped notes GSoC project in parallel to this, where auto merging conflicts for such notes could be a real risk.

Therefore all conflict resolution in the proposal should be assisted rather than automatic. But in cases where there are no overlapping lines, having a button to merge all non conflicting changes should enable resolving these type of conflicts with minimal effort.

---

<div class="post-metadata">

**Author:** ![divyanshkhurana06](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/divyanshkhurana06/32/28655_2.png) [@divyanshkhurana06](https://discourse.joplinapp.org/u/divyanshkhurana06)\
**Post date:** [29 March 2026 07:05 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/5 "2026-03-29T07:05:11Z")

</div>

Thanks. I will revise the proposal so resolution is assisted only. btw we can still use a three way model (base / local / remote) and classify non overlapping edits, but no silent merge into the note body. For those clean regions I will describe a single explicit action something like “Merge non conflicting changes” (with preview of it), not auto apply on sync. And, I will adjust the proposal so encrypted notes are explicitly out of scope for any automatic or silent byte level merge.

One thing I wanted to get right though :

Should I treat the rule as no persisted merge without a user action in the conflict UI?

---

<div class="post-metadata">

**Author:** ![mrjo118](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/mrjo118/32/23404_2.png) [@mrjo118](https://discourse.joplinapp.org/u/mrjo118)\
**Post date:** [29 March 2026 09:56 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/6 "2026-03-29T09:56:58Z")

</div>

> btw we can still use a three way model (base / local / remote) and classify non overlapping edits

Yes it’s allowed, but not guaranteed to be available, as base version cannot be recorded for notes unchanged before code changes for this project are available to the user. So there must be 2 way merge as a fallback where 3 way is not possible

> encrypted notes are explicitly out of scope for any automatic or silent byte level merge.

Encrypted notes should not have any special handling, as that creates a dependency to the other GSoC project. No fully automatic merge is enough to cater for them.

> Should I treat the rule as no persisted merge without a user action in the conflict UI?

Correct. But don’t rely on the user being able to revert an automatic merge as a means to allow auto merge, as this adds complication to the solution. Just don’t auto merge in the first place, and always require user action to merge

---

<div class="post-metadata">

**Author:** ![divyanshkhurana06](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/divyanshkhurana06/32/28655_2.png) [@divyanshkhurana06](https://discourse.joplinapp.org/u/divyanshkhurana06)\
**Post date:** [29 March 2026 14:35 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/7 "2026-03-29T14:35:39Z")

</div>

Thanks, I will update the proposal accordingly

---

<div class="post-metadata">

**Author:** ![divyanshkhurana06](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/divyanshkhurana06/32/28655_2.png) [@divyanshkhurana06](https://discourse.joplinapp.org/u/divyanshkhurana06)\
**Post date:** [30 March 2026 18:28 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/8 "2026-03-30T18:28:21Z")

</div>

Hey @mrjo118 . I have updated the proposal accordingly and posted the latest doc. Please give it a final review before I can submit it.

---

<div class="post-metadata">

**Author:** ![mrjo118](https://yyz2.discourse-cdn.com/flex028/user_avatar/discourse.joplinapp.org/mrjo118/32/23404_2.png) [@mrjo118](https://discourse.joplinapp.org/u/mrjo118)\
**Post date:** [30 March 2026 19:47 UTC](https://discourse.joplinapp.org/t/gsoc-2026-proposal-draft-idea-10-automatic-conflict-resolution-divyansh/49382/9 "2026-03-30T19:47:15Z")

</div>

Looks good now
