{"id":22281002,"url":"https://github.com/keystonejs/keystone-5","last_synced_at":"2025-04-05T02:11:33.428Z","repository":{"id":34310329,"uuid":"339272896","full_name":"keystonejs/keystone-5","owner":"keystonejs","description":null,"archived":false,"fork":false,"pushed_at":"2024-09-01T11:58:44.000Z","size":314668,"stargazers_count":66,"open_issues_count":43,"forks_count":34,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-03-29T01:11:09.267Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://v5.keystonejs.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/keystonejs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-16T03:18:18.000Z","updated_at":"2025-03-10T21:33:37.000Z","dependencies_parsed_at":"2024-06-18T14:04:12.582Z","dependency_job_id":"a958711b-a398-4688-961e-a8a6ae0ca806","html_url":"https://github.com/keystonejs/keystone-5","commit_stats":{"total_commits":4580,"total_committers":177,"mean_commits":"25.875706214689266","dds":0.8065502183406114,"last_synced_commit":"ee00f7fbac9e25364f2d96f4105e02e236fcf5a0"},"previous_names":[],"tags_count":2455,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keystonejs%2Fkeystone-5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keystonejs%2Fkeystone-5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keystonejs%2Fkeystone-5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keystonejs%2Fkeystone-5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keystonejs","download_url":"https://codeload.github.com/keystonejs/keystone-5/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247276189,"owners_count":20912288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-03T16:12:02.150Z","updated_at":"2025-04-05T02:11:33.409Z","avatar_url":"https://github.com/keystonejs.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003e⚠️ Maintenance Mode\u003c/h1\u003e\n  \u003cp\u003eKeystone 5 has moved into maintenance mode!\u003c/p\u003e\n  \u003cp\u003eWe recommend starting any new projects using \u003ca href=\"https://keystonejs.com/\" target=\"_blank\"\u003eKeystone 6\u003c/a\u003e\u003c/p\u003e\n  \u003cp\u003eInformation on upgrading an existing keystone 5 project to keystone 6 can be found \u003ca href=\"https://github.com/keystonejs/keystone-5/discussions/categories/upgrading-to-keystone-6\" target=\"_blank\"\u003ehere\u003c/a\u003e\u003c/p\u003e\n  \u003cp\u003eFor more information please read our \u003ca href=\"https://github.com/keystonejs/keystone-5/issues/21\"\u003eKeystone 5 and beyond\u003c/a\u003e post.\u003c/p\u003e\n  \u003cbr\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"website/static/readme-header.png\" width=\"557\"\u003e\n  \u003ch1\u003eKeystoneJS\u003c/h1\u003e\n  \u003cbr\u003e\n  \u003cp\u003e\u003cb\u003eA scalable platform and CMS to build Node.js applications.\u003c/b\u003e\u003c/p\u003e\n  \u003cp\u003e\u003ccode\u003eschema =\u003e ({ GraphQL, AdminUI })\u003c/code\u003e\u003c/p\u003e\n  \u003cbr\u003e\n  \u003cp\u003eKeystone comes with first-class GraphQL support, a highly extensible architecture, and a wonderful Admin UI.\u003c/p\u003e\n  \u003csub\u003eLooking for Keystone v4.x / Keystone Classic? Head over to \u003ca href=\"https://github.com/keystonejs/keystone-classic\"\u003e\u003ccode\u003ekeystone-classic\u003c/code\u003e\u003c/a\u003e.\u003c/sub\u003e\n  \u003cbr\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n![CI](https://github.com/keystonejs/keystone-5/workflows/CI/badge.svg)\n[![slack](https://img.shields.io/badge/chat-on%20slack-blue.svg)](https://community.keystonejs.com/)\n[![Supported by Thinkmill](https://thinkmill.github.io/badge/heart.svg)](http://thinkmill.com.au/?utm_source=github\u0026utm_medium=badge\u0026utm_campaign=react-select)\n\n## Contents\n\n- [What's new](#whats-new)\n- [Getting Started](#getting-started)\n- [Documentation](#documentation)\n- [Version Control](#version-control)\n- [Contributing](#contributing)\n- [Code of Conduct](#code-of-conduct)\n- [License](#license)\n\n## What's new?\n\nKeystone 5 is a complete re-imagining of older versions 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.\n\nThis means less focus on hand-holding Node.js template-driven websites and more focus on flexible architecture, a powerful GraphQL API with deep authentication \u0026 access control features, an extensible Admin UI and plugins for rich field types, file and database adapters, and session management.\n\nWe believe it's a powerful backend for rich React / Vue / Angular applications, Gatsby and Next.js websites, Mobile applications and more. It also makes a great Headless CMS.\n\n## Getting Started\n\nTo get up and running with a basic project template, run the following commands.\n\n```shell\nyarn create keystone-5-app my-app\ncd my-app\nyarn start\n```\n\nFor more details and system requirements, check out the [5 Minute Quick Start\nGuide](https://v5.keystonejs.com/quick-start/).\n\n## Documentation\n\nThe [Keystone 5 API documentation](https://v5.keystonejs.com/api) contains a reference for all KeystoneJS packages.\n\nFor walk-throughs and discussions, see the [Keystone 5 Guides\ndocumentation](https://v5.keystonejs.com/guides).\n\n## Version control\n\nWe do our best to follow SemVer version control within Keystone. This means package versions have 3 numbers. A change in the first number indicates a breaking change, the second number indicates backward compatible feature and the third number indicates a bug fix.\n\nYou can find **changelogs** either by browsing our repository, or by using our [interactive changelog explorer](https://changelogs.xyz/@keystonejs/keystone).\n\nA quick note on dependency management: Keystone is organised into a number of small packages within a monorepo. When packages in the same repository depend on each other, new versions might not be compatible with older versions. If two or more packages are updated, it can result in breaking changes, even though collectively they appear to be non-breaking.\n\nWe do our best to catch this but recommend updating Keystone packages together to avoid any potential conflict. This is especially important to be aware of if you use automated dependency management tools like Greenkeeper.\n\n## Contributing\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.\n\n**Contributions of any kind are welcome!**\n\nYou will find the set-up steps in this readme and full release processes and project guidelines in [`CONTRIBUTING.md`](/CONTRIBUTING.md).\n\n### Contributors\n\nWe'd like to start by thanking all our wonderful contributors:\n([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\n\u003c!-- prettier-ignore-start --\u003e\n\n\u003c!-- markdownlint-disable --\u003e\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.thinkmill.com.au\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/872310?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJed Watson\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=JedWatson\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://jes.st/about\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/612020?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJess Telford\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=jesstelford\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.timl.id.au\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/616382?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTim Leslie\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=timleslie\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://hamil.town\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/11481355?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMitchell Hamilton\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=mitchellhamilton\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://twitter.com/JossMackison\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/2730833?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJoss Mackison\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=jossmac\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://nathansimpson.design\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/12689383?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNathan Simpson\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=nathansimpsondesign\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/mikehazell\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/814227?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMike\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=mikehazell\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/molomby\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/2416367?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJohn Molomby\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=molomby\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/issues?q=author%3Amolomby\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://dominik-wilkowski.com\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/1266923?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDominik Wilkowski\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=dominikwilkowski\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Noviny\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/15622106?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBen Conolly\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=Noviny\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#maintenance-Noviny\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#tool-Noviny\" title=\"Tools\"\u003e🔧\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jaredcrowe\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/4995433?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJared Crowe\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=jaredcrowe\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.linkedin.com/in/gautamsi\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/5769869?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGautam Singh\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=gautamsi\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/lukebatchelor\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/18694878?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003elukebatchelor\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=lukebatchelor\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.ticidesign.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/289889?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTiciana de Andrade\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=ticidesign\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/aghaabbasq\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/17919384?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eaghaabbasq\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=aghaabbasq\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://ajaymathur.github.io/\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/9667784?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAjay Narain Mathur\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=ajaymathur\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/mshavliuk\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/6589665?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emshavliuk\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/issues?q=author%3Amshavliuk\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=mshavliuk\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.wesbos.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/176013?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWes Bos\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=wesbos\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-wesbos\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#maintenance-wesbos\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/vlad-elagin\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/28232030?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003evlad-elagin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=vlad-elagin\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Olya-Yer\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/33322677?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eOlya-Yer \u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/issues?q=author%3AOlya-Yer\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/1337cookie\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/15826769?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003e1337cookie\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=1337cookie\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://madebymike.com.au\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1320567?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMike\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-MadeByMike\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#projectManagement-MadeByMike\" title=\"Project Management\"\u003e📆\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/pulls?q=is%3Apr+reviewed-by%3AMadeByMike\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=MadeByMike\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://jordanoverbye.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/6265154?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJordan Overbye\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=jordanoverbye\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=jordanoverbye\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/prvit\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/2816799?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eprvit\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=prvit\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/kennedybaird\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/20593811?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKennedy Baird\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=kennedybaird\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://thiagodebastos.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/6151341?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eThiago De Bastos\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=thiagodebastos\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://dcousens.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/413395?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Cousens\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=dcousens\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://simonswiss.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/485747?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSimon Vrachliotis\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-simonswiss\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#tutorial-simonswiss\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#video-simonswiss\" title=\"Videos\"\u003e📹\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Vultraz\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/3558659?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCharles Dang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=Vultraz\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=Vultraz\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/dzigg\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/4436922?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003edzigg\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=dzigg\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/cmosgh\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/911925?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCristian Mos\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=cmosgh\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://arnaud-zg.github.io/\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/10991546?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eArnaud Zheng\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=arnaud-zg\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://twitter.com/ashinzekene\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/20991583?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAshinze Ekene\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=ashinzekene\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Fabyao\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/5112982?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFabyao\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=Fabyao\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://marcosrjjunior.github.io\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/5287262?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarcos RJJunior\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=marcosrjjunior\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://ginkgoch.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/41072618?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGinkgoch\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=ginkgoch\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/MaisaMilena\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/28612369?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMaisaMilena\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=MaisaMilena\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.marxvn.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/4975208?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMartin Pham\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/issues?q=author%3Amarxvn\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/justintemps\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/12401179?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJustin Smith\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=justintemps\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/gabipetrovay\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1170398?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGabriel Petrovay\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=gabipetrovay\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=gabipetrovay\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://atticus.dev\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/9361948?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLiam Clarke\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=LiamAttClarke\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/wbarcovsky\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/5498761?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVladimir Barcovsky\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=wbarcovsky\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/wcalebgray\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/11668534?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCaleb Gray\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=wcalebgray\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=wcalebgray\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://hackweb.altervista.org\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/754139?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003efrank10gm\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=frank10gm\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/mbrodt\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/21239560?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003embrodt\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=mbrodt\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/zamkevich\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/13717428?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMisha Zamkevich\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=zamkevich\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/matheuschimelli\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/10470074?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMatheus Chimelli\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=matheuschimelli\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/gpersable\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/48637618?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGita Permatasari Sujatmiko\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=gpersable\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://elevated.to\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/203895?v=4\" width=\"80px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndreas Borg\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/keystonejs/keystone-5/commits?author=borg\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-enable --\u003e\n\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n### Demo Projects\n\nThese projects are designed to show off different aspects of KeystoneJS features\nat a range of complexities (from a simple Todo App to a complex Meetup Site).\n\nSee the [`examples/README.md`](/examples/README.md) docs to get\nstarted.\n\n### Development Practices\n\nAll source code should be formatted with [Prettier](https://github.com/prettier/prettier).\nCode is not automatically formatted in commit hooks to avoid unexpected behaviour,\nso we recommended using an editor plugin to format your code as you work.\nYou can also run `yarn format` to prettier all the things.\nThe `lint` script will validate source code with both ESLint and prettier.\n\n### Setup\n\nKeystone 5 is set up as a monorepo, using [Yarn Workspaces](https://yarnpkg.com/lang/en/docs/workspaces/). Make sure to [install Yarn](https://yarnpkg.com/lang/en/docs/install) if you haven't already.\n\nFirst, clone the Keystone 5 repository\n\n```\ngit clone https://github.com/keystonejs/keystone-5.git\n```\n\nAlso make sure you have a local MongoDB server running\n([instructions](https://docs.mongodb.com/manual/installation/)).\n\nThen install the dependencies and start the test project:\n\n```shell\nyarn\nyarn dev\n```\n\nSee [`examples/README.md`](/examples/README.md) for more details on\nthe available demo projects.\n\n#### Note For Windows Users\n\nWhile running `yarn` on Windows, the process may fail with an error such as this:\n\n```shell\nError: EPERM: operation not permitted, symlink 'C:\\Users\\user\\Documents\\keystone\\packages\\arch\\packages\\alert\\src\\index.js' -\u003e 'C:\\Users\\user\\Documents\\keystone\\packages\\arch\\packages\\alert\\dist\\alert.cjs.js.flow'\n```\n\nThis is due to permission restrictions regarding the creation of [symbolic links](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/). To solve this, you should enable Windows' [Developer Mode](https://docs.microsoft.com/en-us/windows/uwp/get-started/enable-your-device-for-development?redirectedfrom=MSDN) and run `yarn` again.\n\n### Testing\n\nKeystone uses [Jest](https://facebook.github.io/jest) for unit tests and [Cypress](https://www.cypress.io) for end-to-end tests.\nAll tests can be run locally and on [GitHub](https://github.com/keystonejs/keystone-5/actions?query=workflow%3ACI).\n\n### Unit Tests\n\nTo run the unit tests, run the script:\n\n```shell\nyarn jest\n```\n\nUnit tests for each package can be found in `packages/\u003cpackage\u003e/tests` and following the naming pattern `\u003cmodule\u003e.test.js`.\nTo see test coverage of the files touched by the unit tests, run:\n\n```shell\nyarn jest --coverage\n```\n\nTo see test coverage of the entire monorepo, including files which have zero test coverage, use the special script:\n\n```shell\nyarn coverage\n```\n\n### End-to-End Tests\n\nKeystone tests end-to-end functionality with the help of [Cypress](https://www.cypress.io).\nEach project (ie; `tests/test-projects/basic`, `tests/test-projects/login`, etc) have their own set of Cypress tests.\nTo run an individual project's tests, `cd` into that directory and run:\n\n```shell\nyarn cypress:run\n```\n\nCypress can be run in interactive mode from project directories with its built in GUI,\nwhich is useful when developing and debugging tests:\n\n```shell\ncd tests/test-projects/basic \u0026\u0026 yarn cypress:open\n```\n\nEnd-to-end tests live in `project/**/cypress/integration/*spec.js`.\nIt is possible to run all cypress tests at once from the monorepo root with the command:\n\n```shell\nyarn cypress:run\n```\n\n_NOTE: The output from this command will mix together the output from each project being tested in parallel._\n_This is only recommended as sanity check before pushing code._\n\n## Code of Conduct\n\nKeystoneJS adheres to the [Contributor Covenant Code of Conduct](/code-of-conduct.md).\n\n## License\n\nCopyright (c) 2019 Jed Watson. Licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeystonejs%2Fkeystone-5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeystonejs%2Fkeystone-5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeystonejs%2Fkeystone-5/lists"}