Student Name: Duy Huynh, Benjiman (khuongduy354)
Organization: Joplin
Mentors: Roman, Laurent
Project: Joplin Sync API
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:
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:
- 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.
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!