Skip to content

Instantly share code, notes, and snippets.

@khuongduy354
Last active October 16, 2024 12:34
Show Gist options
  • Select an option

  • Save khuongduy354/2c5bf78deb8c4ab1b64f0ecab65b58ad to your computer and use it in GitHub Desktop.

Select an option

Save khuongduy354/2c5bf78deb8c4ab1b64f0ecab65b58ad to your computer and use it in GitHub Desktop.
Joplin Sync API GSoC 2024

Joplin Standalone Sync API - GSoC 2024

Student Name: Duy Huynh, Benjiman (khuongduy354)
Organization: Joplin
Mentors: Roman, Laurent
Project: Joplin Sync API 

Description

This library provides an API to interact with Sync Target (remote storage) programmatically. It exposes CRUD operations for items, supports delta algorithm, and E2E encryption, and is capable of supporting multiple Sync targets in the future. Its codebase is separate from Joplin's:

Current project

Able to perform the following operations:

Initialize remote sync info 
CREATE READ UPDATE DELETE blobs
CREATE READ UPDATE DELETE files (markdown)
READ items based on a timestamp (using Joplin's delta implementation) 
Check E2EE status & Setup E2EE locally for CREATE, UPDATE operations
Supports basic items by overriding Joplin's Item classes
Demos to demonstrate use cases
Have unit tests

The current project focus on main features: CRUD operations, which works fine low-level. It still misses full features support like other Joplin items, decryption helpers, share service, more sync targets... .A big part of the project still depends on Joplin lib which doesn't make it very "standalone", which I think could be solve if the typing is handled properly, then other part can be rewritten easily.

Documentations:

Issues and Future improvements

  • The current type system is not very well structured. Joplin's items are classes, so Typescript interfaces/types cant be sufficient to represent.
  • Add more sync targets, preferably JoplinServer, WebDav
  • Provide better documentation: provide more details on different cases that may happen.
  • Enhance the API design: the library may need more feedback from users to be improved.

Final word

Thank you so much for my mentors Roman and Laurent for guiding me throughout the whole process. It's my first time to approach such project when I have to skim through a large portion of Joplin codebase, I was overwhelmed and made many mistakes, I'm sorry for any delays along the journey. My project may not be 100% complete, but I hope it'll adds some value to the Joplin community. I learnt alot during the process, I can navigate through the codebase easier now, but I still need to improve more on my code quality. Overall, it was a meaningful experience to me. Thank you all for your supports from the community and good luck to all GSoC contributors!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment