PageSourceSearch

https://adonisjs.com/blog

html adonisjs.com collected 2026-10-02 16:27:33 UTC 74,888 bytes, 1,430 lines download raw bytes

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&#x27;m teaching AI to write AdonisJS the way I would
522                  </h2>
523                  <p class="text-14 text-foreground-muted tracking-wide">AI doesn&#x27;t just need to know about the framework. It needs to be told how to engineer with it. Here&#x27;s where I&#x27;ve landed, and what&#x27;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&#x27;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&#x27;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&#x27;ve been cooking &#x27;undercover&#x27; for quite some time, and we&#x27;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&#x27;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&#x27;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&#x27;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 &#x27;alpha state&#x27; 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&#x27;ve spent four years in the AdonisJS v5 era, and it&#x27;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.