.. _contribute: Contributing to GeoMoose 2 ========================== GeoMoose is an increasingly flexible platform upon which functionality can be added. Making enhancements should follow these guidelines. 1. Before you start writing something (be it an extension or a part of core), it helps to engage other developers on our mailing list. This way, you can get a sense if anyone is working on something similar, gauge interest, and get advice that will greatly increase the chances that your contribution will be in a form where it is easy to accept. For extensions that don't require any changes to the core code, this isn't a huge deal, for changes to core this is critical. 2. Follow the :doc:`coding standards. ` 3. Try writing an extension first. JavaScript allows just about anything to be replaced at runtime. See the examples of extensions in the "extensions/" directory. 4. If you are writing an extension and find you need a particular event or API exposed from core, considering asking the list. Maybe there is a less intrusive way to get what you need. Generally, we are happy to accept patches to core for new functionality so long as it doesn't break anything and it doesn't put us in a bad situation for future upgrades. 5. Failing 4, hack at the core. Be aware, however, changes to the core are given very strict scrutiny before being applied. 6. Code contributed to the GeoMoose Project will be distributed under the GeoMoose :ref:`license`. Other contributed code should be documented as per the developer standards. Generally, the GeoMoose development community is very friendly and always looking for people interested in the code. We are active on our mailing list and generally interested in how the product is being used and extended. Have no fear in emailing the list!