diff --git a/docs/admin-guide/add-site.md b/docs/admin-guide/add-site.md new file mode 100644 index 000000000..0fd93872d --- /dev/null +++ b/docs/admin-guide/add-site.md @@ -0,0 +1,73 @@ +--- +myst: + html_meta: + "description": "How to add a Plone site to an existing Zope instance" + "property=og:description": "How to add a Plone site to an existing Zope instance" + "property=og:title": "Add a Plone site" + "keywords": "Plone 6, create, add, factory, distributions" +--- + +(add-a-plone-site-label)= + +# Add a Plone site + +This section explains how to add a Plone site to an existing Zope instance. +It assumes that you have already {doc}`installed ` and started Plone. + +Some installation methods create a Plone site for you already. +Follow these instructions if you used an installation method that did not do this, or if you need a second Plone site in the same instance for some reason. + +```{versionadded} Plone 6.1 +The user interface for creating a new Plone site was changed in Plone 6.1. +You can access it the same way in Plone 6.0, but the appearance and options are different. +``` + +Visit the Plone backend in a web browser. +Usually it is running at http://localhost:8080/. + +The launch screen prompts you to choose one of the available {term}`distributions` to create a new site. +You can read {doc}`/conceptual-guides/choose-user-interface` to help inform your choice between Volto and Classic UI. + +````{card} +```{image} /backend/upgrading/version-specific-migration/images/distribution-chooser.png +:alt: Launch screen for choosing a distribution +:target: /_images/distribution-chooser.png +``` ++++ +_Launch screen for choosing a distribution_ +```` + +Hover over your choice and click the {guilabel}`Create` button. + +Now complete the form with initial configuration for your site. +You can configure the following settings. + +Path Identifier +: The ID of the site. + This ends up as part of the URL unless hidden by an upstream web server. + +Title +: The name of the site in the HTML `title` element. + This will be shown as part of the title of the browser tab on each page. + +Site Description +: A brief description that will be served in an HTML `meta` tag. + +Site Logo +: Upload an image as the main site logo. + +Language +: The main language of the site. + +Timezone +: The default timezone setting of the portal. + +Finally, click the {guilabel}`Submit` button. + +Have fun with your new Plone site! + +```{important} +The launch screen for adding a site is hosted by the Plone backend server. +Regardless of the frontend you select, you will be redirected to the backend's user interface after you create the site. +If you select the Volto frontend, you can switch to it by changing the port number in the URL, usually `3000`, and visiting it at http://localhost:3000, for example. +``` diff --git a/docs/admin-guide/index.md b/docs/admin-guide/index.md index 9ac48e4ed..cf15440e2 100644 --- a/docs/admin-guide/index.md +++ b/docs/admin-guide/index.md @@ -29,6 +29,7 @@ install-pip :maxdepth: 1 run-plone +add-site configure-zope add-ons override-core diff --git a/docs/backend/upgrading/version-specific-migration/images/distribution-chooser.png b/docs/backend/upgrading/version-specific-migration/images/distribution-chooser.png new file mode 100644 index 000000000..afe617227 Binary files /dev/null and b/docs/backend/upgrading/version-specific-migration/images/distribution-chooser.png differ diff --git a/docs/backend/upgrading/version-specific-migration/upgrade-to-61.md b/docs/backend/upgrading/version-specific-migration/upgrade-to-61.md index d670b719a..eae0f196b 100644 --- a/docs/backend/upgrading/version-specific-migration/upgrade-to-61.md +++ b/docs/backend/upgrading/version-specific-migration/upgrade-to-61.md @@ -136,3 +136,44 @@ If you have an existing Plone 5.2 or 6.0 site and you migrate to 6.1, then migra - If the `plone.app.discussion` Python package is _not_ in your setup, but the site has existing comments (discussions), then the migration code stops with an error. Apparently you _were_ using comments in your site. Add the `plone.app.discussion` package to your dependencies, and run the migration again. + + +## Distributions + +Plone 6.1 introduces the concept of a Plone {term}`distribution`. +A Plone distribution is a Python package that defines specific features, themes, add-ons, and configurations that get activated when creating a Plone site. +Now it is available in core Plone as the recommended way for {doc}`creating a new Plone site `. + +```{seealso} +For more information about distribution concepts, see {doc}`/conceptual-guides/distributions`. +``` + +Distributions are optional. +If your project only uses the `Products.CMFPlone` Python package, you can still create a Plone site in the old way. +Consider, however, that doing so you will have the following differences when compared to using distributions. + +- The configuration form is simpler and shorter. +- The created site has no content, and therefore no {guilabel}`News` or {guilabel}`Events` folders. +- You must activate add-ons through the {guilabel}`Add-ons` control panel. + +There are a few things you should consider when upgrading a project to, or making an add-on compatible with, Plone 6.1. + +- In general, you don't need to change anything. + Your existing site will keep working. + But adding a new site may change in the ways described earlier. +- Do you want to use the `Products.CMFPlone` package (no distributions), either `plone.volto` or `plone.classicui` (one distribution), or `Plone` (two distributions)? +- If your site uses Volto for the frontend, you will already have `plone.volto` as a dependency. + This can stay the same. +- If your site depends on the `Products.CMFPlone` package without the `Plone` or `plone.volto` packages, then the frontend is Classic UI. + This can stay the same, but you may want to depend on `plone.classicui`. + With that package you can still create a new site and have the same content as before. +- If your site uses the `Plone` package, you will have the two new distributions available. + This is fine. + If you know you only need `plone.volto` or only need `plone.classicui`, you can switch to only one or the other. + You can also limit the options for selecting a distribution by setting the environment variable `ALLOWED_DISTRIBUTIONS` with fewer options. + Set `ALLOWED_DISTRIBUTIONS=default` for the distribution targeting the Volto frontend (`plone.volto`). + Set `ALLOWED_DISTRIBUTIONS=classic` for the distribution with the Classic UI frontend (`plone.classicui`). +- If you switch from `Plone` to `plone.volto` or `plone.classicui`, you might want to install extra core add-ons, for example `plone.app.upgrade` or `plone.app.caching`. +- If your add-on is only for Volto, you might want to add `plone.volto` as a dependency. +- If your add-on is only for Classic UI, you might want to add `plone.classicui` as a dependency. + Note though that `plone.classicui` is not available for Plone 6.0. diff --git a/docs/conceptual-guides/distributions.md b/docs/conceptual-guides/distributions.md new file mode 100644 index 000000000..ed1d6d76f --- /dev/null +++ b/docs/conceptual-guides/distributions.md @@ -0,0 +1,89 @@ +--- +myst: + html_meta: + "description": "A Plone distribution is a pre-packaged version of Plone that includes specific features, themes, modules, and configurations." + "property=og:description": "A Plone distribution is a pre-packaged version of Plone that includes specific features, themes, modules, and configurations." + "property=og:title": "Plone distributions" + "keywords": "Plone 6, distribution, plone.distribution" +--- + +(plone-distributions-label)= + +# Plone distributions + +```{versionadded} Plone 6.1 +``` + +A Plone {term}`distribution` is a pre-packaged version of Plone that includes specific features, themes, modules, and configurations. +It is a convenient way to get a specific type of website up and running quickly, as the distribution includes everything needed to run that type of site. + +```{seealso} +To create your own distribution, see {doc}`/developer-guide/create-a-distribution`. +``` + + +## Built-in distributions + +Plone comes with two built-in distributions, which correspond to the two Plone user interfaces. + +[`plone.volto`](https://github.com/plone/plone.volto) +: Create a Plone site with the Volto frontend. + +[`plone.classicui`](https://github.com/plone/plone.classicui) +: Create a Plone site with the Classic UI frontend. + + +## Third-party distributions + +You can create your own distributions to suit your needs. + +```{seealso} +For a how-to guide, see {doc}`/developer-guide/create-a-distribution`. +``` + +For example, a Plone consulting agency can create a distribution demonstrating its favorite setup for Plone. +This would contain the add-ons that they usually add in each project, including example content. +With this, the agency can create a fully configured Plone site filled with content for a potential client. + +Alternatively, an agency or implementer can create a distribution for specific project. +This could create a site with all add-ons activated and configured for this project, including example content, and optionally users and groups. +During the development phase of a new project, all developers would use this to create a fresh site locally so that everyone has the same configuration and content. + +Custom Plone distributions can be distributions for use by others. +Examples of third-party Plone distributions include: + +- [SENAITE](https://www.senaite.com) +- [Quaive](https://quaive.com/) +- [Portal Modelo](https://www.interlegis.leg.br/produtos-servicos/portal-modelo/) +- [Portal PadrĂ£o](https://identidade-digital-de-governo-plone.readthedocs.io/en/latest/) + + +## Related packages + +The implementation of distributions in the Plone codebase is found in the following Python packages. + +- [`plone.distribution`](https://github.com/plone/plone.distribution) provides the framework for defining distributions. +- [`plone.exportimport`](https://github.com/plone/plone.exportimport) imports and exports content, users, and other objects between Plone sites. + `plone.distribution` uses it. +- [`plone.volto`](https://github.com/plone/plone.volto) is the distribution to create a Plone site with the Volto frontend. +- [`plone.classicui`](https://github.com/plone/plone.classicui) is the distribution to create a Plone site with the Classic UI frontend. + +```{note} +For Plone 7, the [Plone roadmap](https://plone.org/why-plone/roadmap) guides development toward a clearer separation between the Classic UI frontend and the core `Products.CMFPlone` backend. +This means that in Plone 7, `Products.CMFPlone` will have less code and pull in fewer dependencies, whereas `plone.classicui` may have more code and pull in more dependencies. +This is the direction in which the backend is heading, and the introduction of the `plone.classicui` distribution package is an important step along this path. +``` + +## Comparison with other CMSs + +Drupal +: Drupal has distributions for blogs, e-commerce sites, and intranet portals. + +WordPress +: WordPress has a similar concept in the form of "WordPress Multisite," which allows users to run multiple websites from a single installation of WordPress. + +Joomla +: Joomla has a similar concept in the form of "Joomla Templates," which are pre-designed templates for Joomla websites. + +TYPO3 +: TYPO3 has a similar concept in the form of "TYPO3 Distributions," which are pre-configured installations of TYPO3 for specific types of websites. diff --git a/docs/conceptual-guides/index.md b/docs/conceptual-guides/index.md index de6081f2e..bab21a65f 100644 --- a/docs/conceptual-guides/index.md +++ b/docs/conceptual-guides/index.md @@ -16,6 +16,7 @@ This part of the documentation provides explanation of concepts to deepen and br :maxdepth: 2 choose-user-interface +distributions package-management make-build-backend-walk-through ``` diff --git a/docs/conceptual-guides/make-build-backend-walk-through.md b/docs/conceptual-guides/make-build-backend-walk-through.md index 859852ac8..9f4e9c2f9 100644 --- a/docs/conceptual-guides/make-build-backend-walk-through.md +++ b/docs/conceptual-guides/make-build-backend-walk-through.md @@ -52,7 +52,7 @@ The command `make build-backend`: - Returning to the target `build-dev`: - - This generates the `mxdev` files as described above in {ref}`mxdev-usage-overview-label`. + - This generates the `mxdev` files as described above in {ref}`manage-backend-python-packages-label`. - Installs Plone core packages and add-ons from the files generated by `mxdev`. You can configure your Zope instance as described in the section {doc}`/admin-guide/configure-zope`. diff --git a/docs/conf.py b/docs/conf.py index d79793765..c253b8d93 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -82,8 +82,9 @@ r"http://127.0.0.1", r"http://localhost", r"http://yoursite", - # Ignore file downloads + # Ignore static file downloads r"^/_static/", + r"^/_images/", # Ignore pages that require authentication r"https://github.com/orgs/plone/teams/", # requires auth r"https://github.com/plone/documentation/issues/new/choose", # requires auth @@ -91,6 +92,8 @@ r"https://opensource.org/", # requires auth # Ignore github.com pages with anchors r"https://github.com/.*#.*", + # Ignore github.com searches + r"https://github.com/search", # Ignore other specific anchors r"https://coveralls.io/repos/github/plone/plone.restapi/badge.svg\?branch=main", # plone.restapi r"https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors#Identifying_the_issue", diff --git a/docs/developer-guide/create-a-distribution.md b/docs/developer-guide/create-a-distribution.md new file mode 100644 index 000000000..d58e4f3bd --- /dev/null +++ b/docs/developer-guide/create-a-distribution.md @@ -0,0 +1,323 @@ +--- +myst: + html_meta: + "description": "How to create a custom Plone distribution" + "property=og:description": "How to create a custom Plone distribution" + "property=og:title": "Create a Plone distribution" + "keywords": "Plone 6, distribution, plone.distribution" +--- + +(create-a-plone-distribution-label)= + +# Create a Plone distribution + +This section explains how a developer can create a custom Plone {term}`distribution`. +A Plone distribution is a pre-packaged version of Plone that includes specific features, themes, modules, and configurations. + +```{seealso} +For a conceptual guide, see {doc}`/conceptual-guides/distributions`. +``` + + +## Create a backend add-on + +These instructions assume that you already have created a Plone backend add-on package, +and now you want to add a distribution to it. + +A Plone distribution exists inside a Python package that can be installed by `pip`. + + +## Update `setup.py` + +Your package should follow conventions that make it discoverable by other developers. + +In your {file}`setup.py` file, always add the correct [Python Trove classifiers](https://pypi.org/classifiers/). + +```python +"Framework :: Plone", +"Framework :: Plone :: 6.1", +"Framework :: Plone :: Distribution", +``` + +Add `plone.distribution` to your `install_requires` stanza in your {file}`setup.py` file. + +```{code-block} python +:emphasize-lines: 4 + +install_requires=[ + "Products.CMFPlone", + "setuptools", + "plone.distribution", +], +``` + + +## Update `configure.zcml` + +In your main {file}`configure.zcml` file, add the `plone` XML namespace with the following declaration. + +```{code-block} xml +:emphasize-lines: 3 + + +``` + +Register `plone.distribution` as a package to include with the following `` directive. + +```xml + +``` + +Then declare the distributions you want to include in your package. + +```xml + +``` + +The above example registers a distribution that will configure a personal blog with some default content. + + +## Add distribution handlers + +When registering a distribution, you can provide a `pre_handler`, a `handler`, and a `post_handler`, each of which must be a function with their respective signature, as shown in the following example. + +```python +def pre_handler(answers: dict) -> dict: + return answers + +def handler(distribution: Distribution, site, answers: dict): + return site + +def post_handler(distribution: Distribution, site, answers: dict): + return site +``` + +Each of those handlers will be called as follows. + +`pre_handler` +: Processes the answers to prepare the distribution before creating the site. + +`handler` +: Runs after creating the bare Plone site instead of the default handler. + It installs the required GenericSetup profiles and creates the content. + +`post_handler` +: Runs after the site is set up. + +To add extra configuration to your Plone site, and assuming you added extra inputs to the Plone site creation form, then you can add your own handler, registering it as shown in the following example. + +```{code-block} xml +:emphasize-lines: 6 + + +``` + + +## Add a distribution folder + +To organize your distribution configuration, you can follow the convention to use the {file}`distributions/` folder in the root of your package. +In that folder, you need to provide the items described in the following sections. + + +### `image.png` + +A 1080 pixels wide by 768 pixels tall image in PNG format representing your distribution. +It could be the default page of a new site, your logo, or any other way of representing your distribution. + + +### `profiles.json` + +A file {file}`profiles.json` containing the GenericSetup profiles that your distribution uses during installation. + +This file needs to contain two keys. + +`base` +: List of profiles to install in every new site using this distribution. + +`content` +: List of profiles to install when the user decides to create a site with example content. + +As an example, the configuration for a new Plone site with Volto as its frontend would be the following. + +```json +{ + "base": [ + "plone.app.contenttypes:default", + "plone.app.caching:default", + "plonetheme.barceloneta:default", + "plone.volto:default" + ], + "content": [ + "plone.volto:default-homepage" + ] +} +``` + + +### `schema.json` + +If you require additional input from the user during site creation, you can customize the form using the {file}`schema.json` file. + +The file should contain two keys. + +`schema` +: A {term}`JSON Schema` definition. + +`uischema` +: A [`react-jsonschema-form`](https://rjsf-team.github.io/react-jsonschema-form/docs/) configuration to modify the display of the form. + +The `schema` should have at least the following keys. + +- `site_id` +- `title` +- `description` +- `default_language` +- `portal_timezone` +- `setup_content` + +The following code example is the content of the {file}`schema.json` file for creating the site. + +```json +{ + "schema": { + "title": "Create a Plone site", + "description": "Adds a new Plone content management system site to the underlying application server.", + "type": "object", + "required": [ + "site_id", + "title" + ], + "properties": { + "site_id": { + "type": "string", + "title": "Path Identifier", + "default": "Plone", + "description": "The ID of the site. No special characters or spaces are allowed. This ends up as part of the URL unless hidden by an upstream web server." + }, + "title": { + "type": "string", + "title": "Title", + "default": "Site", + "description": "A short title for the site. This will be shown as part of the title of the browser window on each page." + }, + "description": { + "type": "string", + "title": "Site Description", + "default": "A Plone Site" + }, + "default_language": {"$ref": "#/definitions/languages"}, + "portal_timezone": {"$ref": "#/definitions/timezones"}, + "setup_content": { + "type": "boolean", + "title": "Create Content", + "description": "Should example content be added during site creation?", + "default": false + } + } + }, + "uischema": { + } +} +``` + +````{note} +You may have noticed the entries for both `default_language` and `portal_timezone`. + +```json + "default_language": {"$ref": "#/definitions/languages"}, + "portal_timezone": {"$ref": "#/definitions/timezones"}, +``` + +`plone.distribution` adds both definitions at runtime, providing a list of languages and timezones available on the installation. +```` + +## Add a dependency on an add-on + +If you want to add a Plone backend add-on to your Plone distribution, then you must perform the following steps. + +Add your add-on, such as `collective.person`, to your {file}`setup.py` file's `install_requires` stanza. + +```{code-block} python +:emphasize-lines: 6 + +install_requires=[ + "setuptools", + "Plone", + "plone.distribution>=1.0.0b2", + "plone.api", + "collective.person", +], +``` + +Then add it to your {file}`dependencies.zcml` file. + +```{code-block} xml +:emphasize-lines: 5 + + + + + + + + +``` + +Finally, add it to your {file}`profiles.json` file. + +```{code-block} json +:emphasize-lines: 6 + +"base": [ + "plone.app.contenttypes:default", + "plone.app.caching:default", + "plone.restapi:default", + "plone.volto:default", + "collective.person:default", + "plonetheme.barceloneta:default" +], +``` + + +## Add example content + +The distribution loads its content from JSON data in the `content` folder. + +To export content from a site into this folder, use the `bin/export-distribution` script. + +```shell +bin/export-distribution path/to/zope.conf Plone +``` + +In the example above, `Plone` is the ID of the Plone site to export. + + +## Limit available distributions + +By default, Plone 6.1 ships with two ready-to-use distributions. + +`default` +: Create a Plone site with the Volto frontend. + +`classic` +: Create a Plone site with the Classic UI frontend. + +If you want to limit the choice of distributions when creating a new site, you can set the environment variable `ALLOWED_DISTRIBUTIONS` to a comma-separated sting of only those distributions' names. + +```shell +ALLOWED_DISTRIBUTIONS=default +``` diff --git a/docs/developer-guide/index.md b/docs/developer-guide/index.md new file mode 100644 index 000000000..797edd0d7 --- /dev/null +++ b/docs/developer-guide/index.md @@ -0,0 +1,25 @@ +--- +myst: + html_meta: + "description": "Plone developer guide" + "property=og:description": "Plone developer guide" + "property=og:title": "Developer guide" + "keywords": "Plone 6, developer guide, development" +--- + +# Developer guide + +This part of the documentation provides information for how to develop in Plone. + +```{note} +This part of the documentation is under construction. +You can find documentation for development in various locations through the [search feature](https://6.docs.plone.org/search.html?q=development). +You can help consolidate all of development documentation here, even if it is to let us know what is missing, by [creating an issue](https://github.com/plone/documentation/issues/new?assignees=&labels=&projects=&template=new-issue-form.yml). +``` + + +```{toctree} +:maxdepth: 2 + +create-a-distribution +``` diff --git a/docs/glossary.md b/docs/glossary.md index 4c8cccdfd..ed4b20897 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -54,10 +54,10 @@ plone/generator-volto cookiecutter-plone-starter [cookiecutter-plone-starter](https://github.com/collective/cookiecutter-plone-starter/) creates a Plone project that you can install using {term}`Make`. It generates files for installing and configuring both the frontend and backend. - For the backend, it uses {term}`cookiecutter-zope-instance` to generate configuration files for a Zope WSGI instance. + For the backend, it uses {term}`cookiecutter-zope-instance` to generate configuration files for a {term}`Zope instance`. cookiecutter-zope-instance - [cookiecutter-zope-instance](https://github.com/plone/cookiecutter-zope-instance) is a cookiecutter template to create a full and complex configuration of a Zope WSGI instance. + [cookiecutter-zope-instance](https://github.com/plone/cookiecutter-zope-instance) is a cookiecutter template to create a full and complex configuration of a {term}`Zope instance`. CSRF Cross-Site Request Forgery @@ -144,13 +144,13 @@ Diazo Dexterity [Dexterity](https://github.com/plone/plone.dexterity) is the base framework for building content types, both through-the-web and as filesystem code. - It is aimed at Plone, although this package should work with plain Zope + CMF systems. + It is aimed at Plone, although this package should work with plain {term}`Zope` + CMF systems. Dublin Core The Dublin Core Schema is a small set of vocabulary terms that can be used to describe web resources (video, images, web pages, etc.), as well as physical resources such as books or CDs, and objects like artworks. ZMI - The Zope Management Interface. + The {term}`Zope` Management Interface. The ZMI is a direct interface into the backend software stack of Plone. While it can still serve as a valuable tool for Plone specialists to fix problems or accomplish certain tasks, it is not recommended as a regular tool for Plone maintenance. @@ -210,7 +210,7 @@ Configuration registry It is accessible from the Volto project by importing the module `@plone/volto/config` with `import registry from '@plone/volto/config'`. It contains the configuration of the Volto app. - In Plone core, [`plone.app.registry`](https://pypi.org/project/plone.app.registry/) provides Plone UI and `GenericSetup` integration for [`plone.registry`](https://pypi.org/project/plone.registry/), which in turn implements a configuration registry for Zope applications. + In Plone core, [`plone.app.registry`](https://pypi.org/project/plone.app.registry/) provides Plone UI and `GenericSetup` integration for [`plone.registry`](https://pypi.org/project/plone.registry/), which in turn implements a configuration registry for {term}`Zope` applications. component shadowing shadowing @@ -566,6 +566,10 @@ ZODB Zope [Zope](https://zope.readthedocs.io/en/latest/) is a Python-based application server for building secure and highly scalable web applications. +Zope instance + A Zope instance is a particular set of configuration for running {term}`Zope`. + A new Zope instance can be created using {term}`cookiecutter-zope-instance`. + ZPT Zope Page Template is a template language for Python. @@ -576,7 +580,7 @@ ZCA Zope Component Architecture Zope Component Architecture (ZCA) is a Python framework for supporting component based design and programming. It is very well suited to developing large Python software systems. - The ZCA is not specific to the Zope web application server. + The ZCA is not specific to the {term}`Zope` web application server. It can be used for developing any Python application. Maybe it should be called Python Component Architecture. ```{seealso} @@ -803,7 +807,7 @@ Load balancer CI continuous integration Continuous integration (CI) is the practice of integrating all your code changes into the main branch of a shared source code repository early and often, automatically testing each change when you commit or merge them, and automatically kicking off a build. - + Read about Plone's {doc}`/contributing/core/continuous-integration`. CD @@ -821,7 +825,21 @@ reference implementation A reference implementation is a program that implements all requirements from a corresponding specification. The reference implementation often accompanies a technical standard, and demonstrates what should be considered the "correct" behavior of any other implementation of it. +distribution +distributions + A Plone distribution is a pre-packaged version of Plone that includes specific features, themes, modules, and configurations. + It is a convenient way to get a specific type of website up and running quickly, as the distribution includes everything needed to run that type of site. + + ```{seealso} + - {doc}`/conceptual-guides/distributions` + - {doc}`/developer-guide/create-a-distribution` + ``` + +JSON Schema + [JSON Schema](https://json-schema.org/) is the vocabulary that enables JSON data consistency, validity, and interoperability at scale. + portlets Portlets are widgets that can be inserted in predefined locations in pages in {term}`Classic UI`. Portlets are most commonly used to add sidebars to the left or right of the main page content. + ``` diff --git a/docs/index.md b/docs/index.md index 9f4594162..38587e3b6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -33,6 +33,7 @@ Read the [documentation for the previous version, Plone 5](https://5.docs.plone. overview/index install/index admin-guide/index +developer-guide/index deployment/index volto/index classic-ui/index