Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
69b632f
Update engine OAS file in docs with updated description for Engine ge…
alhambrav Jun 4, 2026
0b27309
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jun 8, 2026
5d18608
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jun 15, 2026
69b0360
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jun 19, 2026
f5a3c47
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jun 19, 2026
08a460c
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jun 26, 2026
43da1bc
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jun 26, 2026
6a855aa
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jul 15, 2026
7bb226e
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Jul 21, 2026
41664bb
Merge branch 'master' of https://github.com/craftercms/docs
alhambrav Aug 6, 2026
73604c1
Merge branch 'master' of https://github.com/craftersoftware/docs
alhambrav Aug 18, 2026
1890976
Merge branch 'master' of https://github.com/craftersoftware/docs
alhambrav Sep 1, 2026
cc56b81
Merge branch 'master' of https://github.com/craftersoftware/docs
alhambrav Sep 2, 2026
9482f7d
Merge branch 'master' of https://github.com/craftersoftware/docs
alhambrav Sep 4, 2026
5e88d73
Add release notes for 4.6.0
alhambrav Sep 11, 2026
9f2f7cb
Updates based on cr review
alhambrav Sep 11, 2026
1dc9884
Add note for engine REST scripts no longer produces XML
alhambrav Sep 11, 2026
0554efe
Update meta-data on breaking changes page
alhambrav Sep 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
# The short X.Y version.
version = u'current'
# The full version, including alpha/beta/rc tags.
release = u'4.5.2'
release = u'4.6.0'


# -- General configuration ---------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion source/contribute/acknowledgements.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:is-up-to-date: True
:last-updated: 4.5.2
:last-updated: 4.6.0

.. meta::
:description lang=en:
Expand Down
6 changes: 3 additions & 3 deletions source/index.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:is-up-to-date: True
:last-updated: 4.5.2
:last-updated: 4.6.0

########################
CrafterCMS Documentation
Expand Down Expand Up @@ -75,8 +75,8 @@ CrafterCMS is used by three main constituencies:
=========================
Latest CrafterCMS Release
=========================
The latest community version of CrafterCMS is `4.5.2 <https://craftercms.com/download>`__ and the latest
enterprise version is ``4.5.2E``.
The latest community version of CrafterCMS is `4.6.0 <https://craftercms.com/download>`__ and the latest
enterprise version is ``4.6.0E``.

Start exploring the latest version of CrafterCMS in a few minutes using Docker by simply running the following command:

Expand Down
4 changes: 2 additions & 2 deletions source/reference/api/search.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:is-up-to-date: True
:last-updated: 4.1.6
:last-updated: 4.6.0

.. index:: Search, Query, OpenSearch, GraphQL

Expand Down Expand Up @@ -377,7 +377,7 @@ Here's how the query will look like for the above image of a multi-index query f
}
'

|
Note that the Site Search REST API ``POST /api/1/site/search/search.json`` rejects request bodies that contain restricted JSON object keys, including keys in nested objects and objects contained in arrays, with an HTTP 400 response. See :ref:`engine-search-restricted-key-patterns` for more information.

See :base_url:`here <_static/api/engine.html#tag/search/operation/search>` for more information on the Crafter Engine API ``search``.

Expand Down
67 changes: 66 additions & 1 deletion source/reference/modules/engine.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:is-up-to-date: True
:last-updated: 4.5.0
:last-updated: 4.6.0

.. meta::
:description: Crafter Engine is the CrafterCMS content delivery module — serving REST, GraphQL, and FreeMarker-rendered content for web and mobile apps.
Expand Down Expand Up @@ -729,6 +729,8 @@ In this section we will highlight some of the more commonly used properties in t
- Allows you to set the content root folder
* - :ref:`engine-turn-off-show-error`
- Allows you to turn off showing errors in line with content
* - :ref:`engine-site-allowed-descriptor-paths`
- Allows you to configure allowed descriptor patterns used by ``SiteItemService``
* - :ref:`engine-http-response-headers`
- Allows you to add headers to responses, such as caching policies
* - :ref:`engine-url-rewrite-configuration`
Expand All @@ -755,6 +757,8 @@ In this section we will highlight some of the more commonly used properties in t
- Allows you to configure the search client connection timeout, socket timeout and number of threads
* - :ref:`engine-search-default-filters`
- Allows you to enable/disable default filters for search queries
* - :ref:`engine-search-restricted-key-patterns`
- Allows you to configure JSON keys that are not allowed in Site Search API request bodies
* - :ref:`engine-search-connection-pool`
- Allows you to configure the search connection pool max total connections and max connections per route
* - :ref:`engine-content-length-headers`
Expand Down Expand Up @@ -822,6 +826,38 @@ Templates in CrafterCMS will display the errors in line with content as they enc

