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 movemanifest.json
andplugin.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
Challenges
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.