Coding period update - Week 4


  • Planned E2E flow when using library: initialize E2E using Desktop or CLI Joplin -> Synchronise -> Sync Library will switch to E2E mode if remote has Master key
  • Implemented encryption in BaseItem.serializeForSync() for itemUploader, which will encrypt notes (items) if E2E is enabled.
  • Implemented GET items (multiple items read): perform multiple GET item methods concurrently in a TaskQueue, which will be later used for apply delta method.
  • Implemented encrypted resource upload, which will encrypt resource path if E2E mode is on
  • Added Synchronizer.verifySyncInfo(): perform version compatability checks, fetch E2E status from remote to enable/disable E2E for sync operations.


  • Implement updateItem method
  • Look into use cases, and add necessary methods to support that use case: OCR server-side, Summarizing A.I server-side.
  • Consider the necessity of applyDeltaToSQLite() method and implement it: if the client use sqlite as database, it acts like a helper to quickly compare delta and apply changes (execute SQL queries).
  • Fixing bugs / Enhance old features: download resource blob in getItem(), E2E master key synchronization,...


  • Apply delta to sqlite idea: currently, delta method only return new data from remote, to apply it, we need the client's data to do comparisons. Users can implement this manually, but sqlite is commonly used, adding a helper to that automatically may help alot. However in cases the users decided to represent data not in sqlite, or in different SQL schemas from Joplin, it may not work.