1<!DOCTYPE html> 2<html lang="en-us" class="dark-theme bg-canvas"> 3 <head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <title>The AdonisJS Blog</title><meta name="description" content="Official blog for AdonisJS. Framework updates, feature announcements, tutorials, and technical articles from the team building the framework" /> 7<link rel="canonical" href="https://adonisjs.com/blog" /> 8<meta name="twitter:title" content="The AdonisJS Blog" /> 9<meta name="twitter:description" content="Official blog for AdonisJS. Framework updates, feature announcements, tutorials, and technical articles from the team building the framework" /> 10<meta name="twitter:card" content="summary_large_image" /> 11<meta name="twitter:site" content="@adonisframework" /> 12<meta name="twitter:creator" content="@adonisframework" /> 13<meta property="og:title" content="The AdonisJS Blog" /> 14<meta property="og:description" content="Official blog for AdonisJS. Framework updates, feature announcements, tutorials, and technical articles from the team building the framework" /> 15<meta property="og:url" content="https://adonisjs.com/blog" /> 16 <meta name="twitter:image" content="https://adonisjs.com/assets/blog-DH7bszCN.jpg" /> 17 <meta property="og:image" content="https://adonisjs.com/assets/blog-DH7bszCN.jpg" /> 18 19<meta property="og:type" content="article" /> 20 21<link 22 rel="apple-touch-icon" 23 sizes="57x57" 24 href="/assets/apple-icon-57x57-xYBJLDWT.png" 25/> 26<link 27 rel="apple-touch-icon" 28 sizes="60x60" 29 href="/assets/apple-icon-60x60-D6_J_159.png" 30/> 31<link 32 rel="apple-touch-icon" 33 sizes="72x72" 34 href="/assets/apple-icon-72x72-CwGQ7wCB.png" 35/> 36<link 37 rel="apple-touch-icon" 38 sizes="76x76" 39 href="/assets/apple-icon-76x76-aYOM4d7G.png" 40/> 41<link 42 rel="apple-touch-icon" 43 sizes="114x114" 44 href="/assets/apple-icon-114x114-Buyr7H-g.png" 45/> 46<link 47 rel="apple-touch-icon" 48 sizes="120x120" 49 href="/assets/apple-icon-120x120-ribyuC-s.png" 50/> 51<link 52 rel="apple-touch-icon" 53 sizes="144x144" 54 href="/assets/ms-icon-144x144-CS5pvIdW.png" 55/> 56<link 57 rel="apple-touch-icon" 58 sizes="152x152" 59 href="/assets/apple-icon-152x152-5WCCzTD-.png" 60/> 61<link 62 rel="apple-touch-icon" 63 sizes="180x180" 64 href="/assets/apple-icon-180x180-9a7N4Jr0.png" 65/> 66<link 67 rel="icon" 68 type="image/png" 69 sizes="192x192" 70 href="/assets/android-icon-192x192-BsKbegpC.png" 71/> 72<link 73 rel="icon" 74 type="image/png" 75 sizes="32x32" 76 href="/assets/favicon-32x32-B8wNBOa_.png" 77/> 78<link 79 rel="icon" 80 type="image/png" 81 sizes="96x96" 82 href="/assets/favicon-96x96-cvA9CZU9.png" 83/> 84<link 85 rel="icon" 86 type="image/png" 87 sizes="16x16" 88 href="/assets/favicon-16x16-BIWFZ2zQ.png" 89/> 90<link rel="manifest" href="/assets/icons_manifest--KzPhL4h.json" /> 91<meta name="msapplication-TileColor" content="#09090b" /> 92<meta 93 name="msapplication-TileImage" 94 content="/assets/ms-icon-144x144-CS5pvIdW.png" 95/> 96<meta name="theme-color" content="#09090b" /> 97
98<script> 99 (() => { 100 const root = document.documentElement; 101 let storedTheme = null; 102 103 try { 104 storedTheme = localStorage.getItem('adonisjs:theme'); 105 } catch {} 106 107 const theme = 108 storedTheme === 'light' || storedTheme === 'dark' 109 ? storedTheme 110 : window.matchMedia('(prefers-color-scheme: light)').matches 111 ? 'light' 112 : 'dark'; 113 114 root.classList.remove('light-theme', 'dark-theme'); 115 root.classList.add(`${theme}-theme`); 116 root.dataset.theme = theme; 117 118 document 119 .querySelector('meta[name="theme-color"]') 120 ?.setAttribute('content', theme === 'light' ? '#fafafa' : '#09090b'); 121 })(); 122</script>
122 123 124<link rel="preload" as="style" href="/assets/app-Lcq2UOUK.css"/> 125<link rel="preload" as="style" href="/assets/app-q6sJD9cd.css"/> 126<link rel="modulepreload" href="/assets/app-De46YKyw.js"/> 127<link rel="stylesheet" href="/assets/app-q6sJD9cd.css"/>
128<script type="module" defer src="/assets/app-De46YKyw.js"></script>
128 129<link rel="stylesheet" href="/assets/app-Lcq2UOUK.css"/> 130 131 </head> 132 133 <body class="font-sans antialiased text-foreground-muted relative"> 134<div x-data class="relative bg-highlighter"> 135 <p class="px-12 py-2.5 text-center text-13 sm:text-14 font-semibold text-highlighter-ink"> 136 Help shape what we build next. Take the 137 <a 138 href="https://tally.so/r/obgR8M" 139 target="_blank" 140 rel="noopener noreferrer" 141 class="underline underline-offset-3 hover:opacity-75 transition-opacity" 142 > 143 AdonisJS developer survey. 144 </a> 145 </p> 146 <button 147 type="button" 148 class="absolute right-2.5 top-1/2 -translate-y-1/2 flex size-7 items-center justify-center cursor-pointer text-highlighter-ink hover:bg-highlighter-ink/10 transition-colors" 149 aria-label="Dismiss announcement" 150 @click="localStorage.setItem('announcement:dev-survey', 'dismissed'); $root.remove()" 151 ><svg width="1em" height="1em" viewBox="0 0 24 24" class="w-4 h-4"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18 6L6 18M6 6l12 12"/></svg> 152 </button> 153</div>
154<script> 155 if (localStorage.getItem('announcement:dev-survey') === 'dismissed') { 156 document.currentScript.previousElementSibling.remove() 157 } 158</script>
158 159 160<header class="sticky inset-x-0 top-0 border-b border-divider z-10 backdrop-blur-3xl bg-nav-bg"> 161 <div class="container-full mx-auto px-5 lg:px-10 py-4 flex items-center justify-between h-18"> 162 <div class="text-foreground"> 163<a href="/" class="block"> 164 <svg width="107" height="33" viewBox="0 0 107 33" fill="none" xmlns="http://www.w3.org/2000/svg"> 165 <g clip-path="url(#clip0_1245_6827)"> 166 <path 167 fill-rule="evenodd" 168 clip-rule="evenodd" 169 d="M0 16.3331C0 29.506 3.16017 32.6662 16.3331 32.6662C29.506 32.6662 32.6662 29.506 32.6662 16.3331C32.6662 3.16017 29.506 0 16.3331 0C3.16017 0 0 3.16017 0 16.3331ZM6.58646 19.7261L11.7093 8.08338C12.5742 6.12075 14.2374 5.05627 16.3331 5.05627C18.4288 5.05627 20.092 6.12075 20.9569 8.08338L26.0797 19.7261C26.3126 20.2916 26.5122 21.0235 26.5122 21.6555C26.5122 24.5495 24.483 26.5787 21.589 26.5787C20.6032 26.5787 19.8203 26.3271 19.0278 26.0725C18.2158 25.8116 17.3937 25.5475 16.3331 25.5475C15.2847 25.5475 14.4426 25.814 13.6145 26.076C12.8136 26.3294 12.0258 26.5787 11.0772 26.5787C8.18318 26.5787 6.15402 24.5495 6.15402 21.6555C6.15402 21.0235 6.35361 20.2916 6.58646 19.7261ZM16.3331 10.1125L11.2768 21.5557C12.7737 20.8571 14.5035 20.5245 16.3331 20.5245C18.0961 20.5245 19.8924 20.8571 21.3228 21.5557L16.3331 10.1125Z" 170 fill="currentColor" 171 /> 172 <path 173 fill-rule="evenodd" 174 clip-rule="evenodd" 175 d="M93.7543 8.07967C92.6202 8.07967 91.8012 8.88296 91.8012 10.0013C91.8012 11.1195 92.6202 11.9228 93.7543 11.9228C94.8883 11.9228 95.7074 11.1195 95.7074 10.0013C95.7074 8.88296 94.8883 8.07967 93.7543 8.07967ZM58.0314 24.5865C55.0073 24.5865 52.8179 22.3504 52.8179 18.8532C52.8179 15.293 55.0073 13.0569 58.0314 13.0569C59.4333 13.0569 60.4728 13.5294 61.0871 14.4587V8.5837H64.2373V24.3345H61.0871V23.2162C60.4886 24.1297 59.449 24.5865 58.0314 24.5865ZM56.0311 18.8532C56.0311 16.9001 57.0864 15.6243 58.693 15.6243C60.3153 15.6243 61.3549 16.8843 61.3549 18.8374C61.3549 20.759 60.3153 22.0034 58.693 22.0034C57.0864 22.0034 56.0311 20.759 56.0311 18.8532ZM69.183 18.8217C69.183 16.8843 70.2383 15.64 71.8134 15.64C73.4042 15.64 74.4595 16.8843 74.4595 18.8217C74.4595 20.759 73.4042 22.0034 71.8134 22.0034C70.2383 22.0034 69.183 20.759 69.183 18.8217ZM103.898 21.3261C103.898 21.9088 103.457 22.2554 102.338 22.2554C101.078 22.2554 100.291 21.5938 100.291 20.7905H97.1407C97.2195 22.9642 99.2828 24.5865 102.275 24.5865C105.111 24.5865 106.922 23.3264 106.922 21.0898C106.922 19.4202 105.851 18.2547 103.725 17.8294L101.441 17.3726C100.748 17.2309 100.338 16.8843 100.338 16.4276C100.338 15.7503 101.031 15.388 101.913 15.388C103.173 15.388 103.662 15.9708 103.662 16.6638H106.654C106.575 14.6162 104.969 13.0569 101.976 13.0569C99.1883 13.0569 97.2982 14.4587 97.2982 16.5851C97.2982 18.5067 98.5425 19.373 100.401 19.7667L102.669 20.255C103.41 20.4125 103.898 20.7275 103.898 21.3261ZM95.3451 24.3345H92.1949V13.3089H95.3451V24.3345ZM82.5555 13.3089V14.4587C83.3587 13.5294 84.4298 13.0569 85.7529 13.0569C88.2257 13.0569 89.8323 14.6635 89.8323 17.1521V24.3345H86.6822V17.8136C86.6822 16.4748 85.9261 15.6715 84.6188 15.6715C83.3115 15.6715 82.5555 16.4748 82.5555 17.8136V24.3345H79.4053V13.3089H82.5555ZM71.8134 13.0569C68.4585 13.0569 65.9699 15.4825 65.9699 18.8217C65.9699 22.1609 68.4585 24.5865 71.8134 24.5865C75.1841 24.5865 77.6727 22.1609 77.6727 18.8217C77.6727 15.4825 75.1841 13.0569 71.8134 13.0569ZM45.5411 15.6243C43.9345 15.6243 42.8792 16.9001 42.8792 18.8532C42.8792 20.759 43.9345 22.0034 45.5411 22.0034C47.1634 22.0034 48.2029 20.759 48.2029 18.8374C48.2029 16.8843 47.1634 15.6243 45.5411 15.6243ZM39.666 18.8532C39.666 22.3504 41.8554 24.5865 44.8638 24.5865C46.2971 24.5865 47.3209 24.1297 47.9352 23.2162V24.3345H51.0853V13.3089H47.9352V14.4587C47.3051 13.5294 46.2656 13.0569 44.8638 13.0569C41.8554 13.0569 39.666 15.293 39.666 18.8532Z" 176 fill="currentColor" 177 /> 178 </g> 179 <defs> 180 <clipPath id="clip0_1245_6827"> 181 <rect width="106.922" height="32.6662" fill="currentColor" /> 182 </clipPath> 183 </defs> 184</svg> 185 186 <span class="sr-only">Home page</span> 187</a> 188 189 </div> 190 191 <div class="flex items-center gap-7"> 192 <nav class="flex items-center gap-7"> 193 <ul class="hidden md:flex items-center gap-5"> 194 <li> 195<a href="/packages" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted">
196 <span>Packages</span> 197</a> 198 199 </li> 200 <li> 201<a href="/wall-of-love" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 202 <span>Wall of love</span> 203</a> 204 205 </li> 206 <li> 207<a href="https://docs.adonisjs.com" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted" rel="noopener noreferrer" target="_blank"> 208 <span>Docs</span> 209</a> 210 211 </li> 212 <li> 213<a href="/blog" class="current md:text-sm hover:text-foreground transition-colors text-foreground"> 214 <span>Blog</span> 215</a> 216 217 </li> 218 <li> 219<a href="/roadmap" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 220 <span>Roadmap</span> 221</a> 222 223 </li> 224 <li> 225<a href="/sponsor" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 226 <span>Sponsor</span> 227</a> 228 229 </li> 230 <li> 231<a href="/about" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 232 <span>About</span> 233</a> 234 235 </li> 236 237 </ul> 238 239 <ul class="flex items-center gap-5"> 240 <li x-data="themeSwitcher" class="flex items-center"> 241 <button 242 type="button" 243 @click="toggle()" 244 :aria-label="theme === 'dark' ? 'Switch to light theme' : 'Switch to dark theme'" 245 :title="theme === 'dark' ? 'Switch to light theme' : 'Switch to dark theme'" 246 class="inline-flex size-8 cursor-pointer items-center justify-center rounded-full border border-control-line bg-control text-foreground-muted transition-colors hover:border-control-line-hover hover:bg-control-hover hover:text-foreground" 247 > 248 <span x-cloak x-show="theme === 'dark'"><svg width="1em" height="1em" viewBox="0 0 24 24" class="size-4.5"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M16 12a4 4 0 1 1-8 0a4 4 0 0 1 8 0m-4-9v2m0 14.004v2M5 12H3m18 0h-2m0-7l-2 2M5 5l2 2m0 10l-2 2m14 0l-2-2"/></svg> 249 </span> 250 <span x-cloak x-show="theme === 'light'"><svg width="1em" height="1em" viewBox="0 0 24 24" class="size-4.5"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M21 12.808c-.5 5.347-5.849 9.14-11.107 7.983C-.078 18.6 1.15 3.909 11.11 3C6.395 9.296 14.619 17.462 21 12.808"/></svg> 251 </span> 252 </button> 253 </li> 254 255 <li> 256 <a class="font-medium items-center justify-center cursor-pointer transition-colors text-center uppercase inline-flex bg-accent hover:bg-accent-hover focus:bg-accent-hover text-accent-contrast font-mono focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-indigo-400 px-3 py-1.5 text-xs" target="_blank" href="https://plus.adonisjs.com"> 257 Plus 258 </a> 259 260 </li> 261 262 <li class="hidden md:block"> 263<a href="https://github.com/adonisjs/core" class="flex items-center gap-2 text-foreground-muted hover:text-foreground transition-colors" rel="noopener noreferrer" target="_blank"> 264 <svg width="20px" height="20px" viewBox="0 0 20 20"><path fill="currentColor" d="M20 10.25q0 3.351-1.908 6.027t-4.928 3.703q-.352.068-.514-.093a.54.54 0 0 1-.163-.4V16.67q0-1.295-.677-1.895a9 9 0 0 0 1.335-.24q.591-.16 1.223-.52a3.7 3.7 0 0 0 1.055-.888q.423-.528.69-1.402t.267-2.008q0-1.616-1.028-2.75q.48-1.214-.105-2.723q-.364-.12-1.054.147a7 7 0 0 0-1.198.587l-.495.32a9 9 0 0 0-2.5-.346a9 9 0 0 0-2.5.347a12 12 0 0 0-.553-.36q-.345-.214-1.088-.514q-.741-.3-1.12-.18q-.572 1.507-.09 2.722q-1.03 1.134-1.03 2.75q0 1.134.268 2.002q.267.867.683 1.401a3.5 3.5 0 0 0 1.048.894q.632.36 1.224.52q.593.162 1.335.241q-.52.48-.638 1.375a2.5 2.5 0 0 1-.586.2a3.6 3.6 0 0 1-.742.067q-.43 0-.853-.287q-.423-.288-.723-.834a2.1 2.1 0 0 0-.631-.694q-.384-.267-.645-.32l-.26-.04q-.273 0-.378.06t-.065.153a.7.7 0 0 0 .117.187a1 1 0 0 0 .17.16l.09.066q.287.135.567.508q.28.374.41.68l.13.307q.17.507.574.821q.404.315.872.4q.468.087.905.094q.436.006.723-.047l.299-.053q0 .507.007 1.188l.006.72q0 .24-.17.4q-.168.162-.52.094q-3.021-1.028-4.928-3.703Q0 13.6 0 10.25q0-2.79 1.341-5.145a10.1 10.1 0 0 1 3.64-3.73A9.6 9.6 0 0 1 10 0a9.6 9.6 0 0 1 5.02 1.375a10.1 10.1 0 0 1 3.639 3.73Q20 7.461 20 10.25"/></svg>
265 <span class="font-mono text-14 font-semibold">19K</span> 266 <span class="sr-only">Star adonisjs/core on GitHub</span> 267</a> 268 269 </li> 270 271 <li x-data="" class="flex self-center md:hidden"> 272 <button @click.prevent="$dispatch('toggle-mobile-nav')"><svg width="20px" height="20px" viewBox="0 0 24 24" class="text-foreground-muted hover:text-foreground transition-colors"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.5 6.5h15M4.5 12h15m-15 5.5h15"/></svg> 273 <span class="sr-only">Open menu</span> 274 </button> 275 </li> 276 </ul> 277 </nav> 278 </div> 279 </div> 280</header> 281 282 283<div 284 x-data="{ isOpen: false }" 285 x-cloak 286 @toggle-mobile-nav.window="isOpen = !isOpen" 287 x-show="isOpen" 288 class="md:hidden fixed text-center backdrop-blur-xl border-t border-divider bg-nav-bg left-0 right-0 top-26 bottom-0 z-10 px-5 py-10" 289> 290 <ul class="flex flex-col gap-5"> 291 <li> 292<a href="/packages" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 293 <span>Packages</span> 294</a> 295 296 </li> 297 <li> 298<a href="/wall-of-love" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 299 <span>Wall of love</span> 300</a> 301 302 </li> 303 <li> 304<a href="https://docs.adonisjs.com" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted" rel="noopener noreferrer" target="_blank"> 305 <span>Docs</span> 306</a> 307 308 </li> 309 <li> 310<a href="/blog" class="current md:text-sm hover:text-foreground transition-colors text-foreground"> 311 <span>Blog</span> 312</a> 313 314 </li> 315 <li> 316<a href="/roadmap" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 317 <span>Roadmap</span> 318</a> 319 320 </li> 321 <li> 322<a href="/sponsor" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 323 <span>Sponsor</span> 324</a> 325 326 </li> 327 <li> 328<a href="/about" class="md:text-sm hover:text-foreground transition-colors text-foreground-muted"> 329 <span>About</span> 330</a> 331 332 </li> 333 334 <li> 335<a href="https://github.com/adonisjs/core" class="inline-block" rel="noopener noreferrer" target="_blank"> 336 <svg width="24px" height="24px" viewBox="0 0 20 20" class="text-foreground-muted hover:text-foreground transition-colors"><path fill="currentColor" d="M20 10.25q0 3.351-1.908 6.027t-4.928 3.703q-.352.068-.514-.093a.54.54 0 0 1-.163-.4V16.67q0-1.295-.677-1.895a9 9 0 0 0 1.335-.24q.591-.16 1.223-.52a3.7 3.7 0 0 0 1.055-.888q.423-.528.69-1.402t.267-2.008q0-1.616-1.028-2.75q.48-1.214-.105-2.723q-.364-.12-1.054.147a7 7 0 0 0-1.198.587l-.495.32a9 9 0 0 0-2.5-.346a9 9 0 0 0-2.5.347a12 12 0 0 0-.553-.36q-.345-.214-1.088-.514q-.741-.3-1.12-.18q-.572 1.507-.09 2.722q-1.03 1.134-1.03 2.75q0 1.134.268 2.002q.267.867.683 1.401a3.5 3.5 0 0 0 1.048.894q.632.36 1.224.52q.593.162 1.335.241q-.52.48-.638 1.375a2.5 2.5 0 0 1-.586.2a3.6 3.6 0 0 1-.742.067q-.43 0-.853-.287q-.423-.288-.723-.834a2.1 2.1 0 0 0-.631-.694q-.384-.267-.645-.32l-.26-.04q-.273 0-.378.06t-.065.153a.7.7 0 0 0 .117.187a1 1 0 0 0 .17.16l.09.066q.287.135.567.508q.28.374.41.68l.13.307q.17.507.574.821q.404.315.872.4q.468.087.905.094q.436.006.723-.047l.299-.053q0 .507.007 1.188l.006.72q0 .24-.17.4q-.168.162-.52.094q-3.021-1.028-4.928-3.703Q0 13.6 0 10.25q0-2.79 1.341-5.145a10.1 10.1 0 0 1 3.64-3.73A9.6 9.6 0 0 1 10 0a9.6 9.6 0 0 1 5.02 1.375a10.1 10.1 0 0 1 3.639 3.73Q20 7.461 20 10.25"/></svg> 337 <span class="sr-only">GitHub repository</span> 338</a> 339 340 </li> 341 </ul> 342</div> 343 344 345 346 <main><div class="hero text-center"> 347 <div class="container mx-auto px-5 lg:px-10 py-24 lg:border-x border-divider relative"> 348 <h1 349 class="font-display text-34 lg:text-42 text-foreground leading-10 lg:leading-52 tracking-tight" 350 > 351 The AdonisJS Blog 352 </h1> 353 <p 354 class="text-16 lg:text-18 text-foreground-muted max-w-2xl sm:px-2.5 mx-auto mt-5 lg:mt-3 leading-7" 355 > 356 Tutorials, releases, and technical articles from the AdonisJS core team. Learn how to build better applications with the framework. 357 </p> 358 <div class="relative max-w-105 mx-auto mt-5 mb-6"> 359 <form 360 action="https://buttondown.email/api/emails/embed-subscribe/adonisjs" 361 target="popupwindow"
362 onsubmit="window.open('https://buttondown.email/adonisjs', 'popupwindow')" 363 > 364<input name="email" id="email" class="w-full px-4 py-2.5 border border-control-line bg-control text-foreground rounded-md text-foreground-muted placeholder-muted-2 pr-18 text-15" type="email" required placeholder="Subscribe to our newsletter" /> 365 366 <button 367 class="absolute top-1/2 right-4 transform -translate-y-1/2 transition-all text-foreground hover:text-cta-hover font-mono py-2.5 text-13 uppercase" 368 > 369 Submit 370 </button> 371 </form> 372 </div> 373 374 <div 375 class="absolute inset-0 pointer-events-none -z-1 bg-hero-pattern bg-position-[60%] md:bg-top bg-no-repeat" 376 ></div> 377 </div> 378</div> 379<section class="border-t border-divider"> 380 <div class="container mx-auto lg:border-x border-divider"> 381 <nav class="border-b border-divider"> 382 <ul class="flex space-x-3 py-5 justify-center"> 383 <li class="rounded-md"> 384<a href="/blog" class="current font-mono text-center block px-2.5 py-1.5 text-13 transition-colors relative text-foreground bg-control-active font-medium rounded-sm"> 385 Blog 386</a> 387 388 </li> 389 <li class="rounded-md"> 390<a href="/releases" class="font-mono text-center block px-2.5 py-1.5 text-13 transition-colors relative text-foreground-muted hover:text-foreground-muted"> 391 Releases 392</a> 393 394 </li> 395 </ul> 396 </nav> 397 <div> <section class="px-5 max-w-4xl mx-auto"> 398 <article class="not-last:border-b border-l border-r border-divider"> 399 <div class="group"> 400<a href="/blog/redesigned-starter-kits" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 401 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 402 Sep 28, 2026 403 </span> 404 <div class="flex-1"> 405 <div class="mb-6 max-w-xl"> 406 <h2 407 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 408 > 409 Redesigned starter kits with dark mode, layouts, and typed forms 410 </h2> 411 <p class="text-14 text-foreground-muted tracking-wide">All five official starter kits have been updated. The web kits get a new design, dark mode, purpose-built layouts, typed forms with Inertia v3, and better auth defaults. All kits now target the latest versions of their dependencies.</p> 412 </div> 413 <div class="flex justify-between items-center"> 414 <div class="flex items-center gap-1.5"> 415 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 416 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 417 </span> 418 <span class="text-13 text-foreground-muted">Harminder Virk</span> 419 </div> 420 </div> 421 </div> 422</a> 423 424 </div> 425 </article> 426 <article class="not-last:border-b border-l border-r border-divider"> 427 <div class="group"> 428<a href="/blog/codegen-and-application-warmup" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 429 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 430 Aug 20, 2026 431 </span> 432 <div class="flex-1"> 433 <div class="mb-6 max-w-xl"> 434 <h2 435 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 436 > 437 Introducing codegen command and application warmup phase 438 </h2> 439 <p class="text-14 text-foreground-muted tracking-wide">AdonisJS now has a standalone codegen command and a warmup lifecycle phase for refreshing generated files without starting operational work.</p> 440 </div> 441 <div class="flex justify-between items-center"> 442 <div class="flex items-center gap-1.5"> 443 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 444 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 445 </span>
446 <span class="text-13 text-foreground-muted">Harminder Virk</span> 447 </div> 448 </div> 449 </div> 450</a> 451 452 </div> 453 </article> 454 <article class="not-last:border-b border-l border-r border-divider"> 455 <div class="group"> 456<a href="/blog/adonisjs-inertia-5" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 457 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 458 Aug 10, 2026 459 </span> 460 <div class="flex-1"> 461 <div class="mb-6 max-w-xl"> 462 <h2 463 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 464 > 465 Inertia v3 and end-to-end type safety in AdonisJS 466 </h2> 467 <p class="text-14 text-foreground-muted tracking-wide">AdonisJS Inertia version 5 adds Inertia v3 support, route-aware frontend APIs, improved error handling, and end-to-end type safety.</p> 468 </div> 469 <div class="flex justify-between items-center"> 470 <div class="flex items-center gap-1.5"> 471 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 472 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 473 </span> 474 <span class="text-13 text-foreground-muted">Harminder Virk</span> 475 </div> 476 </div> 477 </div> 478</a> 479 480 </div> 481 </article> 482 <article class="not-last:border-b border-l border-r border-divider"> 483 <div class="group"> 484<a href="/blog/adonisjs-vite-6" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 485 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 486 Aug 10, 2026 487 </span> 488 <div class="flex-1"> 489 <div class="mb-6 max-w-xl"> 490 <h2 491 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 492 > 493 Vite 8 and server-side modules in AdonisJS 494 </h2> 495 <p class="text-14 text-foreground-muted tracking-wide">AdonisJS Vite version 6 adds Vite 8 support, server-side entrypoints, runtime module loading, and explicit static asset handling.</p> 496 </div> 497 <div class="flex justify-between items-center"> 498 <div class="flex items-center gap-1.5"> 499 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 500 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 501 </span> 502 <span class="text-13 text-foreground-muted">Harminder Virk</span> 503 </div> 504 </div> 505 </div> 506</a> 507 508 </div> 509 </article> 510 <article class="not-last:border-b border-l border-r border-divider"> 511 <div class="group"> 512<a href="/blog/teaching-ai-to-write-adonisjs" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 513 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 514 May 05, 2026 515 </span> 516 <div class="flex-1"> 517 <div class="mb-6 max-w-xl"> 518 <h2 519 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 520 > 521 How I'm teaching AI to write AdonisJS the way I would 522 </h2> 523 <p class="text-14 text-foreground-muted tracking-wide">AI doesn't just need to know about the framework. It needs to be told how to engineer with it. Here's where I've landed, and what's going into Flow.</p> 524 </div> 525 <div class="flex justify-between items-center"> 526 <div class="flex items-center gap-1.5"> 527 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 528 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 529 </span>
530 <span class="text-13 text-foreground-muted">Harminder Virk</span> 531 </div> 532 </div> 533 </div> 534</a> 535 536 </div> 537 </article> 538 <article class="not-last:border-b border-l border-r border-divider"> 539 <div class="group"> 540<a href="/blog/how-we-redesigned-redirects-in-adonisjs" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 541 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 542 Apr 09, 2026 543 </span> 544 <div class="flex-1"> 545 <div class="mb-6 max-w-xl"> 546 <h2 547 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 548 > 549 How we re-designed redirects in AdonisJS 550 </h2> 551 <p class="text-14 text-foreground-muted tracking-wide">New redirect APIs in AdonisJS. Open redirect prevention, session-based previous URL, intended URL after login, and configurable query string forwarding.</p> 552 </div> 553 <div class="flex justify-between items-center"> 554 <div class="flex items-center gap-1.5"> 555 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 556 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 557 </span> 558 <span class="text-13 text-foreground-muted">Harminder Virk</span> 559 </div> 560 </div> 561 </div> 562</a> 563 564 </div> 565 </article> 566 <article class="not-last:border-b border-l border-r border-divider"> 567 <div class="group"> 568<a href="/blog/introducing-persona-and-permission" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 569 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 570 Mar 18, 2026 571 </span> 572 <div class="flex-1"> 573 <div class="mb-6 max-w-xl"> 574 <h2 575 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 576 > 577 Introducing Persona and Permission 578 </h2> 579 <p class="text-14 text-foreground-muted tracking-wide">We released Persona and Permission, the first two packages under AdonisJS Plus. Learn how they work, why they exist as packages, and how they fit into the Kit components story</p> 580 </div> 581 <div class="flex justify-between items-center"> 582 <div class="flex items-center gap-1.5"> 583 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 584 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 585 </span> 586 <span class="text-13 text-foreground-muted">Harminder Virk</span> 587 </div> 588 </div> 589 </div> 590</a> 591 592 </div> 593 </article> 594 <article class="not-last:border-b border-l border-r border-divider"> 595 <div class="group"> 596<a href="/blog/v7" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 597 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 598 Feb 25, 2026 599 </span> 600 <div class="flex-1"> 601 <div class="mb-6 max-w-xl"> 602 <h2 603 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 604 > 605 AdonisJS v7 is here 606 </h2> 607 <p class="text-14 text-foreground-muted tracking-wide">AdonisJS v7 introduces end-to-end type safety, new starter kits with authentication, zero-config OpenTelemetry, and a rewritten developer experience. Available now</p> 608 </div> 609 <div class="flex justify-between items-center"> 610 <div class="flex items-center gap-1.5">
611 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 612 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 613 </span> 614 <span class="text-13 text-foreground-muted">Harminder Virk</span> 615 </div> 616 </div> 617 </div> 618</a> 619 620 </div> 621 </article> 622 <article class="not-last:border-b border-l border-r border-divider"> 623 <div class="group"> 624<a href="/blog/v7-feature-complete-update" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 625 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 626 Jan 17, 2026 627 </span> 628 <div class="flex-1"> 629 <div class="mb-6 max-w-xl"> 630 <h2 631 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 632 > 633 AdonisJS v7 is feature-complete and entering final validation 634 </h2> 635 <p class="text-14 text-foreground-muted tracking-wide">AdonisJS v7 has reached its final form with stable APIs, revamped documentation, and a small breaking changes surface. Insiders can start building today.</p> 636 </div> 637 <div class="flex justify-between items-center"> 638 <div class="flex items-center gap-1.5"> 639 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 640 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 641 </span> 642 <span class="text-13 text-foreground-muted">Harminder Virk</span> 643 </div> 644 </div> 645 </div> 646</a> 647 648 </div> 649 </article> 650 <article class="not-last:border-b border-l border-r border-divider"> 651 <div class="group"> 652<a href="/blog/frameworks-in-the-era-of-ai" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 653 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 654 Jan 08, 2026 655 </span> 656 <div class="flex-1"> 657 <div class="mb-6 max-w-xl"> 658 <h2 659 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 660 > 661 Batteries-included frameworks in the era of AI 662 </h2> 663 <p class="text-14 text-foreground-muted tracking-wide">Built a production checkout flow in one evening with Claude. It worked because the framework had already made the hard decisions. AI filled in the rest.</p> 664 </div> 665 <div class="flex justify-between items-center"> 666 <div class="flex items-center gap-1.5"> 667 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 668 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 669 </span> 670 <span class="text-13 text-foreground-muted">Harminder Virk</span> 671 </div> 672 </div> 673 </div> 674</a> 675 676 </div> 677 </article> 678 <article class="not-last:border-b border-l border-r border-divider"> 679 <div class="group"> 680<a href="/blog/introduction-adonisjs-opentelemetry" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 681 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 682 Dec 20, 2025 683 </span> 684 <div class="flex-1"> 685 <div class="mb-6 max-w-xl"> 686 <h2 687 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 688 > 689 Introducing OpenTelemetry support in AdonisJS 690 </h2> 691 <p class="text-14 text-foreground-muted tracking-wide">Your application is slow. But where exactly? Is it the database query? The external API call? That one service that sometimes takes forever? Without proper observability, you're left guessing.</p> 692 </div> 693 <div class="flex justify-between items-center"> 694 <div class="flex items-center gap-1.5">
695 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 696 <img src="/assets/julien-CIcR1ts-.png" alt="julien-ripouteau" /> 697 </span> 698 <span class="text-13 text-foreground-muted">julien-ripouteau</span> 699 </div> 700 </div> 701 </div> 702</a> 703 704 </div> 705 </article> 706 <article class="not-last:border-b border-l border-r border-divider"> 707 <div class="group"> 708<a href="/blog/adonisjs-native-response-readablestream-support" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 709 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 710 Dec 05, 2025 711 </span> 712 <div class="flex-1"> 713 <div class="mb-6 max-w-xl"> 714 <h2 715 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 716 > 717 Supporting Platform-Native Response and ReadableStream in AdonisJS 718 </h2> 719 <p class="text-14 text-foreground-muted tracking-wide">We've added support for returning platform-native Response objects and ReadableStream instances directly from your route handlers.</p> 720 </div> 721 <div class="flex justify-between items-center"> 722 <div class="flex items-center gap-1.5"> 723 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 724 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 725 </span> 726 <span class="text-13 text-foreground-muted">Harminder Virk</span> 727 </div> 728 </div> 729 </div> 730</a> 731 732 </div> 733 </article> 734 <article class="not-last:border-b border-l border-r border-divider"> 735 <div class="group"> 736<a href="/blog/adonisjs-v7-progress-update" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 737 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 738 Nov 13, 2025 739 </span> 740 <div class="flex-1"> 741 <div class="mb-6 max-w-xl"> 742 <h2 743 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 744 > 745 AdonisJS v7: State of Things 746 </h2> 747 <p class="text-14 text-foreground-muted tracking-wide">We have made over 20 releases targeting AdonisJS v7 since last month. Many of these are bug fixes, small improvements , and internal APIs needed by the framework core and official packages.</p> 748 </div> 749 <div class="flex justify-between items-center"> 750 <div class="flex items-center gap-1.5"> 751 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 752 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 753 </span> 754 <span class="text-13 text-foreground-muted">Harminder Virk</span> 755 </div> 756 </div> 757 </div> 758</a> 759 760 </div> 761 </article> 762 <article class="not-last:border-b border-l border-r border-divider"> 763 <div class="group"> 764<a href="/blog/rethinking-starter-kits" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 765 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 766 Oct 24, 2025 767 </span> 768 <div class="flex-1"> 769 <div class="mb-6 max-w-xl"> 770 <h2 771 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 772 > 773 Building from the Base Up: Rethinking Starter Kits in AdonisJS 774 </h2> 775 <p class="text-14 text-foreground-muted tracking-wide">We have recently updated the Hypermedia Starter Kit for AdonisJS v7 . This release includes a set of base components â such as buttons, form fields, avatars, and layouts â along with a simple signup and login system to help you get started quickly.</p> 776 </div> 777 <div class="flex justify-between items-center"> 778 <div class="flex items-center gap-1.5">
779 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 780 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 781 </span> 782 <span class="text-13 text-foreground-muted">Harminder Virk</span> 783 </div> 784 </div> 785 </div> 786</a> 787 788 </div> 789 </article> 790 <article class="not-last:border-b border-l border-r border-divider"> 791 <div class="group"> 792<a href="/blog/a-decade-of-adonisjs-and-the-future" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 793 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 794 Sep 26, 2025 795 </span> 796 <div class="flex-1"> 797 <div class="mb-6 max-w-xl"> 798 <h2 799 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 800 > 801 10 Years of AdonisJS â A Personal Reflection and Whatâs Next 802 </h2> 803 <p class="text-14 text-foreground-muted tracking-wide">AdonisJS has just completed 10 years. A full decade of writing code, fixing bugs, rewriting parts of the framework, and slowly shaping it into something developers can trust and enjoy using.</p> 804 </div> 805 <div class="flex justify-between items-center"> 806 <div class="flex items-center gap-1.5"> 807 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 808 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 809 </span> 810 <span class="text-13 text-foreground-muted">Harminder Virk</span> 811 </div> 812 </div> 813 </div> 814</a> 815 816 </div> 817 </article> 818 <article class="not-last:border-b border-l border-r border-divider"> 819 <div class="group"> 820<a href="/blog/roadmap-to-adonisjs-7" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 821 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 822 Jun 23, 2025 823 </span> 824 <div class="flex-1"> 825 <div class="mb-6 max-w-xl"> 826 <h2 827 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 828 > 829 Roadmap to AdonisJS 7 830 </h2> 831 <p class="text-14 text-foreground-muted tracking-wide">It has been a while since we published our last article. We've been cooking 'undercover' for quite some time, and we're excited to finally share with you the roadmap to AdonisJS 7.</p> 832 </div> 833 <div class="flex justify-between items-center"> 834 <div class="flex items-center gap-1.5"> 835 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 836 <img src="/assets/romain-CyetScJZ.jpeg" alt="romainlanz" /> 837 </span> 838 <span class="text-13 text-foreground-muted">romainlanz</span> 839 </div> 840 </div> 841 </div> 842</a> 843 844 </div> 845 </article> 846 <article class="not-last:border-b border-l border-r border-divider"> 847 <div class="group"> 848<a href="/blog/introducing-tuyau" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 849 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 850 Oct 27, 2024 851 </span> 852 <div class="flex-1"> 853 <div class="mb-6 max-w-xl"> 854 <h2 855 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 856 > 857 Tuyau - An E2E client for your AdonisJS APIs 858 </h2> 859 <p class="text-14 text-foreground-muted tracking-wide">We are super excited to announce the first release of Tuyau . Tuyau is a collection of libraries that provides you with a type-safe request client, type-safe Inertia Link helpers, and an Open-API spec generator.</p> 860 </div> 861 <div class="flex justify-between items-center"> 862 <div class="flex items-center gap-1.5">
863 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 864 <img src="/assets/julien-CIcR1ts-.png" alt="julien-ripouteau" /> 865 </span> 866 <span class="text-13 text-foreground-muted">julien-ripouteau</span> 867 </div> 868 </div> 869 </div> 870</a> 871 872 </div> 873 </article> 874 <article class="not-last:border-b border-l border-r border-divider"> 875 <div class="group"> 876<a href="/blog/upgrading-eslint-typescript-setup" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 877 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 878 Sep 01, 2024 879 </span> 880 <div class="flex-1"> 881 <div class="mb-6 max-w-xl"> 882 <h2 883 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 884 > 885 Upgrading ESLint and TypeScript setup 886 </h2> 887 <p class="text-14 text-foreground-muted tracking-wide">In this post, we will upgrade the tooling config of an AdonisJS application to use the latest version of ESLint, move to the maintained fork of ts-node, and update the prettier config to format Edge templates.</p> 888 </div> 889 <div class="flex justify-between items-center"> 890 <div class="flex items-center gap-1.5"> 891 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 892 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 893 </span> 894 <span class="text-13 text-foreground-muted">Harminder Virk</span> 895 </div> 896 </div> 897 </div> 898</a> 899 900 </div> 901 </article> 902 <article class="not-last:border-b border-l border-r border-divider"> 903 <div class="group"> 904<a href="/blog/send-real-time-updates-with-transmit" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 905 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 906 Jun 04, 2024 907 </span> 908 <div class="flex-1"> 909 <div class="mb-6 max-w-xl"> 910 <h2 911 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 912 > 913 Send real-time updates with Transmit 914 </h2> 915 <p class="text-14 text-foreground-muted tracking-wide">Transmit is a new package in the AdonisJS family. Its goal is to provide an opinionated way of using Server-Sent Events (SSE).</p> 916 </div> 917 <div class="flex justify-between items-center"> 918 <div class="flex items-center gap-1.5"> 919 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 920 <img src="/assets/romain-CyetScJZ.jpeg" alt="romainlanz" /> 921 </span> 922 <span class="text-13 text-foreground-muted">romainlanz</span> 923 </div> 924 </div> 925 </div> 926</a> 927 928 </div> 929 </article> 930 <article class="not-last:border-b border-l border-r border-divider"> 931 <div class="group"> 932<a href="/blog/april-2024-updates" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 933 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 934 May 09, 2024 935 </span> 936 <div class="flex-1"> 937 <div class="mb-6 max-w-xl"> 938 <h2 939 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 940 > 941 Updates from April 2024 942 </h2> 943 <p class="text-14 text-foreground-muted tracking-wide">As we enter May, it's a great opportunity to reflect on the recent enhancements and updates made to AdonisJS last month.</p> 944 </div> 945 <div class="flex justify-between items-center"> 946 <div class="flex items-center gap-1.5">
947 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 948 <img src="/assets/julien-CIcR1ts-.png" alt="julien-ripouteau" /> 949 </span> 950 <span class="text-13 text-foreground-muted">julien-ripouteau</span> 951 </div> 952 </div> 953 </div> 954</a> 955 956 </div> 957 </article> 958 <article class="not-last:border-b border-l border-r border-divider"> 959 <div class="group"> 960<a href="/blog/hmr-in-adonisjs" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 961 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 962 Apr 23, 2024 963 </span> 964 <div class="flex-1"> 965 <div class="mb-6 max-w-xl"> 966 <h2 967 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 968 > 969 Hot module replacement (HMR) in AdonisJS 970 </h2> 971 <p class="text-14 text-foreground-muted tracking-wide">We're thrilled to announce that HMR is now available in AdonisJS! Before anything, let me quickly explain what this enables.</p> 972 </div> 973 <div class="flex justify-between items-center"> 974 <div class="flex items-center gap-1.5"> 975 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 976 <img src="/assets/julien-CIcR1ts-.png" alt="julien-ripouteau" /> 977 </span> 978 <span class="text-13 text-foreground-muted">julien-ripouteau</span> 979 </div> 980 </div> 981 </div> 982</a> 983 984 </div> 985 </article> 986 <article class="not-last:border-b border-l border-r border-divider"> 987 <div class="group"> 988<a href="/blog/march-2024-updates" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 989 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 990 Apr 01, 2024 991 </span> 992 <div class="flex-1"> 993 <div class="mb-6 max-w-xl"> 994 <h2 995 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 996 > 997 Updates from March 2024 998 </h2> 999 <p class="text-14 text-foreground-muted tracking-wide">Github now recognizes the syntax of Edge templates and provides syntax highlighting for them. This contribution is made by Liam Potter (a long-time AdonisJS user) via this PR .</p> 1000 </div> 1001 <div class="flex justify-between items-center"> 1002 <div class="flex items-center gap-1.5"> 1003 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1004 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 1005 </span> 1006 <span class="text-13 text-foreground-muted">Harminder Virk</span> 1007 </div> 1008 </div> 1009 </div> 1010</a> 1011 1012 </div> 1013 </article> 1014 <article class="not-last:border-b border-l border-r border-divider"> 1015 <div class="group"> 1016<a href="/blog/experimental-release-for-inertia" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1017 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1018 Mar 05, 2024 1019 </span> 1020 <div class="flex-1"> 1021 <div class="mb-6 max-w-xl"> 1022 <h2 1023 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1024 > 1025 Announcing Inertia adapter for AdonisJS 1026 </h2> 1027 <p class="text-14 text-foreground-muted tracking-wide">We are pleased to announce that the Inertia adapter for AdonisJS is now available as an experimental version with full support for SSR.</p> 1028 </div> 1029 <div class="flex justify-between items-center"> 1030 <div class="flex items-center gap-1.5">
1031 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1032 <img src="/assets/julien-CIcR1ts-.png" alt="julien-ripouteau" /> 1033 </span> 1034 <span class="text-13 text-foreground-muted">julien-ripouteau</span> 1035 </div> 1036 </div> 1037 </div> 1038</a> 1039 1040 </div> 1041 </article> 1042 <article class="not-last:border-b border-l border-r border-divider"> 1043 <div class="group"> 1044<a href="/blog/february-2024-updates" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1045 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1046 Feb 29, 2024 1047 </span> 1048 <div class="flex-1"> 1049 <div class="mb-6 max-w-xl"> 1050 <h2 1051 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1052 > 1053 Updates from February 2024 1054 </h2> 1055 <p class="text-14 text-foreground-muted tracking-wide">It's been a month since the major release of AdonisJS v6, and we had a lot going on during this month. Some of the work has been shipped, and some are under the experimental phase and will be released soon.</p> 1056 </div> 1057 <div class="flex justify-between items-center"> 1058 <div class="flex items-center gap-1.5"> 1059 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1060 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 1061 </span> 1062 <span class="text-13 text-foreground-muted">Harminder Virk</span> 1063 </div> 1064 </div> 1065 </div> 1066</a> 1067 1068 </div> 1069 </article> 1070 <article class="not-last:border-b border-l border-r border-divider"> 1071 <div class="group"> 1072<a href="/blog/kysely-with-auth-session-guard" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1073 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1074 Feb 17, 2024 1075 </span> 1076 <div class="flex-1"> 1077 <div class="mb-6 max-w-xl"> 1078 <h2 1079 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1080 > 1081 Integrating Kysely with the Auth session guard 1082 </h2> 1083 <p class="text-14 text-foreground-muted tracking-wide">In the last post, we setup Kysely inside an AdonisJS application with commands to make, run, and rollback migrations. In this post, we will take a step ahead and integrate Kysely with the AdonisJS auth package.</p> 1084 </div> 1085 <div class="flex justify-between items-center"> 1086 <div class="flex items-center gap-1.5"> 1087 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1088 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 1089 </span> 1090 <span class="text-13 text-foreground-muted">Harminder Virk</span> 1091 </div> 1092 </div> 1093 </div> 1094</a> 1095 1096 </div> 1097 </article> 1098 <article class="not-last:border-b border-l border-r border-divider"> 1099 <div class="group"> 1100<a href="/blog/future-plans-for-adonisjs-6" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1101 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1102 Feb 16, 2024 1103 </span> 1104 <div class="flex-1"> 1105 <div class="mb-6 max-w-xl"> 1106 <h2 1107 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1108 > 1109 Future plans for AdonisJS v6 1110 </h2> 1111 <p class="text-14 text-foreground-muted tracking-wide">We have just released AdonisJS v6 with many new features and improvements. This release was a big milestone, as we have been working on it for the last year. We have shipped a lot of new improvements and features in this release, but we have a lot more in the pipeline.</p> 1112 </div> 1113 <div class="flex justify-between items-center"> 1114 <div class="flex items-center gap-1.5">
1115 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1116 <img src="/assets/julien-CIcR1ts-.png" alt="julien-ripouteau" /> 1117 </span> 1118 <span class="text-13 text-foreground-muted">julien-ripouteau</span> 1119 </div> 1120 </div> 1121 </div> 1122</a> 1123 1124 </div> 1125 </article> 1126 <article class="not-last:border-b border-l border-r border-divider"> 1127 <div class="group"> 1128<a href="/blog/kysely-with-adonisjs" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1129 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1130 Feb 02, 2024 1131 </span> 1132 <div class="flex-1"> 1133 <div class="mb-6 max-w-xl"> 1134 <h2 1135 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1136 > 1137 Setting up Kysely inside an AdonisJS project 1138 </h2> 1139 <p class="text-14 text-foreground-muted tracking-wide">AdonisJS comes pre-configured with our home-grown ORM Lucid. While Lucid shines on many fronts, it does not have a type-safe API for constructing SQL queries.</p> 1140 </div> 1141 <div class="flex justify-between items-center"> 1142 <div class="flex items-center gap-1.5"> 1143 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1144 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 1145 </span> 1146 <span class="text-13 text-foreground-muted">Harminder Virk</span> 1147 </div> 1148 </div> 1149 </div> 1150</a> 1151 1152 </div> 1153 </article> 1154 <article class="not-last:border-b border-l border-r border-divider"> 1155 <div class="group"> 1156<a href="/blog/use-tsx-for-your-template-engine" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1157 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1158 Jan 31, 2024 1159 </span> 1160 <div class="flex-1"> 1161 <div class="mb-6 max-w-xl"> 1162 <h2 1163 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1164 > 1165 Use TSX for your template engine 1166 </h2> 1167 <p class="text-14 text-foreground-muted tracking-wide">Seven years ago, we decided to build Edge, our templating engine. We created it to ensure longevity, speed, and extensibility.</p> 1168 </div> 1169 <div class="flex justify-between items-center"> 1170 <div class="flex items-center gap-1.5"> 1171 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1172 <img src="/assets/romain-CyetScJZ.jpeg" alt="romainlanz" /> 1173 </span> 1174 <span class="text-13 text-foreground-muted">romainlanz</span> 1175 </div> 1176 </div> 1177 </div> 1178</a> 1179 1180 </div> 1181 </article> 1182 <article class="not-last:border-b border-l border-r border-divider"> 1183 <div class="group"> 1184<a href="/blog/adonisjs-6-one-step-closer-to-the-release" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1185 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1186 Oct 09, 2023 1187 </span> 1188 <div class="flex-1"> 1189 <div class="mb-6 max-w-xl"> 1190 <h2 1191 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1192 > 1193 AdonisJS v6 - One Step Closer to the Release 1194 </h2> 1195 <p class="text-14 text-foreground-muted tracking-wide">On July 24th, we announced the availability of AdonisJS 6 in its 'alpha state' exclusively for our sponsors to explore the framework and provide valuable feedback.</p> 1196 </div> 1197 <div class="flex justify-between items-center"> 1198 <div class="flex items-center gap-1.5">
1199 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1200 <img src="/assets/romain-CyetScJZ.jpeg" alt="romainlanz" /> 1201 </span> 1202 <span class="text-13 text-foreground-muted">romainlanz</span> 1203 </div> 1204 </div> 1205 </div> 1206</a> 1207 1208 </div> 1209 </article> 1210 <article class="not-last:border-b border-l border-r border-divider"> 1211 <div class="group"> 1212<a href="/blog/what-to-expect-of-adonisjs-6" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1213 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1214 Jul 04, 2023 1215 </span> 1216 <div class="flex-1"> 1217 <div class="mb-6 max-w-xl"> 1218 <h2 1219 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1220 > 1221 What to Expect of AdonisJS 6? 1222 </h2> 1223 <p class="text-14 text-foreground-muted tracking-wide">If you have been following us on Twitter, you might have seen us talking about AdonisJS v6 - âA new major version of the AdonisJS frameworkâ. We've spent four years in the AdonisJS v5 era, and it's time to move to the AdonisJS v6 era with some fresh ideas.</p> 1224 </div> 1225 <div class="flex justify-between items-center"> 1226 <div class="flex items-center gap-1.5"> 1227 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1228 <img src="/assets/romain-CyetScJZ.jpeg" alt="romainlanz" /> 1229 </span> 1230 <span class="text-13 text-foreground-muted">romainlanz</span> 1231 </div> 1232 </div> 1233 </div> 1234</a> 1235 1236 </div> 1237 </article> 1238 <article class="not-last:border-b border-l border-r border-divider"> 1239 <div class="group"> 1240<a href="/blog/adonisjs-v6-announcement" class="block md:flex gap-30 px-5 py-10 sm:p-12 hover:bg-control"> 1241 <span class="text-14 text-foreground-muted mb-4 block pt-2"> 1242 Jan 24, 2024 1243 </span> 1244 <div class="flex-1"> 1245 <div class="mb-6 max-w-xl"> 1246 <h2 1247 class="text-22 font-sans! mb-3 leading-9 text-foreground pr-4 group-hover:underline" 1248 > 1249 Announcing AdonisJS v6 1250 </h2> 1251 <p class="text-14 text-foreground-muted tracking-wide">Alright, sit tight, as this will be a long article. The work for v6 started with the goal of moving to ESM and improving the IoC container to be simple and have fewer responsibilities.</p> 1252 </div> 1253 <div class="flex justify-between items-center"> 1254 <div class="flex items-center gap-1.5"> 1255 <span class="w-6 h-6 overflow-auto rounded-full border border-line"> 1256 <img src="/assets/virk-BCyoMUn5.png" alt="Harminder Virk" /> 1257 </span> 1258 <span class="text-13 text-foreground-muted">Harminder Virk</span> 1259 </div> 1260 </div> 1261 </div> 1262</a> 1263 1264 </div> 1265 </article> 1266 </section></div> 1267 </div> 1268</section> 1269</main> 1270 1271<div class="border-t border-divider"> 1272 <div class="container mx-auto px-5 lg:px-10 pt-15 md:pt-30 lg:border-x border-divider"> 1273 <div class="lg:px-22.5 mb-30 md:mb-52 space-y-7 sm:space-y-5"> 1274 <div class="flex flex-col sm:flex-row gap-1.5 sm:gap-3"> 1275 <label class="text-14 text-foreground tracking-wide">VSCode Extensions</label> 1276 <div class="flex-1 border-b border-dashed border-line sm:mb-1.5"></div> 1277 <div class="flex flex-wrap gap-5.5 text-14"> 1278 1279<a href="https://marketplace.visualstudio.com/items?itemName=jripouteau.adonis-vscode-extension" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5" rel="noopener noreferrer" target="_blank"> 1280 AdonisJS 1281</a> 1282 1283 1284<a href="https://marketplace.visualstudio.com/items?itemName=AdonisJS.vscode-edge" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5" rel="noopener noreferrer" target="_blank"> 1285 Edge 1286</a> 1287 1288 1289<a href="https://marketplace.visualstudio.com/items?itemName=jripouteau.japa-vscode" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5" rel="noopener noreferrer" target="_blank"> 1290 Japa 1291</a> 1292 1293 </div> 1294 </div> 1295 <div class="flex flex-col sm:flex-row gap-1.5 sm:gap-3"> 1296 <label class="text-14 text-foreground tracking-wide">Community</label> 1297 <div class="flex-1 border-b border-dashed border-line sm:mb-1.5"></div> 1298 <div class="flex flex-wrap gap-5.5 text-14"> 1299 1300<a href="https://discord.com/invite/vDcEjq6" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5" rel="noopener noreferrer" target="_blank"> 1301 Discord 1302</a> 1303 1304 1305<a href="https://x.com/adonisframework" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5" rel="noopener noreferrer" target="_blank"> 1306 Twitter 1307</a> 1308 1309 1310<a href="https://github.com/adonisjs" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5" rel="noopener noreferrer" target="_blank"> 1311 GitHub 1312</a> 1313 1314 1315<a href="https://github.com/orgs/adonisjs/discussions" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5" rel="noopener noreferrer" target="_blank"> 1316 Forum 1317</a> 1318 1319 </div> 1320 </div> 1321 <div class="flex flex-col sm:flex-row gap-1.5 sm:gap-3"> 1322 <label class="text-14 text-foreground tracking-wide">Resources</label> 1323 <div class="flex-1 border-b border-dashed border-line sm:mb-1.5"></div> 1324 <div class="flex flex-wrap gap-5.5 text-14"> 1325 1326<a href="/stories" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1327 Stories 1328</a> 1329 1330 1331<a href="/about" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1332 About 1333</a> 1334 1335 1336<a href="/roadmap" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1337 Roadmap 1338</a> 1339 1340 1341<a href="/blog" class="current relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1342 Blog 1343</a> 1344 1345 1346<a href="/packages" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1347 Packages 1348</a> 1349 1350 1351<a href="/contributors" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1352 Contributors 1353</a> 1354 1355 1356<a href="/support" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1357 Support 1358</a> 1359 1360 1361<a href="/brand" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1362 Brand 1363</a> 1364 1365 1366<a href="/sponsor" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1367 Sponsor 1368</a> 1369 1370 1371<a href="/team" class="relative hover:text-foreground transition-colors not-last:after:content-['/'] after:pointer-events-none after:text-foreground-muted after:absolute after:-right-3.5"> 1372 Team 1373</a> 1374 1375 </div> 1376 </div> 1377 </div> 1378 1379 <div> 1380 <div> 1381 <svg 1382 class="w-full" 1383 xmlns="http://www.w3.org/2000/svg" 1384 width="1248"
1385 viewBox="0 0 1248 277" 1386 fill="none" 1387 > 1388 <mask 1389 id="b" 1390 style="mask-type:alpha" 1391 maskUnits="userSpaceOnUse" 1392 x="0" 1393 y="0" 1394 width="1248" 1395 height="281" 1396 > 1397 <g clip-path="url(#a)" fill="var(--color-border)"> 1398 <path 1399 d="M1162.91 280.9c-28.36 0-50.9-5.698-67.62-17.094-16.71-11.395-25.83-27.096-27.35-47.102h50.9c1.27 8.61 5.58 15.195 12.92 19.753 7.6 4.305 17.98 6.457 31.15 6.457 11.9 0 20.51-1.646 25.83-4.938 5.57-3.545 8.36-8.483 8.36-14.814 0-4.812-1.65-8.483-4.94-11.016-3.04-2.785-8.74-5.064-17.09-6.837l-31.15-6.458c-23.05-4.811-40.02-12.028-50.91-21.651-10.89-9.876-16.33-22.538-16.33-37.985 0-18.74 7.22-33.301 21.65-43.684 14.44-10.635 34.57-15.953 60.4-15.953 25.58 0 45.97 5.191 61.16 15.574 15.2 10.129 23.55 24.31 25.07 42.543h-50.9c-1.01-6.584-4.56-11.522-10.64-14.814-6.08-3.545-14.69-5.318-25.83-5.318-10.13 0-17.73 1.519-22.79 4.558-4.81 2.786-7.22 6.837-7.22 12.155 0 4.559 2.03 8.231 6.08 11.016 4.05 2.532 10.76 4.812 20.13 6.837l34.95 7.218c19.5 4.051 34.19 11.649 44.07 22.791 10.13 10.889 15.19 23.804 15.19 38.745 0 18.992-7.47 33.807-22.41 44.443-14.69 10.382-35.58 15.574-62.68 15.574ZM983.38 281.091V87.366h56.98v193.725h-56.98Zm-1.9-219.555V0h60.78v61.536h-60.78ZM750.413 281.101V87.376h55.84v45.582h1.14v148.143h-56.98Zm134.853 0V161.068c0-10.636-2.785-18.613-8.357-23.931-5.318-5.318-13.169-7.977-23.552-7.977-8.863 0-16.841 2.026-23.931 6.078-6.838 4.051-12.283 9.622-16.335 16.713-3.799 7.091-5.698 15.447-5.698 25.07l-4.938-46.722c6.331-14.181 15.574-25.45 27.73-33.806 12.409-8.61 27.604-12.915 45.585-12.915 21.526 0 37.987 6.077 49.383 18.233 11.396 11.902 17.094 27.982 17.094 48.241v131.049h-56.981ZM613.1 280.9c-21.272 0-40.013-4.179-56.22-12.536-15.955-8.61-28.491-20.512-37.608-35.706-8.863-15.447-13.295-33.174-13.295-53.179 0-20.006 4.432-37.479 13.295-52.42 9.117-14.941 21.653-26.589 37.608-34.946 16.207-8.357 34.948-12.535 56.22-12.535 21.526 0 40.267 4.178 56.221 12.535 16.208 8.357 28.744 20.005 37.607 34.946 8.864 14.941 13.296 32.414 13.296 52.42 0 20.005-4.559 37.732-13.676 53.179-8.863 15.194-21.399 27.096-37.607 35.706-15.954 8.357-34.568 12.536-55.841 12.536Zm0-44.823c8.864 0 16.841-2.279 23.932-6.837 7.344-4.559 13.169-11.016 17.474-19.373 4.305-8.61 6.458-18.866 6.458-30.768 0-17.473-4.685-30.895-14.055-40.264-9.117-9.623-20.387-14.435-33.809-14.435-13.422 0-24.818 4.812-34.188 14.435-9.117 9.623-13.675 23.044-13.675 40.264 0 11.902 2.152 22.158 6.458 30.768 4.305 8.357 10.003 14.814 17.094 19.373 7.344 4.558 15.448 6.837 24.311 6.837ZM419.774 280.902v-46.721l3.799.759c-2.533 13.928-10.13 25.07-22.793 33.427-12.409 8.357-27.35 12.535-44.824 12.535-17.728 0-33.176-4.051-46.345-12.155-12.915-8.357-22.918-20.005-30.009-34.946-7.091-14.941-10.637-32.541-10.637-52.8 0-20.512 3.672-38.365 11.017-53.559 7.344-15.194 17.6-26.969 30.769-35.326 13.422-8.357 28.997-12.535 46.724-12.535 18.487 0 33.429 4.3
139905 44.825 12.915 11.649 8.61 18.487 20.385 20.513 35.326l-4.179.38V3.61h56.981v277.292h-55.841Zm-45.585-45.582c13.422 0 24.312-4.685 32.669-14.054 8.357-9.623 12.536-23.298 12.536-41.024 0-17.727-4.305-31.275-12.916-40.645-8.357-9.623-19.373-14.434-33.048-14.434-13.169 0-24.059 4.811-32.669 14.434-8.357 9.623-12.536 23.298-12.536 41.024 0 17.727 4.179 31.275 12.536 40.645 8.61 9.369 19.753 14.054 33.428 14.054ZM0 281.104 98.007 7.61h50.142L58.12 281.104H0Zm200.572 0L110.922 7.61h52.422l98.007 273.494h-60.779ZM51.662 175.125H205.13v45.583H51.662v-45.583Z" 1400 ></path> 1401 </g> 1402 </mask> 1403 <g mask="url(#b)"> 1404 <path fill="url(#c)" d="M0 0h1248v282H0z"></path> 1405 </g> 1406 <defs> 1407 <linearGradient 1408 id="c" 1409 x1="662.5" 1410 y1="-55.5" 1411 x2="668.5" 1412 y2="282" 1413 gradientUnits="userSpaceOnUse" 1414 > 1415 <stop stop-color="var(--color-dots)"></stop> 1416 <stop offset="1" stop-color="var(--color-card)"></stop> 1417 </linearGradient> 1418 <clipPath id="a"> 1419 <path fill="#fff" d="M0 0h1248v281H0z"></path> 1420 </clipPath> 1421 </defs> 1422 </svg> 1423 </div> 1424 </div> 1425 </div> 1426</div> 1427 1428
1428<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"b3fcabc4c85744c3924d25d13183af75","r":1,"spa":2}' crossorigin="anonymous"></script>
1428 1429</body> 1430</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.