|

|hr|

.. _engine-site-allowed-descriptor-paths:

""""""""""""""""""""""""
Allowed Descriptor Paths
""""""""""""""""""""""""
.. version_tag::
:label: Since
:version: 4.6.0

Crafter Engine limits which site URLs ``SiteItemService`` can return as content items. This is set with a
comma-separated list of regular expressions in the following property (default: ``/site/.*``):

.. code-block:: properties
:caption: *CRAFTER_HOME/bin/apache-tomcat/shared/classes/crafter/engine/extension/server-config.properties*

# List of regular expressions for the paths that are allowed to be used as descriptor paths (the SiteItemService will only return items from these paths)
crafter.engine.site.default.descriptors.allowed.paths=/site/.*

``SiteItemService.getSiteItem(...)`` returns an item only when the item URL matches one of the patterns.
``SiteItemService.getSiteTree(...)`` includes only matching items in the tree.

``SiteItemService.exists(path)`` is not limited by these patterns. It only checks whether the path is present in
the site content store. Engine configuration lookups use ``exists()`` and ``getRawContent()`` rather than
``getSiteItem()``, so configuration files outside the allowed descriptor paths can still be detected and read.

If Groovy, Freemarker, or other Engine code calls ``getSiteItem`` or ``getSiteTree`` for paths outside the allowed
patterns, those calls receive ``null`` or an empty tree. To include extra descriptor locations, add more regexes to
the property.


|hr|

.. _engine-http-response-headers:
Expand Down Expand Up @@ -1665,6 +1701,35 @@ To enable/disable the default filters for all queries, set the following:

|hr|

.. _engine-search-restricted-key-patterns:

"""""""""""""""""""""""""""""""
Search Restricted Key Patterns
"""""""""""""""""""""""""""""""
.. version_tag::
:label: Since
:version: 4.6.0

The Site Search REST API (``POST /api/1/site/search/search.json``, and the legacy
``POST /api/1/site/elasticsearch/search.json``) rejects request bodies that contain restricted JSON object keys.

Configure the restricted key patterns used by the Site Search REST API, using the ``crafter.engine.search.restricted.key.patterns`` property. The value is a comma-separated list of Java regular expressions with a default value of ``script``:

.. code-block:: properties
:caption: *CRAFTER_HOME/bin/apache-tomcat/shared/classes/crafter/engine/extension/server-config.properties*
:linenos:

# Comma-separated list of regex patterns for JSON keys that are not allowed in search requests
crafter.engine.search.restricted.key.patterns=script


The Site Search API checks the entire JSON payload, including nested objects and arrays, and evaluates object keys.
If there's a match, it returns a HTTP 400 with a message such as ``Search request must not contain a 'script' key``.

|

|hr|

.. _engine-content-length-headers:

