| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <title>Search | Grails® 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 1, 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/search.html'/> |
| <meta property='og:title' content='Search | Grails® 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> |
| |
| |
| |
| <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 class='active'><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>Search</h1> |
| </div> |
| </div><div class='content'> |
| <article class='post'> |
| <p> |
| You can search the Apache Grails<sup>®</sup> website, the Grails documentation, and the Grails APIs |
| with the Google Custom Search box below. Please type your search query and hit enter.</p> |
| <div> |
| <style> |
| table.gsc-search-box td { |
| vertical-align: top !important; |
| } |
| .gsc-completion-container { |
| padding-top: 20px !important; |
| } |
| .gsc-input-box { |
| height: 32px; |
| } |
| input.gsc-search-button, input.gsc-search-button-v2 { |
| height: 30px; |
| display: none; |
| } |
| .gs-title { |
| line-height: 20px; |
| font-weight: bold; |
| } |
| .gs-snippet { |
| margin-left: 8px; |
| line-height: 18px; |
| font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; |
| } |
| .gsc-cursor-page { |
| margin: 4px; |
| padding: 4px; |
| padding-left: 8px; |
| padding-right: 8px; |
| border: 1px solid gray; |
| } |
| .gsc-cursor-page:hover { |
| color: white !important; |
| background-color: #db4800 !important; |
| text-decoration: none !important; |
| } |
| .gsc-cursor-current-page { |
| background-color: #F2F2F2 !important; |
| color: black !important; |
| } |
| .gsc-selected-option-container { |
| width: 120px !important; |
| } |
| td.gsc-search-button { |
| padding-top: 6px; |
| } |
| td.gsc-orderby-container { |
| padding-right: 20px; |
| } |
| .gs-no-results-result .gs-snippet { |
| font-weight: bold; |
| color: #db4800; |
| background-color: white; |
| border: 0px; |
| } |
| .gsc-webResult, .gsc-result { |
| font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; |
| } |
| .gsst_a, .gscb_a { |
| margin-top: 3px; |
| } |
| .gs-per-result-labels { |
| margin-left: 8px; |
| margin-top: 4px; |
| } |
| .gs-per-result-labels:before { |
| font-family: FontAwesome; |
| content: '\f02c'; |
| margin-right: 8px; |
| } |
| .gsc-tabHeader.gsc-tabhActive { |
| border-color: #CCCCCC; |
| border-bottom-color: #F2F2F2; |
| background-color: #F2F2F2; |
| } |
| .gsc-tabsArea { |
| border-bottom: 0; |
| } |
| a.gs-label, img.gs-image { |
| margin-left: 5px; |
| } |
| </style> |
| <script> |
| (function() { |
| var cx = '013897913388943055015:l1yajhbenou'; |
| var gcse = document.createElement('script'); |
| gcse.type = 'text/javascript'; |
| gcse.async = true; |
| gcse.src = 'https://cse.google.com/cse.js?cx=' + cx; |
| var s = document.getElementsByTagName('script')[0]; |
| s.parentNode.insertBefore(gcse, s); |
| })(); |
| </script> |
| <gcse:search></gcse:search> |
| |
| </div> |
| </article> |
| </div> </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>© 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> |