Home / GitHub Page

High level discussion on plug-in architecture & template library

Hi community,
that is collection topic on how a plug-in architecture & template library for Joplin could look like as there has been many discussion about to add this or that mini feature, what would break with the rule to follow standard strictly to ensure cross-platform and cross-3rd-party-application compatibility.

So far it has been mainly discussed around custom style sheets, what shell be shared and activated more easily as well as allowing flavors of markdown.
As this is discussed actively among GSoC students I bring it up hear as GSoC suggestion.

Properly, a lot of code changes are necessary, I want to initiate a discussion on high level first, to discuses how it could be done, how the architecture would look like.
That can be picked-up by student and push forward during GSoC laying the foundation only.

Inputs and opinions are welcome.
I start by listening topics of which I can still remember wherein suggestions towards this direction were made:

For the record, there’s already a draft plugin system in there: https://github.com/laurent22/joplin/blob/master/ReactNativeClient/lib/services/PluginManager.js which is at the moment only used internally for GotoAnything, but I guess it could be used as a base for a future plugin system. The idea is to give access to various hooks into the application to add menu items, toolbar buttons, etc.

These is a massive task though, and I think it should be designed in such a way that it can work in both desktop, mobile and CLI. i.e. system calls should be abstracted away using lib/shim.

1 Like

For starters, and i could be shooting way out of the park here, but I’ve noticed that the Ace Editor doesn’t seem to have plugin support built in. One of its competitors that’s been highly recommended in the circles i hang around on the web, does along with a possibly better approach to the whole modular what you need is all you have to use approach. Changing the editor could be very useful in improving the app altogether if it means replacing it with something that wouldn’t need as much maintenance to do what’s needed when the time comes to make massive changes.

I propose looking into switching to