diff --git a/en/00_Getting_Started/05_Recipes.md b/en/00_Getting_Started/05_Recipes.md index ef40822e..cd1ef0b2 100644 --- a/en/00_Getting_Started/05_Recipes.md +++ b/en/00_Getting_Started/05_Recipes.md @@ -23,19 +23,6 @@ Silverstripe CMS is powered by a system of components in the form of Composer pa By design, modules tend to be small and serve a specific function. You may need to combine many modules to achieve a wider goal. -For example, the [`silverstripe/blog`](https://github.com/silverstripe/silverstripe-blog) module by itself simply allows you to create blog posts. It does not include all the features you could want in a blog, like a comment system to display related content. - -The [`silverstripe/recipe-blog`](https://github.com/silverstripe/recipe-blog) recipe installs `silverstripe/blog` module, but also: - -- [`silverstripe/comments`](https://github.com/silverstripe/silverstripe-comments) and [`silverstripe/comment-notifications`](https://github.com/silverstripe/comment-notifications) to allow the management of comments on blog post -- [`silverstripe/spamprotection`](https://github.com/silverstripe/silverstripe-spamprotection) to provide basic SPAM protection on comments. - -## Finding recipes for Silverstripe CMS - -The Silverstripe CMS project maintains a number of recipes. Some third parties also maintain recipes. - -[Search Packagist for all packages with the `silverstripe-recipe`](https://packagist.org/?query=silverstripe&type=silverstripe-recipe) type to find recipes you can install on your Silverstripe CMS project. - ## Releasing supported recipes When we announce a new release of Silverstripe CMS and publish a changelog for it, we refer to a new set of *recipe* versions, which include new versions of some or all of their associated modules. The easiest way to keep up to date with new Silverstripe CMS releases is to depend on one of the core recipes: @@ -46,7 +33,7 @@ When we announce a new release of Silverstripe CMS and publish a changelog for i the admin UI and CMS features. We recommend specifying this recipe in your dependencies. - [`silverstripe/installer`](https://packagist.org/packages/silverstripe/installer): Includes `recipe-cms`, and adds a default theme for the front-end of your site. We recommend creating new projects based on this recipe ( - via `composer create-project silverstripe/installer myproject ^5`). + via `composer create-project silverstripe/installer myproject ^6`). When determining whether you are running the latest version of Silverstripe CMS, it is easier to refer to the Recipe version than the individual Module versions, which may not align with Recipe versions. You can use Packagist to find diff --git a/en/02_Developer_Guides/00_Model/10_Versioning.md b/en/02_Developer_Guides/00_Model/10_Versioning.md index f320f42f..cf122f9a 100644 --- a/en/02_Developer_Guides/00_Model/10_Versioning.md +++ b/en/02_Developer_Guides/00_Model/10_Versioning.md @@ -89,16 +89,15 @@ Images and other files are tracked as versioned objects. If a file is referenced This behavior works both for versioned and unversioned objects. -### Grouping versioned `DataObject` records into a `ChangeSet` (aka campaigns) +### Grouping versioned `DataObject` records into a `ChangeSet` Sometimes, multiple pages or records may be related in organic ways that cannot be properly expressed through an ownership relation. There's still value in being able to publish those as a block. For example, your editors may be about to launch a new contest through their website. They've drafted a page to promote the contest, another page with the rules and conditions, a registration page for users to sign up, some promotional images, new sponsor records, etc. All this content needs to become visible simultaneously. -Changes to many objects can be grouped together using the [`ChangeSet`](api:SilverStripe\Versioning\ChangeSet) object. In the CMS, editors can manage `ChangeSet`s through the "Campaign" section (if the `silverstripe/campaign-admin` module is installed). By grouping a series of content changes together as a cohesive unit, content editors can bulk publish an entire body of content all at once, which affords them much more power and control over interdependent content types. +Changes to many objects can be grouped together using the [`ChangeSet`](api:SilverStripe\Versioning\ChangeSet) object. By grouping a series of content changes together as a cohesive unit. This can allow bulk publish an entire body of content all at once, which affords them much more power and control over interdependent content types. Note that there is currently no UI to enable this functionality, so it must be done programmatically. -Records can be added to a changeset in the CMS by using the "Add to campaign" button -that is available on the edit forms of all pages and files. Programmatically, this is done by creating a `ChangeSet` object and invoking its [`addObject(DataObject $record)`](api:SilverStripe\Versioning\ChangeSet::addObject()) method. +Programmatically, this is done by creating a `ChangeSet` object and invoking its [`addObject(DataObject $record)`](api:SilverStripe\Versioning\ChangeSet::addObject()) method. > [!NOTE] > DataObjects can be added to more than one ChangeSet. diff --git a/en/02_Developer_Guides/15_Customising_the_Admin_Interface/04_CMS_Architecture.md b/en/02_Developer_Guides/15_Customising_the_Admin_Interface/04_CMS_Architecture.md index 132ebc59..030c2418 100644 --- a/en/02_Developer_Guides/15_Customising_the_Admin_Interface/04_CMS_Architecture.md +++ b/en/02_Developer_Guides/15_Customising_the_Admin_Interface/04_CMS_Architecture.md @@ -37,14 +37,13 @@ The easiest way to access the pattern library is to view it online. The pattern If you're developing a new React component, running the pattern library locally is a good way to interact with it. -The pattern library is built from the `silverstripe/admin` module, but it also requires `silverstripe/asset-admin`, `silversrtipe/cms` and `silverstripe/campaign-admin`. +The pattern library is built from the `silverstripe/admin` module, but it also requires `silverstripe/asset-admin`, and `silverstripe/cms`. To run the pattern library locally, you'll need a Silverstripe CMS project based on `silverstripe/recipe-cms` and `yarn` installed locally. The pattern library requires the JS source files so you'll need to use the `--prefer-source` flag when installing your dependencies with Composer. ```bash composer install --prefer-source (cd vendor/silverstripe/asset-admin && yarn install) -(cd vendor/silverstripe/campaign-admin && yarn install) (cd vendor/silverstripe/cms && yarn install) cd vendor/silverstripe/admin && yarn install && yarn pattern-lib ``` diff --git a/en/02_Developer_Guides/15_Customising_the_Admin_Interface/index.md b/en/02_Developer_Guides/15_Customising_the_Admin_Interface/index.md index 021f6b9b..0dbdae12 100644 --- a/en/02_Developer_Guides/15_Customising_the_Admin_Interface/index.md +++ b/en/02_Developer_Guides/15_Customising_the_Admin_Interface/index.md @@ -11,7 +11,7 @@ The Admin interface is bundled within the Silverstripe CMS but is most commonly module. The main class for displaying the interface is a specialized [Controller](api:SilverStripe\Control\Controller) called [LeftAndMain](api:SilverStripe\Admin\LeftAndMain), named as it is designed around a left hand navigation and a main edit form. -The user interface logic has a combination of jQuery and [jQuery.entwine](./jquery_entwine/) with with [ReactJS](https://react.dev/). Some admin sections (`AssetAdmin` and `CampaignAdmin`) are powered purely with react components, while others have a combination of both react components and jQuery logic. +The user interface logic has a combination of jQuery and [jQuery.entwine](./jquery_entwine/) with [ReactJS](https://react.dev/). Some admin sections, such as `AssetAdmin`, are powered purely with react components, while others have a combination of both react components and jQuery logic. [CHILDREN] diff --git a/en/08_Changelogs/6.0.0.md b/en/08_Changelogs/6.0.0.md index bf381667..a5db4e83 100644 --- a/en/08_Changelogs/6.0.0.md +++ b/en/08_Changelogs/6.0.0.md @@ -6,6 +6,9 @@ title: 6.0.0 (unreleased) ## Overview +- [Change to commercially supported modules](#changes-to-support) + - [Modules losing commercial support](#modules-losing-support) + - [Campaign admin removed from the CMS](#campaign-admin-removed) - [Features and enhancements](#features-and-enhancements) - [Validation added to DBFields](#dbfield-validation) - [Changes to `sake`, `BuildTask`, CLI interaction in general](#cli-changes) @@ -41,6 +44,62 @@ title: 6.0.0 (unreleased) - [`getSchemaDataDefaults()` now includes attributes](#formfield-schema-data) - [Full list of removed and changed API (by module, alphabetically)](#api-removed-and-changed) +## Change to commercially supported modules {#changes-to-support} + +Some Silverstripe CMS modules are commercially supported. Silverstripe commits to looking after those modules for the duration of the Silverstripe CMS 6 lifecycle. + +Review the list of [Commercially Supported Modules for Silverstripe CMS 6](/project_governance/supported_modules/). + +### Modules losing commercial support {#modules-losing-support} + +Some modules that were commercially supported in Silverstripe CMS 5 are not supported in Silverstripe CMS 6. Some of those modules provide CMS6-compatible versions. Others have been dropped altogether. + +Just because a module is not "commercially supported", doesn't mean that you shouldn't be using it. Community supported modules are maintained on a "best-effort" basis. You should take this into consideration when choosing to install a community supported module in your project. + +Email [community@silverstripe.org](mailto:community@silverstripe.org) if you are keen to maintain some of the modules that are no longer commercially supported. + +|Module|Status| +|[bringyourownideas/silverstripe-composer-update-checker](https://github.com/bringyourownideas/silverstripe-composer-update-checker)|Dropped| +|[bringyourownideas/silverstripe-maintenance](https://github.com/bringyourownideas/silverstripe-maintenance)|Dropped| +|[cwp/agency-extensions](https://github.com/silverstripe/cwp-agency-extensions)|Dropped| +|[cwp/starter-theme](https://github.com/silverstripe/cwp-starter-theme)|Dropped| +|[cwp/watea-theme](https://github.com/silverstripe/cwp-watea-theme)|Dropped| +|[silverstripe/recipe-authoring-tools](https://github.com/silverstripe/silverstripe-recipe-authoring-tools)|Dropped| +|[silverstripe/recipe-blog](https://github.com/silverstripe/silverstripe-recipe-blog)|Dropped| +|[silverstripe/recipe-collaboration](https://github.com/silverstripe/silverstripe-recipe-collaboration)|Dropped| +|[silverstripe/recipe-content-blocks](https://github.com/silverstripe/silverstripe-recipe-content-blocks)|Dropped| +|[silverstripe/recipe-form-building](https://github.com/silverstripe/silverstripe-recipe-form-building)|Dropped| +|[silverstripe/recipe-reporting-tools](https://github.com/silverstripe/silverstripe-recipe-reporting-tools)|Dropped| +|[silverstripe/recipe-services](https://github.com/silverstripe/silverstripe-recipe-services)|Dropped| +|[silverstripe/campaign-admin](https://github.com/silverstripe/silverstripe-campaign-admin)|Dropped| +|[silverstripe/auditor](https://github.com/silverstripe/silverstripe-auditor)|Dropped| +|[silverstripe/blog](https://github.com/silverstripe/silverstripe-blog)|CMS 6 compatible without commercial support| +|[silverstripe/contentreview](https://github.com/silverstripe/silverstripe-contentreview)|Dropped| +|[silverstripe/crontask](https://github.com/silverstripe/silverstripe-crontask)|CMS 6 compatible without commercial support| +|[silverstripe/documentconverter](https://github.com/silverstripe/silverstripe-documentconverter)|Dropped| +|[silverstripe/elemental-bannerblock](https://github.com/silverstripe/silverstripe-elemental-bannerblock)|Dropped| +|[silverstripe/elemental-fileblock](https://github.com/silverstripe/silverstripe-elemental-fileblock)|Dropped| +|[silverstripe/environmentcheck](https://github.com/silverstripe/silverstripe-environmentcheck)|Dropped| +|[silverstripe/externallinks](https://github.com/silverstripe/silverstripe-externallinks)|Combined into [silverstripe/reports](https://github.com/silverstripe/silverstripe-reports)| +|[silverstripe/iframe](https://github.com/silverstripe/silverstripe-iframe)|Dropped| +|[silverstripe/ldap](https://github.com/silverstripe/silverstripe-ldap)|Dropped| +|[silverstripe/registry](https://github.com/silverstripe/silverstripe-registry)|Dropped| +|[silverstripe/restfulserver](https://github.com/silverstripe/silverstripe-restfulserver)|Dropped| +|[silverstripe/security-report](https://github.com/silverstripe/silverstripe-security-report)|Combined into [silverstripe/reports](https://github.com/silverstripe/silverstripe-reports)| +|[silverstripe/sitewidecontent-report](https://github.com/silverstripe/silverstripe-sitewidecontent-report)|Combined into [silverstripe/reports](https://github.com/silverstripe/silverstripe-reports)| +|[silverstripe/subsites](https://github.com/silverstripe/silverstripe-subsites)|CMS 6 compatible without commercial support| +|[silverstripe/versionfeed](https://github.com/silverstripe/silverstripe-versionfeed)|Dropped| +|[silverstripe/webauthn-authenticator](https://github.com/silverstripe/silverstripe-webauthn-authenticator)|Dropped| +|[symbiote/silverstripe-multivaluefield](https://github.com/symbiote/silverstripe-multivaluefield)|Dropped| + +The code in `silverstripe/externallinks`, `silverstripe/security-report`, and `silverstripe/sitewidecontent-report` has been copied into `silverstripe/reports` and will be maintained there going forward. The namespaces for classes in those modules has been updated to `SilverStripe\Reports`. Note that any code that related to `silverstripe/subsite` or `silverstripe/contentreview` integration has been removed. + +CMS 6 compatible versions of `silverstripe/blog`, `silverstripe/subsites`, and `silverstripe/crontask` have been released with CMS 6.0.0, though they are not commercially supported. + +### Campaign admin removed from the CMS {#campaign-admin-removed} + +The `silverstripe/campaign-admin` was a core module that provided a way to publish multiple related records at the same time, but it was very rarely used in practice. It has been removed from the default CMS installation and has had its commercial support removed. Its integration support has been removed from `silverstripe/cms`, `silverstripe/admin`, and `silverstripe/asset-admin`, all of which provided "Add to campaign" UX functionality. This means that it may not be possible to get any sort of campaign admin functionality in CMS 6 even if using a forked version of `silverstripe/campaign-admin`. + ## Features and enhancements ### Validation added to `DBField`s {#dbfield-validation} @@ -812,6 +871,27 @@ Note that the change from `ViewableData` to `ModelData` specifically was made to |`SilverStripe\View\ViewableData_Customised`|[`SilverStripe\Model\ModelDataCustomised`](api:SilverStripe\Model\ModelDataCustomised)| |`SilverStripe\View\ViewableData_Debugger`|[`SilverStripe\Model\ModelDataDebugger`](api:SilverStripe\Model\ModelDataDebugger)| +The following classes have been changed when code was moved to the `silverstripe/reports` module from some of the modules that lost commercial support: + +|Old FQCN|New FQCN| +|---|---| +|`SilverStripe\SecurityReport\Forms\GridFieldExportReportButton`|[`SilverStripe\Reports\SecurityReport\Forms\GridFieldExportReportButton`](api:SilverStripe\Reports\SecurityReport\Forms\GridFieldExportReportButton)| +|`SilverStripe\SecurityReport\Forms\GridFieldPrintReportButton`|[`SilverStripe\Reports\SecurityReport\Forms\GridFieldPrintReportButton`](api:SilverStripe\Reports\SecurityReport\Forms\GridFieldPrintReportButton)| +|`SilverStripe\SecurityReport\MemberReportExtension`|[`SilverStripe\Reports\SecurityReport\MemberReportExtension`](api:SilverStripe\Reports\SecurityReport\MemberReportExtension)| +|`SilverStripe\SecurityReport\UserSecurityReport`|[`SilverStripe\Reports\SecurityReport\UserSecurityReport`](api:SilverStripe\Reports\SecurityReport\UserSecurityReport)| +|`SilverStripe\SiteWideContentReport\Form\GridFieldBasicContentReport`|[`SilverStripe\Reports\SiteWideContentReport\Form\GridFieldBasicContentReport`](api:SilverStripe\Reports\SiteWideContentReport\Form\GridFieldBasicContentReport)| +|`SilverStripe\SiteWideContentReport\Model\SitewideContentTaxonomy`|[`SilverStripe\Reports\SiteWideContentReport\Model\SitewideContentTaxonomy`](api:SilverStripe\Reports\SiteWideContentReport\Model\SitewideContentTaxonomy)| +|`SilverStripe\SiteWideContentReport\SitewideContentReport`|[`SilverStripe\Reports\SiteWideContentReport\SitewideContentReport`](api:SilverStripe\Reports\SiteWideContentReport\SitewideContentReport)| +|`SilverStripe\ExternalLinks\Controllers\CMSExternalLinksController`|[`SilverStripe\Reports\ExternalLinks\Controllers\CMSExternalLinksController`](api:SilverStripe\Reports\ExternalLinks\Controllers\CMSExternalLinksController)| +|`SilverStripe\ExternalLinks\Jobs\CheckExternalLinksJob`|[`SilverStripe\Reports\ExternalLinks\Jobs\CheckExternalLinksJob`](api:SilverStripe\Reports\ExternalLinks\Jobs\CheckExternalLinksJob)| +|`SilverStripe\ExternalLinks\Model\BrokenExternalLink`|[`SilverStripe\Reports\ExternalLinks\Model\BrokenExternalLink`](api:SilverStripe\Reports\ExternalLinks\Model\BrokenExternalLink)| +|`SilverStripe\ExternalLinks\Model\BrokenExternalPageTrack`|[`SilverStripe\Reports\ExternalLinks\Model\BrokenExternalPageTrack`](api:SilverStripe\Reports\ExternalLinks\Model\BrokenExternalPageTrack)| +|`SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus`|[`SilverStripe\Reports\ExternalLinks\Model\BrokenExternalPageTrackStatus`](api:SilverStripe\Reports\ExternalLinks\Model\BrokenExternalPageTrackStatus)| +|`SilverStripe\ExternalLinks\BrokenExternalLinksReport`|[`SilverStripe\Reports\ExternalLinks\Reports\BrokenExternalLinksReport`](api:SilverStripe\Reports\ExternalLinks\Reports\BrokenExternalLinksReport)| +|`SilverStripe\ExternalLinks\Tasks\CheckExternalLinksTask`|[`SilverStripe\Reports\ExternalLinks\Tasks\CheckExternalLinksTask`](api:SilverStripe\Reports\ExternalLinks\Tasks\CheckExternalLinksTask)| +|`SilverStripe\ExternalLinks\Tasks\CurlLinkChecker`|[`SilverStripe\Reports\ExternalLinks\Tasks\CurlLinkChecker`](api:SilverStripe\Reports\ExternalLinks\Tasks\CurlLinkChecker)| +|`SilverStripe\ExternalLinks\Tasks\LinkChecker`|[`SilverStripe\Reports\ExternalLinks\Tasks\LinkChecker`](api:SilverStripe\Reports\ExternalLinks\Tasks\LinkChecker)| + ### GraphQL removed from the CMS {#graphql-removed} > [!NOTE] diff --git a/en/10_Contributing/05_Coding_Conventions/03_CSS_Coding_Conventions.md b/en/10_Contributing/05_Coding_Conventions/03_CSS_Coding_Conventions.md index 170110cb..cbb008b3 100644 --- a/en/10_Contributing/05_Coding_Conventions/03_CSS_Coding_Conventions.md +++ b/en/10_Contributing/05_Coding_Conventions/03_CSS_Coding_Conventions.md @@ -49,7 +49,7 @@ via `yarn lint` (see [Build Tooling](/contributing/build_tooling)). (e.g. Button, Accordion). Presentation of these components should not rely on the markup context they're embedded in. - The `client/src/containers` folder should contain use-case dependent styles only - (e.g. CampaignAdmin). Styles in here should be kept at a minimum. + (e.g. AssetAdmin). Styles in here should be kept at a minimum. - The file name of styles nested within components and containers should inherit their respective folder name for easy reference. For example, a `components/FormAction` component has styles named `FormAction.scss`). diff --git a/en/10_Contributing/09_Release_Process.md b/en/10_Contributing/09_Release_Process.md index 81fbc5b7..a781f648 100644 --- a/en/10_Contributing/09_Release_Process.md +++ b/en/10_Contributing/09_Release_Process.md @@ -36,10 +36,6 @@ reviewing the release milestone on GitHub. Releases will be announced on the ["releases" forum category](https://forum.silverstripe.org/c/releases). Significant releases will also be published via the [`silverstripe.org` blog](https://silverstripe.org/blog). -You can also keep track of new releases through the CMS UI -by installing the [maintenance module](https://github.com/bringyourownideas/silverstripe-maintenance), -or using the [composer outdated](https://getcomposer.org/doc/03-cli.md#outdated) command in your project. - Additionally, you can [keep track of issues](issues_and_bugs#identifying-issues) (both open and closed) across all modules involved in a recipe release. diff --git a/en/12_Project_Governance/07_Supported_Modules.md b/en/12_Project_Governance/07_Supported_Modules.md index 00c575da..33fd4741 100644 --- a/en/12_Project_Governance/07_Supported_Modules.md +++ b/en/12_Project_Governance/07_Supported_Modules.md @@ -30,7 +30,6 @@ Core Module | Supported major release line [silverstripe/assets](https://packagist.org/packages/silverstripe/assets) | 2 [silverstripe/cms](https://packagist.org/packages/silverstripe/cms) | 5 [silverstripe/config](https://packagist.org/packages/silverstripe/config) | 2 -[silverstripe/campaign-admin](https://packagist.org/packages/silverstripe/campaign-admin) | 2 [silverstripe/errorpage](https://packagist.org/packages/silverstripe/errorpage) | 2 [silverstripe/framework](https://packagist.org/packages/silverstripe/framework) | 5 [silverstripe/graphql](https://packagist.org/packages/silverstripe/graphql) | 5 @@ -54,59 +53,28 @@ These modules extend the core Silverstripe CMS functionality. Silverstripe CMS p Supported PHP Module | Supported versions -- | -- -[bringyourownideas/silverstripe-composer-update-checker](https://packagist.org/packages/bringyourownideas/silverstripe-composer-update-checker) | 4 -[bringyourownideas/silverstripe-maintenance](https://packagist.org/packages/bringyourownideas/silverstripe-maintenance) | 3 [colymba/gridfield-bulk-editing-tools](https://packagist.org/packages/colymba/gridfield-bulk-editing-tools) | 4 -[cwp/agency-extensions](https://packagist.org/packages/cwp/agency-extensions) | 3 -[cwp/starter-theme](https://packagist.org/packages/cwp/starter-theme) | 4 -[cwp/watea-theme](https://packagist.org/packages/cwp/watea-theme) | 4 [dnadesign/silverstripe-elemental](https://packagist.org/packages/dnadesign/silverstripe-elemental) | 5 [dnadesign/silverstripe-elemental-userforms](https://packagist.org/packages/dnadesign/silverstripe-elemental-userforms) | 4 [silverstripe-themes/simple](https://packagist.org/packages/silverstripe-themes/simple) | 3 -[silverstripe/auditor](https://packagist.org/packages/silverstripe/auditor) | 3 -[silverstripe/blog](https://packagist.org/packages/silverstripe/blog) | 4 -[silverstripe/contentreview](https://packagist.org/packages/silverstripe/contentreview) | 5 -[silverstripe/crontask](https://packagist.org/packages/silverstripe/crontask) | 3 -[silverstripe/documentconverter](https://packagist.org/packages/silverstripe/documentconverter) | 3 [silverstripe/dynamodb](https://packagist.org/packages/silverstripe/dynamodb) | 5 -[silverstripe/elemental-bannerblock](https://packagist.org/packages/silverstripe/elemental-bannerblock) | 3 -[silverstripe/elemental-fileblock](https://packagist.org/packages/silverstripe/elemental-fileblock) | 3 -[silverstripe/environmentcheck](https://packagist.org/packages/silverstripe/environmentcheck) | 3 -[silverstripe/externallinks](https://packagist.org/packages/silverstripe/externallinks) | 3 [silverstripe/gridfieldqueuedexport](https://packagist.org/packages/silverstripe/gridfieldqueuedexport) | 3 [silverstripe/hybridsessions](https://packagist.org/packages/silverstripe/hybridsessions) | 3 -[silverstripe/iframe](https://packagist.org/packages/silverstripe/iframe) | 3 -[silverstripe/ldap](https://packagist.org/packages/silverstripe/ldap) | 2 [silverstripe/linkfield](https://packagist.org/packages/silverstripe/linkfield) | 4 [silverstripe/lumberjack](https://packagist.org/packages/silverstripe/lumberjack) | 3 [silverstripe/mfa](https://packagist.org/packages/silverstripe/mfa) | 5 [silverstripe/realme](https://packagist.org/packages/silverstripe/realme) | 5 -[silverstripe/recipe-authoring-tools](https://packagist.org/packages/silverstripe/recipe-authoring-tools) | 2 -[silverstripe/recipe-blog](https://packagist.org/packages/silverstripe/recipe-blog) | 2 -[silverstripe/recipe-collaboration](https://packagist.org/packages/silverstripe/recipe-collaboration) | 2 -[silverstripe/recipe-content-blocks](https://packagist.org/packages/silverstripe/recipe-content-blocks) | 3 -[silverstripe/recipe-form-building](https://packagist.org/packages/silverstripe/recipe-form-building) | 2 -[silverstripe/recipe-reporting-tools](https://packagist.org/packages/silverstripe/recipe-reporting-tools) | 2 -[silverstripe/recipe-services](https://packagist.org/packages/silverstripe/recipe-services) | 2 -[silverstripe/registry](https://packagist.org/packages/silverstripe/registry) | 3 -[silverstripe/restfulserver](https://packagist.org/packages/silverstripe/restfulserver) | 3 -[silverstripe/securityreport](https://packagist.org/packages/silverstripe/securityreport) | 3 [silverstripe/segment-field](https://packagist.org/packages/silverstripe/segment-field) | 3 [silverstripe/sharedraftcontent](https://packagist.org/packages/silverstripe/sharedraftcontent) | 3 -[silverstripe/sitewidecontent-report](https://packagist.org/packages/silverstripe/sitewidecontent-report) | 4 [silverstripe/spamprotection](https://packagist.org/packages/silverstripe/spamprotection) | 4 [silverstripe/staticpublishqueue](https://packagist.org/packages/silverstripe/staticpublishqueue) | 6 -[silverstripe/subsites](https://packagist.org/packages/silverstripe/subsites) | 3 [silverstripe/tagfield](https://packagist.org/packages/silverstripe/tagfield) | 3 [silverstripe/taxonomy](https://packagist.org/packages/silverstripe/taxonomy) | 3 [silverstripe/textextraction](https://packagist.org/packages/silverstripe/textextraction) | 4 [silverstripe/totp-authenticator](https://packagist.org/packages/silverstripe/totp-authenticator) | 5 [silverstripe/userforms](https://packagist.org/packages/silverstripe/userforms) | 6 -[silverstripe/versionfeed](https://packagist.org/packages/silverstripe/versionfeed) | 3 -[silverstripe/webauthn-authenticator](https://packagist.org/packages/silverstripe/webauthn-authenticator) | 5 [symbiote/silverstripe-advancedworkflow](https://packagist.org/packages/symbiote/silverstripe-advancedworkflow) | 6 [symbiote/silverstripe-gridfieldextensions](https://packagist.org/packages/symbiote/silverstripe-gridfieldextensions) | 4 -[symbiote/silverstripe-multivaluefield](https://packagist.org/packages/symbiote/silverstripe-multivaluefield) | 6 [symbiote/silverstripe-queuedjobs](https://packagist.org/packages/symbiote/silverstripe-queuedjobs) | 5 [tractorcow/silverstripe-fluent](https://packagist.org/packages/tractorcow/silverstripe-fluent) | 7