""""""""""""""""""""""
Expand Down
53 changes: 53 additions & 0 deletions source/release-notes/4-6-0.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
.. index:: CrafterCMS version 4.6.0 Release Notes

-----------------------------------
CrafterCMS Version 4.6.0 and 4.6.0E
-----------------------------------

Released *September TBD, 2026*
Comment thread
alhambrav marked this conversation as resolved.

.. important::

Please see :ref:`Breaking changes <breaking-changes-4-x>` for breaking changes and other
things to consider before upgrading

For instructions on how to update your CrafterCMS install, please see :ref:`upgrading-craftercms`

^^^^^^^^^^^^
Enhancements
^^^^^^^^^^^^
* `Improved publishing <https://github.com/craftersoftware/craftercms/issues/8793>`__

Publishing soft dependencies are limited to items the current user is allowed to publish. Items the user cannot publish are omitted from the soft dependency list when requesting to publish.

* ``SiteItemService`` now returns items only for URLs that match the configured descriptor paths in ``crafter.engine.site.default.descriptors.allowed.paths``.

See :ref:`engine-site-allowed-descriptor-paths` for more information.

* The Site Search API now rejects restricted JSON keys in the request body.

See :ref:`engine-search-restricted-key-patterns` for more information on configuring restricted key patterns.

^^^^^^^^^
Bug Fixes
^^^^^^^^^
* `Fixed issue with Groovy based REST APIs defaulting to XML even when JSON extension is present <https://github.com/craftersoftware/craftercms/issues/9015>`__

See :ref:`breaking-changes-in-craftercms-4-6-0` for some important changes to Engine REST scripts.

^^^^^^^^^^^^^^^^^^
Dependency Updates
^^^^^^^^^^^^^^^^^^
* Noteworthy dependency updates:

- Spring Framework to version 7.0.9
- Spring Security to version 7.1.1
- Spring Boot to version 4.1.1
- Mybatis-Spring to version 4.1.0

For a complete list of community tickets, please visit: `GitHub 4.6.0 <https://github.com/orgs/craftersoftware/projects/63/views/1?filterQuery=>`_

For information on upgrading 3.1.x sites, see :ref:`here <compatibility-with-3.1.x>`

|hr|

25 changes: 24 additions & 1 deletion source/release-notes/4-x-breaking-changes.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:is-up-to-date: True
:last-updated: 4.5.1
:last-updated: 4.6.0
:orphan:

.. _breaking-changes-4-x:
Expand All @@ -23,6 +23,29 @@ before upgrading. Please review the following and apply changes as required:

|hr|

.. _breaking-changes-in-craftercms-4-6-0:

------------------------------------
Breaking Changes in CrafterCMS 4.6.0
------------------------------------
* Groovy, Freemarker, or other Engine code that called ``siteItemService.getSiteItem(url)`` or ``getSiteTree(...)`` for paths outside the allowed descriptor patterns now receives null or an empty tree. To include extra descriptor locations, extend:

``crafter.engine.site.default.descriptors.allowed.paths=/site/.*``

See :ref:`engine-site-allowed-descriptor-paths` for more information.

* Use ``siteItemService.exists(path)`` when you only need to know if a path exists. That check is not limited by the allowed-path patterns.

* Search clients that send a script key (or any key matching ``crafter.engine.search.restricted.key.patterns``) in the JSON body will get 400 Bad Request.

See :ref:`engine-search-restricted-key-patterns` for more information

* Users without ``Publish`` permission on a related item will no longer see that item in the publish soft-dependency list.

* Engine REST Scripts No Longer Produce XML.

Clients that request XML via the ``Accept: application/xml`` header or a ``.xml`` URL will receive ``HTTP 406 Not Acceptable``. Update those clients to request JSON (``Accept: application/json`` or a ``.json`` URL) and parse JSON instead of XML.

.. _breaking-changes-in-craftercms-4-5-1:

------------------------------------
Expand Down
3 changes: 2 additions & 1 deletion source/release-notes/index.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:is-up-to-date: True
:last-updated: 4.5.2
:last-updated: 4.6.0

.. meta::
:description lang=en:
Expand All @@ -15,6 +15,7 @@ version release's release notes page :ref:`below <other-release-notes>`

.. note:: CrafterCMS requires Java 21

.. include:: /release-notes/4-6-0.rst
.. include:: /release-notes/4-5-2.rst
.. include:: /release-notes/4-5-1.rst
.. include:: /release-notes/4-5-0.rst
Expand Down
11 changes: 8 additions & 3 deletions source/support.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:is-up-to-date: True
:last-updated: 4.5.2
:last-updated: 4.6.0

.. meta::
:description lang=en:
Expand All @@ -25,9 +25,14 @@ What's Supported?
- Commercial Support
- Latest

* - `4.5 <https://craftercms.com/download>`__
- January 23, 2026
* - `4.6 <https://craftercms.com/download>`__
- September TBD, 2026
- :green:`Active`
- :green:`Active`
- 4.6.0 (September TBD, 2026)
* - 4.5
- January 23, 2026
- :maroon:`Ended on September TBD, 2026`
- :green:`Active`
- 4.5.2 (August 27, 2026)
* - 4.4
Expand Down