Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Final report for the project 'Default Plugins Support on desktop' for Joplin organisation that was done during Google Summer of Code 2022

GSoC 2022 Joplin - Default Plugins Support on desktop

Contributor - Mayank Bondre

Mentor - Caleb John

The goal of this project was to implement bundling and installing any desired plugins as default on Joplin desktop.

What's been done

  • PR (merged): Install default plugins on Joplin desktop

    This enables installing default plugins which are bundled with the desktop app.

    After installing default plugins, we apply the default settings for required default plugins. If a user has already installed any default plugin, then we avoid re-installing it and we don't apply any default settings to that plugin to avoid overriding user's settings.

  • PR (merged): Bundle default plugins with desktop application

    Every time a new desktop release is being built, we compare the local default plugins version with pinned plugin version mentioned in desktopDefaultPluginsInfo.ts

    If there is a newer version available, we will pull the tgz file of plugin from NPM registry and extract it. We will then move manifest.json and plugin.jpl to the build folder of desktop.

  • PR (merged): Add technical spec for default plugins

Bug Fixes

  • PR (merged): Remove demo plugins folder and update pinned version of backup plugin
  • PR (open): Fix missing plugin file error and missing setting key error in dev mode

What's left to do

Everything mentioned in the proposal has been implemented. If some bugs come up in future because of default plugins implementation then I will be willing to fix them as soon as possible.

Weekly Progress Report

Weekly progress reports can be found on Joplin Forum


Before working on this project, I had very little experience with TypeScript but over the time I started learning and appreatiating it more. It can really avoid silly bugs and save hours of debugging.

One of the main challenges I faced was thinking about all the possible paths that a user can take instead of just thinking about the "Happy path". But over the time, with the help of mentor and reviewers this got easier. I also struggled with mocking fetch for testing puposes (e.g. testing downloading a file) but eventually implemented it.

What I have learned

  • TypeScript and How it is powerful especially in large codebases.
  • Writing tests using Jest.
  • Writing descriptive code. Habit of adding comments
  • Improved written and verbal communication skills
  • Community is there to help you. Ask questions instead of being stuck for hours on one thing.

Finally, I would like to thank my Mentor, Caleb John for being so supportive, also all the reviewers and community members for their help.

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