 
  
  A scalable platform and CMS to build Node.js applications.
schema => ({ GraphQL, AdminUI })
Keystone comes with first-class GraphQL support, a highly extensible architecture, and a wonderful Admin UI.
Looking for Keystone v4.x / Keystone Classic? Head over tokeystone-classic.
  Keystone 5 is a complete re-imagining of KeystoneJS for the future. It builds on the lessons we learned over the last 5 years of the KeystoneJS' history and focuses on the things we believe are the most powerful features for modern web and mobile applications.
This means less focus on hand-holding Node.js template-driven websites and more focus on flexible architecture, a powerful GraphQL API with deep authentication & access control features, an extensible Admin UI and plugins for rich field types, file and database adapters, and session management.
We believe it's the ideal back-end for rich React / Vue / Angular applications, Gatsby and Next.js websites, Mobile applications and more. It also makes a great Headless CMS.
To get up and running with a basic project template, run the following commands.
yarn create keystone-app my-app
cd my-app
yarn startFor more details and system requirements, check out the 5 Minute Quick Start Guide.
The API documentation contains a reference for all KeystoneJS packages.
For walk-throughs and discussions, see the Guides documentation.
These projects are designed to show off different aspects of KeystoneJS features at a range of complexities (from a simple Todo App to a complex Meetup Site).
See the demo-projects/README.md docs to get
started.
All source code should be formatted with Prettier.
Code is not automatically formatted in commit hooks to avoid unexpected behaviour,
so we recommended using an editor plugin to format your code as you work.
You can also run yarn format to prettier all the things.
The lint script will validate source code with both ESLint and prettier.
Keystone 5 is set up as a monorepo, using Yarn Workspaces. Make sure to install Yarn if you haven't already.
First, clone the Keystone 5 repository
git clone https://github.com/keystonejs/keystone-5.git
Also make sure you have a local MongoDB server running (instructions).
Then install the dependencies and start the test project:
yarn
yarn devSee demo-projects/README.md for more details on
the available demo projects.
While running yarn on Windows, the process may fail with an error such as this:
error { [Error: EPERM: operation not permitted, symlink 'C:\Users\user\Documents\keystone-5\packages\arch\packages\alert\src\index.js' -> 'C:\Users\user\Documents\keystone-5\packages\arch\packages\alert\dist\alert.cjs.js.flow']This is due to permission restrictions regarding the creation of symbolic links. To solve this, you should enable Windows' Developer Mode and run yarn again.
Keystone uses Jest for unit tests and Cypress for end-to-end tests. All tests can be run locally and on CircleCI.
To run the unit tests, run the script:
yarn jestUnit tests for each package can be found in packages/<package>/tests and following the naming pattern <module>.test.js.
To see test coverage of the files touched by the unit tests, run:
yarn jest --coverageTo see test coverage of the entire monorepo, including files which have zero test coverage, use the special script:
yarn coverageKeystone tests end-to-end functionality with the help of Cypress.
Each project (ie; test-projects/basic, test-projects/login, etc) have their own set of Cypress tests.
To run an individual project's tests, cd into that directory and run:
yarn cypress:runCypress can be run in interactive mode from project directories with its built in GUI, which is useful when developing and debugging tests:
cd test-projects/basic && yarn cypress:openEnd-to-end tests live in project/**/cypress/integration/*spec.js.
It is possible to run all cypress tests at once from the monorepo root with the command:
yarn cypress:runNOTE: The output from this command will mix together the output from each project being tested in parallel. This is only recommended as sanity check before pushing code.
Install the circleci cli tool:
If you've already got Docker For Mac installed (recommended)
brew install --ignore-dependencies circleciIf you do not have Docker installed
brew install circleciThen make sure docker is able to share the following directories (in Docker for Mac, go Preferences > File Sharing):
- The keystone 5 repo
- /Users/<your username>/.circleci
Make sure Docker is running.
Execute the tests:
# Clean up the node_modules folders so everything is installed fresh
yarn clean
# Run the circle CI job
circleci local execute --job simple_testsWhere simple_tests can be replaced with any job listed in
.circleci/config.yml under the jobs: section.
KeystoneJS adheres to the Contributor Covenant Code of Conduct.
Copyright (c) 2019 Jed Watson. Licensed under the MIT License.