<div dir="ltr">Hi all,<div><br></div><div>I am actually working on a system to augment a release possibly dynamically with some extensions. </div><div><br></div><div>For now in hooks [1] I am starting applications from the filesystem or just using the applications shipped with the release. I am not a fan of simply starting/stopping applications from the filesystem since for now it is not handling upgrades (only by starting/stopping the application) like a release can do.</div><div><br></div><div>I can see these different ways to handle plugins right now:</div><div><br></div><div><div>1) plugins are only added at compile time (something rabbitmq does). Similar to 1</div><div><br></div><div>pro: plugins are the simple apps</div><div>cons: </div><div>- the system is not dynamic and a user can't simply augment the application he is using. Only plugins built and shipped with the release are available</div></div><div><br></div><div>2) adding plugins to a release and possibly starting them when enabled via the config. The upgrade would be done via a release upgrade.</div><div><br></div><div>Pro: </div><div>- doesn't change too much the current way to handle releases upgrade.</div><div>- the plugins can be added dynamically</div><div><br></div><div>Cons: </div><div>- if i want to add a new plugin I will need to create a new release, increment its version etc.  </div><div>- Also a new release would have to be build for each users depending on their choice.</div><div>- I have to find a way to build a local release based on remote plugins depending on the platform</div><div><br></div><div>3) load plugins via an external system. If this is an apps, it will be installed using the release_handler, so it could possibly manage  the .appup scripts</div><div><br></div><div>pro: plugins are really dynamically handled</div><div><br></div><div>cons: </div><div>- not sure on how with the release_handler the installed application will be handled at startup. </div><div>- not sure if dynamically augmented release using the release_handler is suppored</div><div><br></div><div>4) Something similar to 3 , but instead of using the release_handler, i have my own plugin_handler handling upgrades by looking on specific modules functions if needed.</div><div><br></div><div>Are there other ways to do it? What would be the right pattern to do it? To be honest I am balancing between 2 and 3. 4 would be fine but would mean rewriting something similar to the release_handler.</div><div><br></div><div>Generally speaking how people feels about augmenting dynamically a release with new applications/modules ?</div><div><br></div><div>Any feedback is welcome.</div><div><br></div><div>- benoît</div><div><br></div><div><br></div><div>[1] <a href="https://github.com/barrel-db/hooks">https://github.com/barrel-db/hooks</a></div></div>