blob: 8456bc5ac0657ae3287dfdd194f5994f4e2f6875 [file]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Maturity Model | Grails&reg; Framework</title>
<meta name="keywords" content="grails,jvm,framework,groovy,gradle,spring-boot,gorm"/>
<meta name="description" content="A powerful Groovy-based web application framework for the JVM built on top of Spring Boot"/>
<meta name="date" content="July 5, 2026"/>
<meta name="robots" content="all"/>
<meta name='twitter:card' content='summary_large_image'/>
<meta name='twitter:site' content='@grailsframework'/>
<meta name='twitter:description' content='A powerful Groovy-based web application framework for the JVM built on top of Spring Boot'/>
<meta name='twitter:creator' content='@grailsframework'/>
<meta property='og:image' content='https://grails.apache.org/images/grails.png'/>
<meta property='og:url' content='https://grails.apache.org/maturity.html'/>
<meta property='og:title' content='Maturity Model | Grails&reg; Framework'/>
<meta property='og:description' content='A powerful Groovy-based web application framework for the JVM built on top of Spring Boot'/>
<meta property='og:type' content='website'/>
<meta charset='UTF-8'/>
<meta name='viewport' content='width=device-width, initial-scale=1'/>
<link rel='icon' href='https://grails.apache.org/images/favicon.ico'/>
<link rel='mask-icon' href='https://grails.apache.org/images/grails-pinned-icon.svg' color='feb672'/>
<link rel='alternate' type='application/rss+xml' title='RSS' href='https://grails.apache.org/rss.xml'/>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/screen.css'/>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/plugin.css'/>
<script src='https://grails.apache.org/javascripts/navigation.js'></script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['setDoNotTrack', true]);
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u = 'https://analytics.apache.org/';
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '79']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
})();
</script>
<!-- End Matomo Code -->
<script
async
src="https://widget.kapa.ai/kapa-widget.bundle.js"
data-website-id="d804a9f2-51a2-414c-97f7-12f2a1ba4609"
data-project-name="Apache Grails"
data-project-color="#3F4346"
data-font-family="system-ui,-apple-system,BlinkMacSystemFont,Roboto,Helvetica,Arial,Segoe UI,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;"
data-project-logo="https://grails.apache.org/images/grails.png"
data-modal-override-open-id="ask-ai-input"
data-modal-override-open-class="search-input"
data-user-analytics-fingerprint-enabled="true"
data-modal-title="Apache Grails AI Assistant"
data-modal-example-questions-title="Try asking me..."
data-modal-example-questions="How does database migration work?,How does Spring Security work?"
data-button-text-color="#FBB576"
data-modal-header-bg-color="#FFFFFF"
data-modal-title-color="#FBB576"
data-consent-required="true"></script>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/paginate.css'/>
<script src='https://grails.apache.org/javascripts/paginate.js'></script>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/support.css'/>
<script src='https://grails.apache.org/javascripts/plugins.js'></script>
</head>
<body>
<header class='main-header'>
<div class='content'>
<a href='https://grails.apache.org/index.html'><img class='grails-logo' src='https://grails.apache.org/images/grails_logo.svg' alt='Grails Logo'/></a>
<a href='javascript:show("top-menus", "show-navigation-link")' id='show-navigation-link'
class='mobile align-center'>Show Navigation</a>
<div id='top-menus'>
<nav class='secondary-menu' id='secondary-menu'>
<ul>
<li><a href='https://grails.apache.org/casestudies/index.html'>Case Studies</a></li>
<li><a href='https://grails.apache.org/blog/index.html'>Blog</a></li>
<li><a href='https://grails.apache.org/learning.html'>Learning</a></li>
<li><a href='https://grails.apache.org/community.html'>Community</a></li>
<li><a href='https://grails.apache.org/search.html'>Search</a></li>
</ul>
</nav>
<nav class='main-menu' id='main-menu'>
<ul>
<li><a href='https://grails.apache.org/documentation.html'>Documentation</a></li>
<li><a href='https://grails.apache.org/download.html'>Download</a></li>
<li><a href='https://grails.apache.org/plugins.html'>Plugins</a></li>
<li><a href='https://grails.apache.org/guides'>Guides</a></li>
<li><a href='https://grails.apache.org/faq.html'>FAQ</a></li>
<li><a href='https://grails.apache.org/support.html'>Support</a></li>
<li><a href='https://start.grails.org'>Forge App</a></li>
</ul>
</nav>
</div>
</div>
</header>
<article><div class='header-bar chalices-bg'>
<div class='content'>
<h1>Maturity Model</h1>
</div>
</div>
<div class='content'>
<article>
<p>
<em>This page reflects the Apache Grails project's self-assessment of their maturity according to the
<a href="https://community.apache.org/apache-way/apache-project-maturity-model.html">ASF Project
Maturity Model</a>.</em>
</p>
<h2>Code</h2>
<h3>CD10</h3>
<p>The project produces Open Source software for distribution to the public at no charge.</p>
<p>All code is under the Apache license (or compatible 3rd party licenses) and available from ASF distribution
channels and GitHub.</p>
<h3>CD20</h3>
<p>Anyone can quickly discover and access the project's code.</p>
<p>The code is available under ASF/GitHub, and the project’s website contains instructions on how to obtain it.
</p>
<h3>CD30</h3>
<p>Anyone using standard, widely available tools can build the code reproducibly.</p>
<p>The project includes instructions on required prerequisites and instructions on how to build the software.
</p>
<h3>CD40</h3>
<p>The complete history of the project's code is available via a source code control system, which allows anyone
to recreate any released version.</p>
<p>The latest code is available from ASF/GitHub, and previous versions have been tagged. Previous releases since
joining are archived at the ASF and available for download.</p>
<h3>CD50</h3>
<p>The source code control system establishes the provenance of each line of code in a reliable way, based on
strong authentication of the committer.</p>
<p>When third parties contribute code, commit messages provide reliable information about the code provenance.
All code is committed via version control. The LICENSE file also lists 3rd party code and its license.</p>
<h2>Licenses and Copyright</h2>
<h3>LC10</h3>
<p>The Apache License, version 2.0, covers the released code.</p>
<p>The code is licensed under the Apache License 2.0.</p>
<h3>LC20</h3>
<p>Libraries that are mandatory dependencies of the project's code do not create more restrictions than the
Apache License does.</p>
<p>Extensive work has been done on third-party licenses for both the source release and convenience binaries.
One issue with a Hibernate dependency has been discussed and is subject to further resolution but isn't the
sole mandatory option for this functionality.
Further work is expected to remove the licensing issue with this dependency.</p>
<h3>LC30</h3>
<p>The libraries mentioned in LC20 are available as Open Source software.</p>
<p>All mandatory dependencies are open source software.</p>
<h3>LC40</h3>
<p>Committers are bound by an Individual Contributor Agreement (the "Apache iCLA") that defines which code they
may commit and how they need to identify code that is not their own.</p>
<p>All committers have signed ICLAs.</p>
<h3>LC50</h3>
<p>The project clearly defines and documents the copyright ownership of everything that the project produces.
</p>
<p>The LICENSE and NOTICE files list additional information needed here.</p>
<h2>Releases</h2>
<h3>RE10</h3>
<p>Releases consist of source code, distributed using standard and open archive formats that are expected to
stay readable in the long term.</p>
<p>Releases are source code and are performed and distributed in the standard ASF way.</p>
<h3>RE20</h3>
<p>The project's PMC (Project Management Committee, see CS10) approves each software release to make the release
an act of the Foundation.</p>
<p>Each release has been voted on, following ASF policy, by the PPMC.</p>
<h3>RE30</h3>
<p>Releases are signed and/or distributed along with digests that anyone can reliably use to validate the
downloaded archives.</p>
<p>Releases are signed and the release area on the website includes hashes and links to KEYs files.</p>
<h3>RE40</h3>
<p>The project can distribute convenience binaries alongside source code, but they are not Apache Releases, they
are provided with no guarantee.</p>
<p>Convenience binaries are distributed alongside source releases. Their LICENSE and NOTICE files are correct.
</p>
<h3>RE50</h3>
<p>The project documents a repeatable release process so that someone new to the project can independently
generate the complete set of artifacts required for a release.</p>
<p>Releases have been made by several release managers and the project includes documentation on how to make a
release. The last release included a standard incubating DISCLAIMER. There is some minor work to be done on
documenting the release process and improving the release scripts.</p>
<h2>Quality</h2>
<h3>QU10</h3>
<p>The project is open and honest about the quality of its code. Various levels of quality and maturity for
various modules are natural and acceptable as long as they are clearly communicated.</p>
<p>All code is reviewed by at least one committer before being merged and must pass CI checks.</p>
<h3>QU20</h3>
<p>The project puts a very high priority on producing secure software.</p>
<p>The project uses various automation processes to ensure dependencies are kept up to date.</p>
<h3>QU30</h3>
<p>The project provides a well-documented, secure and private channel to report security issues, along with a
documented way of responding to them.</p>
<p>The project uses the standard way of reporting ASF security issues.</p>
<h3>QU40</h3>
<p>The project puts a high priority on backwards compatibility and aims to document any incompatible changes and
provide tools and documentation to help users transition to new features.</p>
<p>All PRs, including information on if there are breaking changes, and release notes on each release, also
include this.</p>
<h3>QU50</h3>
<p>The project strives to respond to documented bug reports in a timely manner.</p>
<p>The large majority of issues and PRs are dealt with quickly, although a number of outstanding older issues
from pre-ASF days remain.</p>
<h2>Community</h2>
<h3>CO10</h3>
<p>The project has a well-known homepage that points to all the information required by ASF policy.</p>
<p>The Grails website (https://grails.apache.org) is well known and contains all the information needed by ASF
policy. (A couple of points need fixing before this is actually true, but they are well-known and simple.)
</p>
<h3>CO20</h3>
<p>The community welcomes contributions from anyone who acts in good faith, respectfully, and adds value to the
project.</p>
<p>Several hundred folks have contributed to the core Grails project during its lifespan and more on plugins.
More than 20 folks have contributed to the core project since incubation started. Several contributors have
been made committers and PMC members since the start of incubation.</p>
<h3>CO30</h3>
<p>Contributions include source code, documentation, constructive bug reports, constructive discussions,
marketing and generally anything that adds value to the project.</p>
<p>The project values all forms of contribution and has accepted code, documentation fixes/improvements, bug
reports etc.</p>
<h3>CO40</h3>
<p>The community strives to be meritocratic and gives more rights and responsibilities to contributors who, over
time, add value to the project.</p>
<p>Several contributors have been made committers and PPMC members since the start of incubation.</p>
<h3>CO50</h3>
<p>The project documents how contributors can earn more rights, such as commit access or decision power, and
applies these principles consistently.</p>
<p>Several contributors have been made committers and PMC members since the start of incubation. These
committers have been based on merit and come from several different employers.</p>
<h3>CO60</h3>
<p>The community operates based on the consensus of its members (see CS10), who have decision power. Dictators,
benevolent or not, are not welcome in Apache projects.</p>
<p>The project’s direction is set by the PMC, there is no BDFY.</p>
<h3>CO70</h3>
<p>The project strives to answer user questions in a timely manner.</p>
<p>User questions on GitHub and the mailing list are usually answered promptly. There is room for improvement in
a few isolated cases.</p>
<h2>Consensus Building</h2>
<h3>CS10</h3>
<p>The project maintains a public list of its contributors who have decision power. The project's PMC (Project
Management Committee) consists of those contributors.</p>
<p>The PPMC and committer list are kept up to date when new people are added. There is no public list of the PMC
on the site, but it is available via several ASF services.</p>
<h3>CS20</h3>
<p>Decisions require a consensus among PMC members and are documented on the project's main communications
channel. The PMC takes community opinions into account, but the PMC has the final word.</p>
<p>Votes on releases and other major decisions are conducted on the mailing list.</p>
<h3>CS30</h3>
<p>The project uses documented voting rules to build consensus when discussion is not sufficient.</p>
<p>There has been no need to use voting in this way so far.</p>
<h3>CS40</h3>
<p>In Apache projects, vetoes are only valid for code commits. The person exercising the veto must justify it
with a technical explanation, as per the Apache voting rules defined in CS30.</p>
<p>There have been no code vetos. Most significant code contributions use RTC, so this reduces the number of
possible vetos. The code is reviewed, and feedback is acted on before it is merged.</p>
<h3>CS50</h3>
<p>All "important" discussions happen asynchronously in written form on the project's main communications
channel. Offline, face-to-face or private discussions that affect the project are also documented on that
channel.</p>
<p>There is discussion on the mailing list, and in GitHub issues and discussions. This is asynchronous. There
are regular online meetings where anyone is welcome and a summary of discussions is brought back to the
mailing list.
There are no offline meetings or discussions where private decisions are made.</p>
<h2>Independence</h2>
<h3>IN10</h3>
<p>The project is independent of any corporate or organizational influence.</p>
<p>The active contributors are from a diverse range of organisations.</p>
<h3>IN20</h3>
<p>Contributors act as themselves, not as representatives of a corporation or organization.</p>
<p>Individuals do act independently and for the community and project as a whole.</p>
<h2>Trademark and Branding</h2>
<h3>TB10</h3>
<p>The project uses "Apache Foo™" as the project and software product name consistently, with appropriate
trademark attributions.</p>
<p>The project uses Apache Grails and complies with ASF trademark policy.</p>
<h3>TB20</h3>
<p>The project's primary homepage is at projectname.apache.org. When exceptions exist to use alternate domains
for any purpose, any non-apache.org domain names are owned by the ASF.</p>
<p>The project's website is at https://grails.apache.org.</p>
<h3>TB30</h3>
<p>The ASF has trademark rights, including any registrations, to the project name, logo, and any other major
branding elements.</p>
<p>The name Grails and its logo is a registered trademark and agreement has been reached to transfer the
trademarks to the ASF upon successful graduation.</p>
<h3>TB40</h3>
<p>The project monitors for any major misuses of their project's brand by others, and reports any potential
misuses to Brand Management.</p>
<p>There have been no significant misuses of the project’s brand.</p>
</article>
</div>&nbsp;</article>
<footer>
<div class='content'>
<div class='apache-grails'>
<p>Apache Grails is supported by the Apache Software Foundation and the Grails community.</p>
<a href='https://apache.org'><img src='https://www.apache.org/img/asf_logo.png' width='200px' alt='Apache Software Foundation'/></a>
<p>Apache, Apache Grails, Grails, Groovy, and the ASF logo are either registered trademarks or trademarks of The Apache Software Foundation.</p>
</div>
<nav class='social-media-nav'>
<ul>
<li><a href='mailto:dev@grails.apache.org'><img src='https://grails.apache.org/images/email.svg' alt='Email Icon'/></a></li>
<li><a href='https://slack.grails.org'><img src='https://grails.apache.org/images/slack.svg' alt='Slack Icon'/></a></li>
<li><a href='https://www.youtube.com/@GrailsFramework'><img src='https://grails.apache.org/images/youtube.svg' alt='Youtube Icon'/></a></li>
<li><a href='https://bsky.app/profile/grails.apache.org'><img src='https://grails.apache.org/images/bsky.svg' alt='Bluesky Icon'/></a></li>
<li><a rel="me" href="https://fosstodon.org/@grails"><img src='https://grails.apache.org/images/mastodont.svg' alt='Mastodon Icon'/></a></li>
<li><a href='https://www.linkedin.com/showcase/official-grails/'><img src='https://grails.apache.org/images/linkedin.svg' alt='LinkedIn Icon'/></a></li>
<li><a href='https://github.com/apache/grails-core'><img src='https://grails.apache.org/images/github.svg' alt='GitHub Icon'/></a></li>
<li><a href='https://twitter.com/grailsframework'><img src='https://grails.apache.org/images/x-twitter.svg' alt='Twitter Icon'/></a></li>
</ul>
</nav>
</div>
<div class='footer-bottom'>
<p>&copy; 2005-2026 the Apache Grails project</p>
<p>Grails is Open Source:
<a href='https://www.apache.org/licenses/'>License</a>,
<a href='https://privacy.apache.org/policies/privacy-policy-public.html'>Privacy Policy</a>,
<a href='https://www.apache.org/foundation/sponsorship'>Sponsor Apache</a>,
<a href='https://www.apache.org/events/current-event'>Events</a>,
<a href='https://www.apache.org/security'>Security</a>,
<a href='https://www.apache.org/foundation/thanks.html'>Thanks</a>,
<a href='https://grails.apache.org/support-schedule.html'>Support Schedule</a>
</p>
</div>
</footer>
</body>
</html>