All modules. Public modules are listed at the Silverstripe CMS Addons website. Anyone can publish a module to this list, and there is no minimum quality requirement. It is up to you to determine fit for purpose of a module, and how you might resolve defects or missing documentation or features.
CWP Modules. Public modules built to work with CWP are likewise found on Silverstripe CMS Addons website, when you filter the list to modules to those tagged "cwp". Anyone can publish a module to this list, and there is minimum quality requirement. It is up to you to determine fit for purpose of a module, and how you might resolve defects or missing documentation or features.
Commercially supported CWP Modules. A group of modules are commercially supported by Silverstripe. In total, these provide the "features" of CWP. These are modules where you can notify Silverstripe of a defect via the Service Desk and expect to have this fixed within a reasonable timeframe. A list of which modules are commercially supported is maintained at:
Private modules. Modules built to work with CWP that are not publicly available also exist. However, by definition, you will need to ask around for this, as there is no list. You can ask on the Government Web Community Yammer Group, or contact the Lead Relationship Manager whether anyone knows of a module that fulfils a particular use-case that you specify.
To share code publicly, upload it to GitHub, and publish it to AddOns using the "cwp" tag, and it will automatically appear at the top two links above. When publishing a module, please also contact the Silverstripe Lead Relationship Manager so that we can consider ways of further broadcasting what has been created.
The detailed steps for a developer to follow are:
Modules are created as subfolders in the Silverstripe CMS project. They are named using lower case letters and hyphens (the naming convention in use in the community for module). For example: 'silverstripe-blog'.
There is a set folder structure for the module code which should be followed, this is documented in the official Silverstripe CMS documentation(external link).
A readme document should be written and included in the module folder. This includes information about the features, installation and configuration of the module and likely the text of the FOSS license it has been released under. This readme file is also displayed on the addons module catalogue to help other discover modules for use in their projects.
A composer code manager meta data file should also be included in the module directory and should include meta data describing the module for the addons catalogue to later make searchable. A full example of a composer.json(external link)file can be seen in the official Silverstripe CMS documentation. For modules created specifically for CWP the tag 'cwp' can be included in the keyword metadata to help other CWP users find specific modules.
Next the code must be moved to an online and public code repository. For openly shared public code, GitHub is recommended though any publically available git repository will work. This includes module code on the CWP GitLab as long as the code repository has been marked as public.
It is also good practice to tag your module using semantic versioning, if this is the first release of a new module you will likely tag it as the 0.1.0 version until it is deemed more stable.
In order for modules to be installed via Composer, it needs to be submitted to Packagist.org. This is the directory of software that is able to be used via the Composer package management tool. Sign up for an account and follow the instructions to complete the registration of your module.
The module can now be referenced in a project's composer metadata file and installed like any other Silverstripe CMS module.
Lastly, the module will now automatically appear on the Silverstripe CMS addons catalogue(external link) for other users to discover and reuse. If the process has been correctly followed then in the addons catalogue:
The module is listed and can be found under the 'cwp' tag.
A list of available versions will show when drilled down into the module listing (based on your release version tags from your git repository).
The readme file content displays and provides details about the module's features and how to install it in a project via Composer.
The module can be installed by copying the Composer quick command listed with the module.
As further work is completed on the shared module code and new versions are released the data held in the addons catalogue will automatically update provided the documentation in the readme file, new release tags and the composer metadata files are updated.