Version 5 supported

Definition of public API

The following is a definition of what we consider to be "public API". Public API is protected by semantic versioning.

New public API will not be introduced in patches, but can be introduced in minor and major releases.

Existing public API will not be removed or altered in patches or minor releases, but can be removed or altered in major releases.

Explicitly included

These are explicitly included in our definition of public API (unless excluded below):

  • global functions, constants, and variables
  • namespaces, classes, interfaces, enums, and traits
  • public and protected scope (including methods, properties and constants)
  • signatures of functions/methods that are considered public API

    • including typehints, parameters, and parameter names
  • private static class property declarations (considered to be configuration variables)
  • configuration default values (in YAML files and in private statics)
  • YAML configuration file and fragment names (see yml configuration syntax)
  • extension hooks (e.g. $this->extend('someExtensionHook', $someVariable);)

Explicitly excluded

These are explicitly not public API:

  • private scope (with the exception for private static properties which aren't annotated with @internal)
  • all entities marked as @internal
  • YAML configuration in recipes
  • HTML, CSS, JavaScript (within reason), SQL, and anything else that is not PHP

Implicit or undefined scenarios

Other entities might be considered to be included or excluded from the public API on case-by-case basis based on how likely it is to cause problems during an upgrade.

API from third party dependencies may implicitly be incorporated into our definition of public API if:

  • they are defined as a parameter type for a supported method
  • they are defined as a return type for a supported method
  • they are extended by a Silverstripe CMS class.

When defining a return type or a parameter type, it is preferable to use a more generic interface rather than a specific class. Third party dependencies that are used for internal purposes and are not explicitly exposed via the Silverstripe CMS public API are not covered by semantic versioning and maybe substituted without notice.