Google Summer of Code 2021 with Joplin
— GSoC, Plugin, Joplin — 2 min read
Joplin
Joplin is an open source note taking and to-do application with synchronization capabilities for Windows, macOS, Linux, Android and iOS.
About the project
Joplin had a templates feature in the main desktop application that enabled users to create templates and reuse them to create new notes and to-dos.
Also, Joplin has an awesome plugin architecture that can be used by developers to create plugins that can extend some functionality to the desktop application.
My project was to re-package the feature as a plugin and remove the feature from the main application while ensuring that all the existing templates are compatible with the new plugin and users have a smooth transition to the plugin.
The main goal of this project always was to enhance the template system. Also, making it a plugin had various benefits like better maintainability, better scope of improvement, etc.
Current status of the plugin
I am very delighted to share that I was able to re-package the existing templates functionality as a plugin with some extra features like
- Templates are now stored as notes which makes it easier to sync the templates accross all the devices.
- Users can now set default templates for both note and to-do.
- Custom variables can defined in templates that can be reused in the template body.
I also ensured that
- All the previous templates are compatible in this plugin.
- Users have a hassle-free, smooth transition from the native feature to this plugin.
Future of the plugin
One of the most amazing things about Joplin is it's awesome community. A lot of users from the community tried out the plugin and gave some awesome suggestions for improvements in the plugin. Some of the suggestions I am planning to implement in this plugin are
- Support for specifying note title, tags, etc. in the template itself.
- Allow specifying lables for variables.
Also, I am planning to mantain this plugin, post GSoC as well.
Weekly Progress
Week 1
- Expose the prompt used by Joplin Desktop App so it can be used by plugins. (laurent22/joplin#5058)
- Initialize plugin using generator framework
- Setup lint, build CI checks.
- Basic implementation of a special notebook for templates.
Week 2
- Integrated the Joplin prompt with the template plugin to get user selection of templates.
- Built basic createTodoFromTemplate, insertTemplate, createNoteFromTemplate features.
Week 3
- Made the PR for removing template feature when the plugin is complete (laurent22/joplin#5115)
- Worked on the default templates feature in the plugin. (joplin/plugin-templates#2)
Week 4
- Completed the default templates feature in the plugin. (joplin/plugin-templates#2)
Week 5
- Integrated handlebars with the plugin and made all the current templates compatible with the plugin. (joplin/plugin-templates#3)
- Added a banner in the main app that prompts users to install templates plugin. (laurent22/joplin#5164)
Week 6
- Work on adding support for template variables. (joplin/plugin-templates#5)
Week 7
- Adding support for template variables. (joplin/plugin-templates#5)
Week 8
- Support for creating templates from tags only. (joplin/plugin-templates#11)
- Loading previous templates (joplin/plugin-templates#13)
Week 9
- Update documentation (joplin/plugin-templates#14)
- Released the first version of the plugin.
Week 10
This week, I mainly worked on improving the plugin, writing some unit tests, fixing bugs, spec for specifying the title and tags in the template, etc.
Related Links
For those more curious about this project, do checkout the following links.
Summary
This was an awesome learning experience working with Joplin this summer. I would like to extend a special thanks to Caleb John who was my mentor for helping me comple this project. I would also like to thank Joplin for giving me this opportunity.
Also, thanks to Google for this amazing program.