== What are plug-ins == Plug-ins are code modules that are developed independently of the EwE software, but that are seamlessly integrated into the EwE flow. Via plug-ins, users can extend or replace EwE functionality without having to make changes to the EwE source code. == Write your own == Writing a plug-in is a fairly straight-forward process with some .NET programming experience and access to the EwE source code. You basically need to: * Start a new Class Library project with the same .NET framework dependencies and compiler model as the EwE software. For more information, see the [wiki:TechnicalFAQ Technical FAQ] * Add references to the EwE assemblies EwECore, EwEUtils and EwEPlugIn * Create one or more plug-in classes that implement one or more EwE plug-in interfaces. Available plug-in interfaces are provided in Assemby EwEPlugin, folder "Plugin Templates". The code that is placed in the implementation of these interfaces will be invoked when the EwE6 software encounters a plug-in point during its execution. * Compile the plug-in, and place the compiled DLL beside the EwE6 executable. * Run EwE. During development time it is advisable to reference your plug-in assembly from the EwE Scientific Interface project. This means that whenever EwE6 is compiled, your plug-in will be compiled and deployed with it. == Contributing plug-ins == If you have written a plug-in that you deem valuable for the EwE community, you can contact the EwE development team for integrating your code with the EwE software. This entails the following: * Your code will be integrated with the SVN source code repository of EwE, making its internal logic available to anyone with access to the EwE source code. * Your plug-in will be compiled nightly with the EwE source code to ascertain structural integrity. * Your plug-in code will be kept compatible with the EwE source code if changes occur. You will remain responsible for your plug-in, and you can make changes to the source code whenever you wish. When you wish to contribute a plug-in to EwE, the following process will happen: * You will have to take out a support contract that will be used by the EwE development team to check your plug-in for compliance with EwE UI guidelines, stability guidelines, and adherence to generic EwE flow principles such as !AutoSaving, !EventLogging, !Messaging, etc. * You will receive recommendations to make changes, or the EwE development team can do this for you using the support contract. * When the plug-in is accepted, the code will be integrated with the EwE source code and you will receive write access to the code of your plug-in. * The plug-in will be included in the nightly builds to perform automated integrity checks. * The plug-in will be included in the EwE setup tool in the next release. == Distributing plug-ins == As of yet there is no central repository for EwE6 plug-ins. We need to find funding for this effort, perhaps you can help? For now, freely available plug-ins are included as optional install options in the EwE6 setup package. Plug-ins can be obtained directly from their authors, and can be seamlessly included in the flow of a desktop version of EwE as long as the plug-in is compiled to the same code version as your desktop version of EwE. == License == Note that plug-ins that are built upon the building blocks of EwE will inherit the EwE license. This means that you can freely distribute and even sell your plug-in as long as you make its source code available.