PageSourceSearch

https://adonisjs.com/about

html adonisjs.com collected 2026-10-02 16:27:34 UTC 43,858 bytes, 823 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>About AdonisJS - Framework philosophy and values</title><meta name="description" content="Learn about the philosophy behind AdonisJS. Why we built a batteries-included framework and how we&#x27;re fixing the JavaScript ecosystem" />
7<link rel="canonical" href="https://adonisjs.com/about" />
8<meta name="twitter:title" content="About AdonisJS - Framework philosophy and values" />
9<meta name="twitter:description" content="Learn about the philosophy behind AdonisJS. Why we built a batteries-included framework and how we&#x27;re fixing the JavaScript ecosystem" />
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="About AdonisJS - Framework philosophy and values" />
14<meta property="og:description" content="Learn about the philosophy behind AdonisJS. Why we built a batteries-included framework and how we&#x27;re fixing the JavaScript ecosystem" />
15<meta property="og:url" content="https://adonisjs.com/about" />
16  <meta name="twitter:image" content="https://adonisjs.com/assets/about-CnTlorJY.jpg" />
17  <meta property="og:image" content="https://adonisjs.com/assets/about-CnTlorJY.jpg" />
18
19<meta property="og:type" content="profile" />
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="md:text-sm hover:text-foreground transition-colors text-foreground-muted">
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="current md:text-sm hover:text-foreground transition-colors text-foreground">
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="md:text-sm hover:text-foreground transition-colors text-foreground-muted">
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="current md:text-sm hover:text-foreground transition-colors text-foreground">
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="container mx-auto">
347  <div
348    class="lg:border-l lg:border-r border-divider bg-docs-pattern bg-no-repeat bg-top-bottom grid lg:grid-cols-[300px_1fr] relative"
349  >
350<aside
351  class="px-5 pt-8 lg:pt-14 lg:pl-28 lg:pr-0 lg:sticky lg:top-18 self-start whitespace-nowrap overflow-auto lg:mb-6"
352>
353  <span class="hidden lg:block uppercase text-12 font-mono text-foreground mb-4">Adonisjs</span>
354  <nav>
355    <ul
356      class="flex lg:flex-col gap-5 lg:gap-2.5 border-b lg:border-none border-divider overflow-x-auto"
357    >
358        <li class="flex-1 md:flex-initial">
359<a href="/about" class="current text-center lg:text-left block py-3 lg:py-1 text-sm transition-colors relative text-accent-text font-medium before:absolute before:right-0 before:bottom-0 lg:before:top-0 before:w-full lg:before:w-auto before:border-b-2 lg:before:border-r-2 before:border-indigo-500">
360              <span>About</span>
361</a>
362
363        </li>
364        <li class="flex-1 md:flex-initial">
365<a href="/team" class="text-center lg:text-left block py-3 lg:py-1 text-sm transition-colors relative text-foreground-muted hover:text-foreground">
366              <span>Team</span>
367</a>
368
369        </li>
370        <li class="flex-1 md:flex-initial">
371<a href="/contributors" class="text-center lg:text-left block py-3 lg:py-1 text-sm transition-colors relative text-foreground-muted hover:text-foreground">
372              <span>Contributors</span>
373</a>
374
375        </li>
376        <li class="flex-1 md:flex-initial">
377<a href="/roadmap" class="text-center lg:text-left block py-3 lg:py-1 text-sm transition-colors relative text-foreground-muted hover:text-foreground">
378              <span>Roadmap</span>
379</a>
380
381        </li>
382        <li class="flex-1 md:flex-initial">
383<a href="/sponsor" class="text-center lg:text-left block py-3 lg:py-1 text-sm transition-colors relative text-foreground-muted hover:text-foreground">
384              <span>Sponsor</span>
385</a>
386
387        </li>
388        <li class="flex-1 md:flex-initial">
389<a href="/brand" class="text-center lg:text-left block py-3 lg:py-1 text-sm transition-colors relative text-foreground-muted hover:text-foreground">
390              <span>Brand</span>
391</a>
392
393        </li>
394    </ul>
395  </nav>
396</aside>
397
398    <section class="info-layout lg:border-l border-divider pt-9 lg:pt-14 pb-20">
399      <div class="max-w-4xl px-5 lg:px-20 pb-6">
400        <h1>Philosophy</h1>
401      <p>
402        If you're evaluating AdonisJS or curious about our approach to building a full-stack framework, this page explains the "why" behind our decisions.
403      </p>
404      <p>
405        We bring coherence, simplicity, and stability to full-stack JavaScript development without sacrificing the flexibility and power of the platform.
406      </p>
407      <p>
408        AdonisJS is independent and community-funded, with no company or venture money behind it. We build it in the open, for the long term.
409      </p><a
410  href="https://github.com/adonisjs/core"
411  target="_blank"
412  rel="noopener"
413  class="not-prose group mt-6 inline-flex items-center gap-2.5 rounded-lg border border-control-line bg-control px-3 py-1.5 hover:border-control-line-hover hover:bg-control-hover transition-colors"
414><svg width="16px" height="16px" viewBox="0 0 20 20" class="text-foreground"><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>
415  <span class="font-mono text-13 font-semibold text-foreground">Star</span>
416  <span class="h-4 w-px bg-line"></span>
417  <span class="flex items-center gap-1"><svg width="13px" height="13px" viewBox="0 0 24 24" class="text-yellow-400"><path fill="currentColor" d="m8.243 7.34l-6.38.925l-.113.023a1 1 0 0 0-.44 1.684l4.622 4.499l-1.09 6.355l-.013.11a1 1 0 0 0 1.464.944l5.706-3l5.693 3l.1.046a1 1 0 0 0 1.352-1.1l-1.091-6.355l4.624-4.5l.078-.085a1 1 0 0 0-.633-1.62l-6.38-.926l-2.852-5.78a1 1 0 0 0-1.794 0z"/></svg>
418    <span class="font-mono text-13 font-semibold text-foreground">19K</span>
419  </span>
420  <span class="sr-only">Star adonisjs/core on GitHub</span>
421</a>
422
423</div>
424
425<div class="px-5 pr-5 lg:px-20">
426  <h2>What AdonisJS stands for</h2>
427  <p>AdonisJS is an opinionated, TypeScript-first web framework for Node.js. We believe in:</p>
428  <div class="space-y-5 mt-5">
429<div
430  class="grid md:grid-cols-2 relative border border-line rounded-md bg-panel overflow-hidden"
431>
432  
433<div
434  class="flex flex-col px-5 md:px-8 pt-6 pb-6 md:pb-9 not-first:border-t md:not-first:border-t-0 md:not-first:border-l border-divider"
435>
436  <label class="card-title">
437      <span class="text-foreground mr-1.5">1.</span>    Stable over trendy
438  </label>
439          <p class="text-15">
440          We don't chase the most popular tool of the year. If you expect your framework to integrate with every new library that trends on Twitter, you'll spend the entire year switching tools and building zero features. We provide proven, stable solutions so you can focus on your application.
441        </p>
442</div>
443
444<div
445  class="flex flex-col px-5 md:px-8 pt-6 pb-6 md:pb-9 not-first:border-t md:not-first:border-t-0 md:not-first:border-l border-divider"
446>
447  <label class="card-title">
448      <span class="text-foreground mr-1.5">2.</span>    Cohesive over flexible
449  </label>
450          <p class="text-15">
451          Every part of AdonisJS is designed to work together. We don't give you 47 ways to do authentication. We give you one excellent way that covers 95% of use cases, with escape hatches for the rest. Our ORM knows about our validator, our validator knows about our forms, and our auth system integrates with both.
452        </p>
453</div>
454<svg
455  aria-hidden="true"
456  class="pointer-events-none absolute inset-0 size-full -z-1 fill-dots/50 stroke-dots/50 [mask-image:linear-gradient(to_top,_#ffffffad,_transparent)] opacity-[0.6]" size="10"
457>
458  <defs>
459    <pattern
460      id=":S1:"
461      width="10"
462      height="10"
463      patternUnits="userSpaceOnUse"
464      x="-1"
465      y="-1"
466    >
467      <path d="M.5 10V.5H10" fill="none" stroke-dasharray="0" />
468    </pattern>
469  </defs>
470  <rect width="100%" height="100%" stroke-width="0" fill="url(#:S1:)" />
471</svg>
472
473</div>
474
475<div
476  class="grid md:grid-cols-2 relative border border-line rounded-md bg-panel overflow-hidden"
477>
478  
479<div
480  class="flex flex-col px-5 md:px-8 pt-6 pb-6 md:pb-9 not-first:border-t md:not-first:border-t-0 md:not-first:border-l border-divider"
481>
482  <label class="card-title">
483      <span class="text-foreground mr-1.5">3.</span>    Productive over minimal
484  </label>
485          <p class="text-15">
486          You should spend your time building features, not wiring up packages. AdonisJS comes with everything you need: ORM, authentication, validation, mailer, queue, and more. All designed to work seamlessly together. You're not an integration engineer. You're an application developer.
487        </p>
488</div>
489
490<div
491  class="flex flex-col px-5 md:px-8 pt-6 pb-6 md:pb-9 not-first:border-t md:not-first:border-t-0 md:not-first:border-l border-divider"
492>
493  <label class="card-title">
494      <span class="text-foreground mr-1.5">4.</span>    Opinionated by design
495  </label>
496          <p class="text-15">
497          Frameworks should have opinions. When a framework tells you "here's how we do authentication" or "here's our recommended structure," that's liberating, not limiting. You stop making architectural decisions and start building features. Opinions create conventions, and conventions let teams move fast without constant debate.
498        </p>
499</div>
500<svg
501  aria-hidden="true"
502  class="pointer-events-none absolute inset-0 size-full -z-1 fill-dots/50 stroke-dots/50 [mask-image:linear-gradient(to_top,_#ffffffad,_transparent)] opacity-[0.6]" size="10"
503>
504  <defs>
505    <pattern
506      id=":S1:"
507      width="10"
508      height="10"
509      patternUnits="userSpaceOnUse"
510      x="-1"
511      y="-1"
512    >
513      <path d="M.5 10V.5H10" fill="none" stroke-dasharray="0" />
514    </pattern>
515  </defs>
516  <rect width="100%" height="100%" stroke-width="0" fill="url(#:S1:)" />
517</svg>
518
519</div>
520
521  </div>
522</div>
523
524<div class="max-w-4xl px-5 lg:px-20 pb-6">
525    <h2>The JavaScript ecosystem problem</h2>
526  <p>The JavaScript ecosystem is incredibly innovative, but it suffers from decision paralysis.</p>
527  <p>
528    Want to build a web application? You'll spend days choosing between dozens of ORMs, endless authentication solutions, competing validation libraries, and build tools. Then you'll spend weeks making them work together. Every project becomes a bespoke integration nightmare.
529  </p>
530  <p>
531    The "do one thing well" philosophy works for libraries, but frameworks need to do
532    <strong>everything</strong>
533    well, and do it cohesively.
534  </p>
535
536  <ul class="check space-y-4!">
537    <li>
538      <strong>
539        Fragmentation fatigue:
540      </strong>Multiple ORMs, dozens of authentication libraries, competing validation solutions, none designed to work together. You become an integration engineer instead of an application developer.
541    </li>
542    <li>
543      <strong>
544        Implicit knowledge debt:
545      </strong>Your project's architecture lives in the heads of whoever set it up. New developers spend weeks understanding why this specific combination of packages was chosen and how they're wired together.
546    </li>
547    <li>
548      <strong>
549        Update paralysis:
550      </strong>Upgrading one package breaks three others. Your carefully balanced house of cards can't move forward without days of testing and fixes.
551    </li>
552    <li>
553      <strong>
554        No cohesive vision:
555      </strong>Your validator doesn't know about your ORM. Your ORM doesn't know about your API serializer. Your auth system is isolated from everything. You're constantly writing glue code.
556    </li>
557  </ul>
558  <p>
559    The JavaScript ecosystem needed something different, something that works as a unified system, not a collection of parts.
560  </p>
561</div>
562
563
564<div class="max-w-4xl px-5 lg:px-20 pb-6">
565    <h2>Our approach</h2>
566  <ul class="check space-y-4!">
567    <li>
568      <strong>We eliminate fragmentation:</strong>
569      AdonisJS provides one excellent ORM, one authentication system, one validator, all designed to work together. You stop evaluating packages and start building features. There's no integration work because everything is already integrated.
570    </li>
571
572    <li>
573      <strong>We encode architectural decisions:</strong>
574      Project structure, where things go, how they connect: it's all documented and consistent across every AdonisJS application. New developers onboard in hours, not weeks, because the patterns are universal.
575    </li>
576
577    <li>
578      <strong>We own the integration:</strong>
579      When we update the validator, we test it with the ORM. When we update the ORM, we test it with auth. You upgrade AdonisJS, run your tests, and move on. No cascading breakage, no depen
579dency hell.
580    </li>
581    <li>
582      <strong>We build cohesive systems:</strong>
583      Our auth system, rate limiter, and session store all seamlessly integrate with the ORM. Our caching solution works with Redis out of the box. We've built an architecture that allows these integrations to happen cleanly, without leaking implementation details into your application code. Everything just works together
584    </li>
585
586    <li>
587      <strong>TypeScript-first, not TypeScript-bolted-on:</strong>
588      We're written in TypeScript, for TypeScript. Full type safety across your entire application, from database queries to HTTP responses to your frontend. End-to-end type safety means your API changes break at compile time, not in production. No
589      <code>any</code>
590      soup, no type gymnastics, no runtime surprises.
591    </li>
592
593    <li>
594      <strong>Modern primitives, not legacy baggage:</strong>
595      We embrace ESM modules, top-level await, and modern Node.js features. No CommonJS compatibility shims, no transpilation overhead unless you need it. We build for the JavaScript of today, not the JavaScript of 2015. If the platform provides it natively, we use it.
596    </li>
597
598    <li>
599      <strong>Documentation as a first-class feature:</strong>
600      If it's not documented, it doesn't exist. Our docs are comprehensive, searchable, and actually maintained. Every feature, every API, every decision is explained. We don't assume you'll read the source code. We write docs like they're the only way you'll learn the framework.
601    </li>
602
603    <li>
604      <strong>Stable, not stagnant:</strong>
605      We move fast between major versions, but we take semver seriously. Your v7 application won't break when you
606      <code>
607        npm update
608      </code>. We introduce new features aggressively, but we never break your code without a major version bump and a clear migration path.
609    </li>
610  </ul>
611</div>
612
613
614<div class="max-w-4xl px-5 lg:px-20 pb-6">
615    <h2>Long-term sustainability</h2>
616  <p>
617    AdonisJS is independently funded through our Insiders program, <a href="/sponsor">community sponsors</a>, and premium products like AdonisJS Plus.
618  </p>
619
620  <ul class="check space-y-4!">
621    <li>
622      <strong>We're intentionally not VC-backed:</strong>
623      Our success is measured by building the best framework for developers, not preparing for an exit strategy or hitting growth metrics for the next funding round. This independence keeps our incentives aligned with yours.
624    </li>
625    <li>
626      <strong>This is my full-time job:</strong>
627      As the creator and maintainer, I work on AdonisJS every day. This isn't a side project that might get abandoned when life gets busy. It's my career and my craft.
628    </li>
629    <li>
630      <strong>The model already works:</strong>
631      We're not seeking sustainability. We're already sustainable. Thousands of developers and companies trust AdonisJS for production applications, and that trust funds continued development.
632    </li>
633    <li>
634      <strong>Core team and community:</strong>
635      While I provide technical direction, a talented core team and vibrant community contribute to the ecosystem, build packages, help users, and ensure AdonisJS keeps evolving.
636    </li>
637  </ul>
638</div>
639
640
641<div class="max-w-4xl px-5 lg:px-20 pb-6">
642    <h2>Considering AdonisJS for your team?</h2>
643  <p>
644    If you're evaluating AdonisJS for a company project and have questions about architecture, scalability, long-term support, or whether it's the right fit. I'm happy to chat.
645  </p>
646  <div class="mt-8">
647  <a class="font-medium items-center justify-center cursor-pointer transition-colors text-center uppercase inline-flex text-foreground-muted border border-control-line hover:border-control-line-hover focus:border-control-line-hover font-mono text-12 px-2.5 py-1.5 rounded-md" href="https://calendly.com/adonisjs/chat" target="_blank">
648      Schedule a call
649<svg width="1em" height="1em" viewBox="0 0 24 24" class="w-4 h-4 ml-2"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m6.5 17.5l11-11m0 9v-9h-9"/></svg>
650  </a>
651
652  </div>
653  <p class="text-foreground-muted text-14 leading-6! mt-1 ml-0.5">
654    No sales pitch. Just an honest conversation about whether AdonisJS makes sense for what you're building.
655  </p>
656</div>
657
658
659    </section>
660  </div>
661</div>
662</main>
663
664<div class="border-t border-divider">
665  <div class="container mx-auto px-5 lg:px-10 pt-15 md:pt-30 lg:border-x border-divider">
666    <div class="lg:px-22.5 mb-30 md:mb-52 space-y-7 sm:space-y-5">
667        <div class="flex flex-col sm:flex-row gap-1.5 sm:gap-3">
668          <label class="text-14 text-foreground tracking-wide">VSCode Extensions</label>
669          <div class="flex-1 border-b border-dashed border-line sm:mb-1.5"></div>
670          <div class="flex flex-wrap gap-5.5 text-14">
671
672<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">
673  AdonisJS
674</a>
675
676
677<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">
678  Edge
679</a>
680
681
682<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">
683  Japa
684</a>
685
686          </div>
687        </div>
688        <div class="flex flex-col sm:flex-row gap-1.5 sm:gap-3">
689          <label class="text-14 text-foreground tracking-wide">Community</label>
690          <div class="flex-1 border-b border-dashed border-line sm:mb-1.5"></div>
691          <div class="flex flex-wrap gap-5.5 text-14">
692
693<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">
694  Discord
695</a>
696
697
698<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">
699  Twitter
700</a>
701
702
703<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">
704  GitHub
705</a>
706
707
708<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">
709  Forum
710</a>
711
712          </div>
713        </div>
714        <div class="flex flex-col sm:flex-row gap-1.5 sm:gap-3">
715          <label class="text-14 text-foreground tracking-wide">Resources</label>
716          <div class="flex-1 border-b border-dashed border-line sm:mb-1.5"></div>
717          <div class="flex flex-wrap gap-5.5 text-14">
718
719<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">
720  Stories
721</a>
722
723
724<a href="/about" 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">
725  About
726</a>
727
728
729<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">
730  Roadmap
731</a>
732
733
734<a href="/blog" 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">
735  Blog
736</a>
737
738
739<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">
740  Packages
741</a>
742
743
744<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">
745  Contributors
746</a>
747
748
749<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">
750  Support
751</a>
752
753
754<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">
755  Brand
756</a>
757
758
759<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">
760  Sponsor
761</a>
762
763
764<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">
765  Team
766</a>
767
768          </div>
769        </div>
770    </div>
771
772    <div>
773      <div>
774        <svg
775          class="w-full"
776          xmlns="http://www.w3.org/2000/svg"
777          width="1248"
778          viewBox="0 0 1248 277"
779          fill="none"
780        >
781          <mask
782            id="b"
783            style="mask-type:alpha"
784            maskUnits="userSpaceOnUse"
785            x="0"
786            y="0"
787            width="1248"
788            height="281"
789          >
790            <g clip-path="url(#a)" fill="var(--color-border)">
791              <path
792                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
79205 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"
793              ></path>
794            </g>
795          </mask>
796          <g mask="url(#b)">
797            <path fill="url(#c)" d="M0 0h1248v282H0z"></path>
798          </g>
799          <defs>
800            <linearGradient
801              id="c"
802              x1="662.5"
803              y1="-55.5"
804              x2="668.5"
805              y2="282"
806              gradientUnits="userSpaceOnUse"
807            >
808              <stop stop-color="var(--color-dots)"></stop>
809              <stop offset="1" stop-color="var(--color-card)"></stop>
810            </linearGradient>
811            <clipPath id="a">
812              <path fill="#fff" d="M0 0h1248v281H0z"></path>
813            </clipPath>
814          </defs>
815        </svg>
816      </div>
817    </div>
818  </div>
819</div>
820
821  
821<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>
821
822</body>
823</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.