Skip to content
React-based front-end for the Plone and Guillotina Content Management Systems
JavaScript CSS Other
Branch: master
Clone or download
jackahl and sneridagh Add delete file button in file Widget (#821)
* added basic button with delete file functionality

* remove debugger

* styled the delete button

* update changelog

* Fix tests, adjust styling

* refactor the reference

* Fix import

* Fix missing tests
Latest commit b9caae8 Aug 20, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
api Cleanup. Jun 23, 2019
cypress Fix last cypress test Jun 23, 2019
docs Merge pull request #800 from plone/viklatesttoolbar Jun 23, 2019
g-api Fixing travsi Jun 22, 2019
locales Add proper placeholder to the add link feature in the editor Aug 20, 2019
public Fixed i18n config. Oct 3, 2018
src Add delete file button in file Widget (#821) Aug 20, 2019
theme Add delete file button in file Widget (#821) Aug 20, 2019
.babelrc Add babelrc. Oct 3, 2018
.dockerignore Fixing docker image Sep 18, 2018
.eslintignore feat: Initial commit May 15, 2016
.eslintrc Add jsx-a11y to eslint. Jun 20, 2019
.gitattributes Add .gitattributes file to avoid most Changelog merge conflicts Nov 12, 2018
.gitignore begin adding aria-label, and document Jun 20, 2019
.nvmrc Upgrade to Node 8.14.0 Dec 1, 2018
.travis.yml Add bundlesize. Aug 11, 2019
.yarnrc Upgraded dependencies. Apr 13, 2017 Add delete file button in file Widget (#821) Aug 20, 2019
Dockerfile Adding internal API Path Jun 22, 2019
Jenkinsfile Build frontend on Jenkinsfile. Sep 19, 2018 Switch to MIT license. Jan 4, 2018
Makefile Fix api cleanup. Jul 8, 2019 Minor acceptance tests docs update. Jun 7, 2019
babel.js Modify slightly the abbel setup for make it work for boilerplate Apr 18, 2019
changelogupdater.js Remove debug dangling logging Mar 1, 2019
cypress.json First working locally Apr 19, 2019 Internal API path Jun 22, 2019
jest-svgsystem-transform.js Mock jest tests with a special transform for the svg from the Pastana… Jul 14, 2018
jsdoc.json feat: Initial commit May 15, 2016
pip-selfcheck.json Plone Bug Sep 21, 2018
razzle.config.js Remove webpack-bundle-analyzer. Aug 9, 2019
requirements-docs.txt pin versions Feb 23, 2019
styleguide.config.js Remove Mosaic component. Jun 22, 2019
test-setup.js Added SidebarPortal component (#798) Jun 23, 2019
tsconfig.json - work with mr.developer Jan 9, 2019
yarn.lock Add bundlesize. Aug 11, 2019


Volto png

Build Status Coverage Dependencies Dev Dependencies NPM Netlify Status


Volto is a React-based frontend for content management systems, currently supporting three backend implementations: Plone, Guillotina and a NodeJS reference implementation.

Plone is a CMS built on Python with over 17 years of experience.

Plone has very interesting features that appeal to developers and users alike, such as customizable content types, hierarchical URL object traversing and a sophisticated content workflow powered by a granular permissions model. This allows you to build anything from simple websites to enterprise-grade intranets.

Volto exposes all these features and communicates with Plone via its mature REST API. Volto has the ability of being highly themable and customizable.

Volto also supports other APIs like Guillotina, a Python resource management system, inspired by Plone and using the same basic concepts like traversal, content types and permissions model.

Last but not least, it also supports a Volto Nodejs-based backend reference API implementation that demos how other systems could also use Volto to display and create content through it.

Quick Start

First get all the requirements installed on your system.


Create Volto App

Create a new Volto project by using the create-volto-app utility.

It will bootstrap a Volto project in a folder of your choice with all the required boilerplate to start customizing your Volto site.

$ npm install -g yarn
$ npm install -g @plone/create-volto-app
$ create-volto-app myvoltoproject
$ cd myvoltoproject

Although we install and use yarn, the create-volto-app tool still needs to be installed using npm -g because yarn has a different implementation of global installs.

Bootstrap the Plone API backend

We recommend Plone as backend of choice for Volto.

You can bootstrap a ready Docker Plone container with all the dependencies and ready for Volto use:

$ docker run --rm -it -p 8080:8080 kitconcept/plone.restapi:latest

or as an alternative if you have experience with Plone and you have all the dependencies installed on your system, you can use the supplied buildout in the api folder by issuing the command:

$ make build-backend

Start Volto

Once inside your Volto project folder:

$ yarn start


Go to http://localhost:3000 in your browser.


You can try a Volto online demo in


You can find the (beta) documentation in


A detailed training on how to create your own website using Volto is available as part of the Plone training docs at


Plone Conference Tokyo 2018

Rob Gietema - Volto

Rob Gietema / Víctor Fernández de Alba - Volto Extensibility Story

Víctor Fernández de Alba - Theming Volto

Timo Stollenwerk / Víctor Fernández de Alba / Ramon Navarro - Volto Case Studies

Timo Stollenwerk - Reinventing Plone, Roadmap to the Modern Web

Browser support

Volto works well with any modern (and updated) browser, including their mobile flavors: Chrome, Firefox, Safari, Edge.

We do not guarantee that browsers who were deprecated by their vendors (e.g. Internet Explorer 11) will be supported by Volto in the future.

Volto Development

For Volto development you need all the requirements already mentioned on the Quick Start section.

Checkout the Volto repository

$ git clone

Install dependencies

$ yarn

Install a backend

Plone (recommended)

Either using a Docker image

$ docker run --rm -it -p 8080:8080 kitconcept/plone.restapi:latest

or running Plone on your machine (advanced), additional dependencies might be required only for Plone experienced integrators/developers. Check the Plone Installation Documentation.

$ cd api
$ ./

Guillotina (experimental)

It still doesn't support the full API/features that Plone provides.

$ docker-compose -f g-api/docker-compose.yml up -d

Run frontend

$ yarn start


Browse to http://localhost:3000 in your browser.


$ yarn test


For ease the release process, a package that helps with the process is installed: release-it.

For using it and start a release you need to fulfill the requirements:

Then the command for release:

$ yarn release

a dry-release command for testing the output is also available:

$ yarn dry-release

Acceptance testing

Volto uses Cypress for browser-based acceptance testing.

Run acceptance tests (with the Plone backend):

$ yarn ci:cypress:run

Run acceptance tests (with the Guillotina backend):

$ yarn ci:cypress:run:guillotina

Writing new acceptance tests

When writing new acceptance tests you usually want to minimize the time it takes to run the tests.

To do so, start three individual terminal sessions for running the Plone backend, the Volto frontend and the acceptance tests.

Start the Plone backend:

$ yarn ci:start-api-plone

Start the Volto frontend:

$ RAZZLE_API_PATH=http://localhost:55001/plone yarn start

Open Cypress to run and develop the acceptance tests:

$ yarn cypress:open

Go to the cypress/integration folder to see existing tests. This directory is hot reloaded with your changes as you write the tests. For more information on how to write Cypress tests:

Running the acceptance tests with Guillotina backend

If you want to use Guillotina as backend to run the tests you should run:

$ yarn ci:start-api-plone-guillotina


MIT License. Copyrights hold the Plone Foundation.

See for details.

You can’t perform that action at this time.