claudioc / jingo

Node.js based Wiki
MIT License
1.02k stars 184 forks source link

Plugin System #63

Open almereyda opened 9 years ago

almereyda commented 9 years ago

I am proposing to think about a Plugin System for Jingo, maybe version 2. Generally accepted use of npm as the package manager is clear.

Together with this, seperation of Client and Server could be undertaken, to render Jingo more data friendly (thus, being an Open API at the core). It would innovate by providing an HTTP API to a git backed Markdown Wiki. Additionally this seperation would make it more easy for me to include real time aspects for an Etherwiki.

Plugins should have names like jingo-plugin-persona, jingo-plugin-ether or jingo-plugin-rss. What these do could then be discussed in seperate Repos.

I will try to build both into core first, but as a plugin would be much more appreciated.

claudioc commented 9 years ago

This is something I thought about too... The idea would be that Jingo will have basically no UI, but will expose a REST API to a "git backed Markdown Wiki". Incidentally this is exactly what Gollum is, after all.

Once there is a REST server, we could write a UI over it, developed independently.

I'd also like to think to move to a "plugin" system for the authentication subsystem. I know people want Facebook, for example, but I don't like to add it to the core. I think this could be done before than moving to the API-only back-end, but I wonder it the jingo-auth-facebook would be then compatible with the new API architecture (if not, there will be the need to write another auth plugin or a compatibility layer).

almereyda commented 9 years ago

For a plugin system, we'd also have to identify places where plugins can register.

Like HTML header, footer, custom CSS, custom JS, routes, views, etc.

I actually liked the way how Hadron.js solves this problem by using the scatter and particles tool chains, but there may be different options.


You may also be interested in Node Organic. If this refactoring works out, maybe there'll even be a Jingo core that can be easily embedded into other applications, either server or client side.


Update: Incrementally refined the argument. @claudioc A simple design pattern for plugins could be the directory require pattern.