PageSourceSearch

https://tempestphp.com/blog

html tempestphp.com collected 2026-10-03 19:28:05 UTC 57,082 bytes, 825 lines download raw bytes

1<html lang="en" class="flex flex-col h-dvh scroll-smooth">
2<head>
3    <!-- Meta title -->
4    
5    <title>Blog &mdash; Tempest</title>
6
7        <link rel="alternate" type="application/rss+xml" title="Tempest RSS" href="https://tempestphp.com/rss">
8
9    <meta name="title" content="Blog — Tempest">
10    <meta name="twitter:title" content="Blog — Tempest">
11    <meta property="og:title" content="Blog — Tempest">
12    <meta itemprop="name" content="Blog — Tempest">
13
14    <meta charset="UTF-8">
15    <meta name="viewport" content="width=device-width, initial-scale=1.0">
16
17    <!-- Meta description -->
18    
19    <meta name="description" content="Tempest is a modern framework designed to enable developers to write as little framework-specific code as possible, so that they can focus on application code instead.">
20    <meta name="twitter:description" content="Tempest is a modern framework designed to enable developers to write as little framework-specific code as possible, so that they can focus on application code instead.">
21    <meta property="og:description" content="Tempest is a modern framework designed to enable developers to write as little framework-specific code as possible, so that they can focus on application code instead.">
22    <meta itemprop="description" content="Tempest is a modern framework designed to enable developers to write as little framework-specific code as possible, so that they can focus on application code instead.">
23
24    <!-- Meta image -->
25        <meta property="og:image" content="https://tempestphp.com/meta/blog">
26    <meta name="twitter:image" content="https://tempestphp.com/meta/blog">
27    <meta name="image" content="https://tempestphp.com/meta/blog">
28    <meta name="twitter:card" content="summary_large_image">
29    <meta property="og:type" content="article">
30
31    <!-- Favicon -->
32    <link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png">
33    <link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png">
34    <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png">
35    <link rel="manifest" href="/favicon/site.webmanifest">
36
37    <!-- Vite tags -->
38    
39
40
41<script type="module" src="/build/assets/main.entrypoint-BCjeSVPN.js"></script>
41<link rel="stylesheet" href="/build/assets/main-BK7cdzvE.css" />
41<script type="module" src="/build/assets/palette.entrypoint-DqmRhDKF.js"></script>
41
42
43    <!-- Dark mode -->
44    
44<script>
45        function isDark() {
46            return localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)
47        }
48
49        function applyTheme(theme = undefined) {
50            if (theme) {
51                localStorage.theme = theme
52            }
53
54            document.documentElement.classList.toggle('dark', isDark())
55            document.dispatchEvent(new CustomEvent('theme-changed', {detail: {isDark: isDark()}}))
56        }
57
58        function toggleDarkMode() {
59            applyTheme(isDark() ? 'light' : 'dark')
60        }
61
62        applyTheme()
63    </script>
63
64
65    
66</head>
67<body class="relative antialiased flex flex-col grow selection:bg-(--ui-primary)/20 selection:text-(--ui-primary) font-sans text-(--ui-text) bg-(--ui-bg) scheme-light dark:scheme-dark overflow-visible! pr-0! ">
68<div class="absolute inset-0 bg-repeat pointer-events-none" style="background-image: url(/noise.svg)">
69    <div id="command-palette"></div>
70</div>
71
72
73
74<!-- Header -->
75
76
77<div class="relative inset-x-0 z-[1] h-(--ui-header-height)">
78  <header class="group transition-[top,border] z-[1] fixed top-4 data-[scrolling]:top-0 flex justify-center bg-[transparent] border-b border-transparent data-[scrolling]:border-(--ui-border) w-full duration-200 data-[scrolling]:backdrop-blur data-[scrolling]:bg-(--ui-bg)/75" id="header">
79    <div class="grid grid-cols-[auto_1fr_auto] items-center gap-x-4 px-8 py-4 w-full 2xl:max-w-8xl lg:max-w-5xl xl:max-w-7xl">
80      <!-- Left side -->
81      <div class="flex items-center gap-4">
82        <a href="/" class="flex items-center gap-4">
83          <!-- Logo -->
84          <div class="size-8">
85            <img src="/img/tempest-logo.png" alt="Tempest logo" class="size-full">
86          </div>
87          <span class="hidden lg:inline font-medium">Tempest</span>
88        </a>
89
90        <a class="hidden md:inline text-xs tracking-wide font-medium text-(--ui-text-muted) bg-(--ui-bg)/50 px-2 py-1 rounded-lg border border-(--ui-border)" href="https://github.com/tempestphp/tempest-framework/releases/v3.19.2">
91          v3.19.2        </a>
92      </div>
93
94      <!-- Center -->
95      <div class="flex items-center gap-4 min-w-0 xl:ml-32">
96        <button toggle-palette class="hidden sm:flex items-center gap-2 min-w-0 cursor-pointer rounded-lg border border-(--ui-border) bg-(--ui-bg)/50 dark:bg-transparent px-3 py-1.5 text-sm text-(--ui-text-muted) hover:bg-(--ui-bg-elevated) hover:border-(--ui-border-accented) transition group-data-[scrolling]:border-transparent group-data-[scrolling]:bg-transparent group-data-[scrolling]:hover:bg-(--ui-bg-elevated)">
97    <label for="search" class="sr-only">Search</label>
98    
99
100
101<svg class="size-4 shrink-0 text-(--ui-text-dimmed)" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m18 11l-6-6"/></svg>
102    <span class="truncate">Search docs, blog...</span>
103    <kbd class="ml-2 inline-flex items-center gap-0.5 rounded border border-(--ui-border) bg-(--ui-bg-muted) px-1.5 py-0.5 text-xs text-(--ui-text-dimmed) font-medium">
104        /
105    </kbd>
106</button>
107
108
109      </div>
110      <!-- Right side -->
111      <div class="flex items-center gap-5 font-medium text-(--ui-text-muted)">
112        <a class="transition hover:text-(--ui-text-highlighted) " href="https://tempestphp.com/community">
113          Community
114        </a>
115        <a class="transition hover:text-(--ui-text-highlighted) md:text-(--ui-primary)" href="https://tempestphp.com/blog">
116          Blog
117        </a>
118        <a class="transition hover:text-(--ui-text-highlighted) " href="https://tempestphp.com/documentation">
119          <span class="sm:hidden">Docs</span>
120          <span class="hidden sm:inline">Documentation</span>
121        </a>
122        <a href="https://github.com/tempestphp/tempest-framework" class="transition hover:text-(--ui-text-highlighted) flex items-center gap-x-1.5 ml-4">
123          
124
125
126<svg class="size-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2c2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2a4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6c-.6.6-.6 1.2-.5 2V21"/></svg>
127          <span class="hidden lg:inline font-mono">2.3K</span>
128        </a>
129      </div>
130    </div>
131  </header>
132</div>
133
134
135
136<script>
137const header = document.getElementById('header')
138
139window.addEventListener('scroll', () => {
140  if (window.scrollY > 0) {
141    header.dataset.scrolling = true
142  } else {
143    delete header.dataset.scrolling
144  }
145})
146</script>
146
147
148
149
150  
151<!-- Main container -->
152
153  
154<main class="isolate flex flex-col mx-auto px-4 xl:px-8 container grow">
155    <!-- Main content -->
156    <div class="flex flex-col lg:mt-10 px-2 lg:pl-12 w-full min-w-0 grow">
157			<!-- Header -->
158			<div class="flex flex-col pb-8 max-w-xl">
159				<h1 class="font-display text-gray-900 dark:text-white text-3xl sm:text-4xl lg:text-5xl tracking-tight">Blog</h1>
160				<p class="mt-4 text-gray-500 dark:text-gray-400 text-lg">
161					Read the latest news and announcements about Tempest, from framework updates to real-world applications and expert insights.
162				</p>
163				<div class="mt-4">
164					<a href="/rss" class="inline-flex items-center gap-1 bg-gray-300/20 dark:bg-gray-400/10 px-2.5 py-1 rounded font-medium text-gray-700 dark:text-gray-400 text-sm" rel="noopener noreferrer" target="_blank">
165						
166
167
168<svg class="size-4 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 19a1 1 0 1 0 2 0a1 1 0 1 0-2 0M4 4a16 16 0 0 1 16 16M4 11a9 9 0 0 1 9 9"/></svg>
169						<span>RSS</span>
170					</a>
171				</div>
172			</div>
173			<!-- Articles -->
174      <ul class="gap-4 lg:gap-6 grid md:grid-cols-2 lg:grid-cols-3 mt-0 lg:mt-4 2xl:mt-8 mb-8">
175        <li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
176          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
177            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-mcp"></a>
178            <div>
179              <span class="font-medium">Your application is already an MCP server</span>
180              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Building tools, resources and prompts with Tempest</p>
181            </div>
182            <div class="flex justify-between items-center gap-x-2 mt-4">
183                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
184							  Release              </span>
185                                          <span class="text-(--ui-text-dimmed) text-sm">
186                by <span class="text-(--ui-text-muted)">M&aacute;rk</span> on <span class="text-(--ui-text-muted)">July 29, 2026</span>
187              </span>
188                        </div>
189          </div>
190        </li>
191<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
192          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
193            <a class="absolute inset-0"  href="https://tempestphp.com/blog/frankenphp-tempest"></a>
194            <div>
195              <span class="font-medium">FrankenPHP worker mode in Tempest</span>
196              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">We&#039;re adding support for FrankenPHP worker mode in Tempest</p>
197            </div>
198            <div class="flex justify-between items-center gap-x-2 mt-4">
199                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
200							  Release              </span>
201                                          <span class="text-(--ui-text-dimmed) text-sm">
202                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">July 07, 2026</span>
203              </span>
204                        </div>
205          </div>
206        </li>
207<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
208          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
209            <a class="absolute inset-0"  href="https://tempestphp.com/blog/a-generic-tragedy"></a>
210            <div>
211              <span class="font-medium">A generic tragedy</span>
212              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">PHP devs talk about generics in real life</p>
213            </div>
214            <div class="flex justify-between items-center gap-x-2 mt-4">
215                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
216							  Thoughts              </span>
217                                          <span class="text-(--ui-text-dimmed) text-sm">
218                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">June 15, 2026</span>
219              </span>
220                        </div>
221          </div>
222        </li>
223<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
224          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
225            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-markdown"></a>
226            <div>
227              <span class="font-medium">A new Markdown parser</span>
228              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Introducing tempest/markdown, its design goals, and how it works</p>
229            </div>
230            <div class="flex justify-between items-center gap-x-2 mt-4">
231                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
232							  Thoughts              </span>
233                                          <span class="text-(--ui-text-dimmed) text-sm">
234                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">June 05, 2026</span>
235              </span>
236                        </div>
237          </div>
238        </li>
239<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
240          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
241            <a class="absolute inset-0"  href="https://tempestphp.com/blog/new-orm-relations"></a>
242            <div>
243              <span class="font-medium">New ORM relations</span>
244              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest&#039;s ORM now supports HasOneThrough, HasManyThrough, and BelongsToMany relations</p>
245            </div>
246            <div class="flex justify-between items-center gap-x-2 mt-4">
247                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
248							  Release              </span>
249                                          <span class="text-(--ui-text-dimmed) text-sm">
250                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 27, 2026</span>
251              </span>
252                        </div>
253          </div>
254        </li>
255<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
256          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
257            <a class="absolute inset-0"  href="https://tempestphp.com/blog/idempotency-in-tempest"></a>
258            <div>
259              <span class="font-medium">Idempotency in Tempest</span>
260              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">We&#039;ve recently added an idempotency feature into Tempest to help you avoid code running twice when it shouldn&#039;t.</p>
261            </div>
262            <div class="flex justify-between items-center gap-x-2 mt-4">
263                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
264							  Release              </span>
265                                          <span class="text-(--ui-text-dimmed) text-sm">
266                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 26, 2026</span>
267              </span>
268                        </div>
269          </div>
270        </li>
271<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
272          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
273            <a class="absolute inset-0"  href="https://tempestphp.com/blog/truly-decoupled-discovery"></a>
274            <div>
275              <span class="font-medium">Truly decoupled discovery</span>
276              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest&#039;s discovery can now be used in any project</p>
277            </div>
278            <div class="flex justify-between items-center gap-x-2 mt-4">
279                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
280							  Release              </span>
281                                          <span class="text-(--ui-text-dimmed) text-sm">
282                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 13, 2026</span>
283              </span>
284                        </div>
285          </div>
286        </li>
287<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
288          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
289            <a class="absolute inset-0"  href="https://tempestphp.com/blog/view-source-mapping"></a>
290            <div>
291              <span class="font-medium">Tempest View with source mapping</span>
292              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest 3.2 improves View debugging by introducing source maps.</p>
293            </div>
294            <div class="flex justify-between items-center gap-x-2 mt-4">
295                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
296							  Release              </span>
297                                          <span class="text-(--ui-text-dimmed) text-sm">
298                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">February 20, 2026</span>
299              </span>
300                        </div>
301          </div>
302        </li>
303<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
304          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
305            <a class="absolute inset-0"  href="https://tempestphp.com/blog/generating-typescript-types-with-tempest"></a>
306            <div>
307              <span class="font-medium">Generating TypeScript types with Tempest</span>
308              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest now has the ability to generate TypeScript interfaces from PHP classes to ease integration with TypeScript-based front-ends.</p>
309            </div>
310            <div class="flex justify-between items-center gap-x-2 mt-4">
311                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
312							  Release              </span>
313                                          <span class="text-(--ui-text-dimmed) text-sm">
314                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">February 16, 2026</span>
315              </span>
316                        </div>
317          </div>
318        </li>
319<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
320          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
321            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-3"></a>
322            <div>
323              <span class="font-medium">Tempest 3.0</span>
324              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest 3.0 comes with a new exception handler, several performance improvements,  PHP 8.5 support, and more.</p>
325            </div>
326            <div class="flex justify-between items-center gap-x-2 mt-4">
327                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
328							  Release              </span>
329                                          <span class="text-(--ui-text-dimmed) text-sm">
330                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">February 12, 2026</span>
331              </span>
332                        </div>
333          </div>
334        </li>
335<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
336          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
337            <a class="absolute inset-0"  href="https://tempestphp.com/blog/open-source-strategies"></a>
338            <div>
339              <span class="font-medium">Open source strategies</span>
340              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Staying happy and productive while doing open source</p>
341            </div>
342            <div class="flex justify-between items-center gap-x-2 mt-4">
343                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
344							  Thoughts              </span>
345                                          <span class="text-(--ui-text-dimmed) text-sm">
346                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">January 13, 2026</span>
347              </span>
348                        </div>
349          </div>
350        </li>
351<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
352          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
353            <a class="absolute inset-0"  href="https://tempestphp.com/blog/route-decorators"></a>
354            <div>
355              <span class="font-medium">Route decorators in Tempest 2.8</span>
356              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Taking a deep dive in a new Tempest feature</p>
357            </div>
358            <div class="flex justify-between items-center gap-x-2 mt-4">
359                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
360							  Release              </span>
361                                          <span class="text-(--ui-text-dimmed) text-sm">
362                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">November 10, 2025</span>
363              </span>
364                        </div>
365          </div>
366        </li>
367<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
368          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
369            <a class="absolute inset-0"  href="https://tempestphp.com/blog/re-the-journey-thus-far"></a>
370            <div>
371              <span class="font-medium">RE: the journey this far</span>
372              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Replying to someone trying out Tempest</p>
373            </div>
374            <div class="flex justify-between items-center gap-x-2 mt-4">
375                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
376							  Thoughts              </span>
377                                          <span class="text-(--ui-text-dimmed) text-sm">
378                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">October 27, 2025</span>
379              </span>
380                        </div>
381          </div>
382        </li>
383<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
384          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
385            <a class="absolute inset-0"  href="https://tempestphp.com/blog/oauth-in-tempest"></a>
386            <div>
387              <span class="font-medium">OAuth in Tempest 2.2</span>
388              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest 2.2 gets a new OAuth integration which makes authentication super simple</p>
389            </div>
390            <div class="flex justify-between items-center gap-x-2 mt-4">
391                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
392							  Release              </span>
393                                          <span class="text-(--ui-text-dimmed) text-sm">
394                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">October 02, 2025</span>
395              </span>
396                        </div>
397          </div>
398        </li>
399<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
400          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
401            <a class="absolute inset-0"  href="https://tempestphp.com/blog/migrations-in-tempest-2"></a>
402            <div>
403              <span class="font-medium">No more down migrations</span>
404              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Database migrations have had a serious refactor in the newest Tempest release</p>
405            </div>
406            <div class="flex justify-between items-center gap-x-2 mt-4">
407                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
408							  Thoughts              </span>
409                                          <span class="text-(--ui-text-dimmed) text-sm">
410                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">September 19, 2025</span>
411              </span>
412                        </div>
413          </div>
414        </li>
415<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
416          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
417            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-2"></a>
418            <div>
419              <span class="font-medium">Tempest 2.0</span>
420              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">We&#039;ve just tagged Tempest 2.0. It&#039;s a release focussed on fine-tuning and fixing lots of details. It also signifies that we&#039;re committed to Tempest, we&#039;re in this for the long run!</p>
421            </div>
422            <div class="flex justify-between items-center gap-x-2 mt-4">
423                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
424							  Release              </span>
425                                          <span class="text-(--ui-text-dimmed) text-sm">
426                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">September 16, 2025</span>
427              </span>
428                        </div>
429          </div>
430        </li>
431<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
432          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
433            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-1-5"></a>
434            <div>
435              <span class="font-medium">Tempest 1.5</span>
436              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">This release brings a new markdown view component, CSRF support, installable view components, and more.</p>
437            </div>
438            <div class="flex justify-between items-center gap-x-2 mt-4">
439                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
440							  Release              </span>
441                                          <span class="text-(--ui-text-dimmed) text-sm">
442                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">July 29, 2025</span>
443              </span>
444                        </div>
445          </div>
446        </li>
447<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
448          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
449            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-view-updates"></a>
450            <div>
451              <span class="font-medium">Major updates to Tempest views</span>
452              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest 1.5 released with some major improvements to its templating engine</p>
453            </div>
454            <div class="flex justify-between items-center gap-x-2 mt-4">
455                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
456							  Release              </span>
457                                          <span class="text-(--ui-text-dimmed) text-sm">
458                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">July 28, 2025</span>
459              </span>
460                        </div>
461          </div>
462        </li>
463<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
464          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
465            <a class="absolute inset-0"  href="https://tempestphp.com/blog/mail-component"></a>
466            <div>
467              <span class="font-medium">Mailing with Tempest</span>
468              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">The newest Tempest release adds mailing support</p>
469            </div>
470            <div class="flex justify-between items-center gap-x-2 mt-4">
471                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
472							  Release              </span>
473                                          <span class="text-(--ui-text-dimmed) text-sm">
474                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">July 17, 2025</span>
475              </span>
476                        </div>
477          </div>
478        </li>
479<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
480          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
481            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-1-1"></a>
482            <div>
483              <span class="font-medium">Tempest 1.1 released</span>
484              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">A new minor version is available</p>
485            </div>
486            <div class="flex justify-between items-center gap-x-2 mt-4">
487                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
488							  Release              </span>
489                                          <span class="text-(--ui-text-dimmed) text-sm">
490                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">July 05, 2025</span>
491              </span>
492                        </div>
493          </div>
494        </li>
495<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
496          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
497            <a class="absolute inset-0"  href="https://tempestphp.com/blog/ten-tempest-tips"></a>
498            <div>
499              <span class="font-medium">Ten Tempest Tips</span>
500              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Ten things you might now know about Tempest</p>
501            </div>
502            <div class="flex justify-between items-center gap-x-2 mt-4">
503                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
504							  Thoughts              </span>
505                                          <span class="text-(--ui-text-dimmed) text-sm">
506                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">June 29, 2025</span>
507              </span>
508                        </div>
509          </div>
510        </li>
511<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
512          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
513            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempest-1"></a>
514            <div>
515              <span class="font-medium">Tempest 1.0</span>
516              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest&#039;s first stable release</p>
517            </div>
518            <div class="flex justify-between items-center gap-x-2 mt-4">
519                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
520							  Release              </span>
521                                          <span class="text-(--ui-text-dimmed) text-sm">
522                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">June 27, 2025</span>
523              </span>
524                        </div>
525          </div>
526        </li>
527<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
528          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
529            <a class="absolute inset-0"  href="https://tempestphp.com/blog/tempests-vision"></a>
530            <div>
531              <span class="font-medium">Tempest&#039;s vision</span>
532              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">What sets Tempest apart as a framework for modern PHP development.</p>
533            </div>
534            <div class="flex justify-between items-center gap-x-2 mt-4">
535                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
536							  Thoughts              </span>
537                                          <span class="text-(--ui-text-dimmed) text-sm">
538                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">May 26, 2025</span>
539              </span>
540                        </div>
541          </div>
542        </li>
543<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
544          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
545            <a class="absolute inset-0"  href="https://tempestphp.com/blog/beta-1"></a>
546            <div>
547              <span class="font-medium">Tempest is beta</span>
548              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Today we release the first beta version of Tempest, the PHP framework for web and console apps that gets out of your way. It&#039;s one of the final steps towards a stable 1.0 release. We&#039;ll use this beta phase to fix bugs, and we&#039;re committed to not making any breaking changes anymore, apart from experimental features.
549</p>
550            </div>
551            <div class="flex justify-between items-center gap-x-2 mt-4">
552                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
553							  Release              </span>
554                                          <span class="text-(--ui-text-dimmed) text-sm">
555                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">May 08, 2025</span>
556              </span>
557                        </div>
558          </div>
559        </li>
560<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
561          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
562            <a class="absolute inset-0"  href="https://tempestphp.com/blog/about-route-attributes"></a>
563            <div>
564              <span class="font-medium">About route attributes</span>
565              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Let&#039;s explore Tempest&#039;s route attributes in depth</p>
566            </div>
567            <div class="flex justify-between items-center gap-x-2 mt-4">
568                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
569							  Thoughts              </span>
570                                          <span class="text-(--ui-text-dimmed) text-sm">
571                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 30, 2025</span>
572              </span>
573                        </div>
574          </div>
575        </li>
576<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
577          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
578            <a class="absolute inset-0"  href="https://tempestphp.com/blog/alpha-6"></a>
579            <div>
580              <span class="font-medium">The final alpha release</span>
581              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest alpha 6 is released, we&#039;ll talk about Tempest&#039;s future and highlight the most important new features in this release</p>
582            </div>
583            <div class="flex justify-between items-center gap-x-2 mt-4">
584                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
585							  Release              </span>
586                                          <span class="text-(--ui-text-dimmed) text-sm">
587                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 24, 2025</span>
588              </span>
589                        </div>
590          </div>
591        </li>
592<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
593          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
594            <a class="absolute inset-0"  href="https://tempestphp.com/blog/discovery-explained"></a>
595            <div>
596              <span class="font-medium">Tempest&#039;s Discovery explained</span>
597              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">A deep dive into the heart of Tempest.</p>
598            </div>
599            <div class="flex justify-between items-center gap-x-2 mt-4">
600                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-teal-400/20 dark:bg-teal-400/10 text-teal-700 dark:text-teal-400">
601							  Tutorial              </span>
602                                          <span class="text-(--ui-text-dimmed) text-sm">
603                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 16, 2025</span>
604              </span>
605                        </div>
606          </div>
607        </li>
608<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
609          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
610            <a class="absolute inset-0"  href="https://tempestphp.com/blog/request-objects-in-tempest"></a>
611            <div>
612              <span class="font-medium">Request objects in Tempest</span>
613              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Why Tempest requests are super intuitive</p>
614            </div>
615            <div class="flex justify-between items-center gap-x-2 mt-4">
616                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-teal-400/20 dark:bg-teal-400/10 text-teal-700 dark:text-teal-400">
617							  Tutorial              </span>
618                                          <span class="text-(--ui-text-dimmed) text-sm">
619                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 13, 2025</span>
620              </span>
621                        </div>
622          </div>
623        </li>
624<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
625          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
626            <a class="absolute inset-0"  href="https://tempestphp.com/blog/static-websites-with-tempest"></a>
627            <div>
628              <span class="font-medium">Static websites with Tempest</span>
629              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest makes it super convenient to convert any controller action in statically generated pages.</p>
630            </div>
631            <div class="flex justify-between items-center gap-x-2 mt-4">
632                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-teal-400/20 dark:bg-teal-400/10 text-teal-700 dark:text-teal-400">
633							  Tutorial              </span>
634                                          <span class="text-(--ui-text-dimmed) text-sm">
635                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">March 08, 2025</span>
636              </span>
637                        </div>
638          </div>
639        </li>
640<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
641          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
642            <a class="absolute inset-0"  href="https://tempestphp.com/blog/chasing-bugs-down-rabbit-holes"></a>
643            <div>
644              <span class="font-medium">Chasing bugs down rabbit holes</span>
645              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">I had to debug the most interesting bug in Tempest to date.</p>
646            </div>
647            <div class="flex justify-between items-center gap-x-2 mt-4">
648                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
649							  Thoughts              </span>
650                                          <span class="text-(--ui-text-dimmed) text-sm">
651                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">February 02, 2025</span>
652              </span>
653                        </div>
654          </div>
655        </li>
656<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
657          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
658            <a class="absolute inset-0"  href="https://tempestphp.com/blog/alpha-5"></a>
659            <div>
660              <span class="font-medium">Tempest alpha 5</span>
661              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest alpha 5 is released with PHP 8.4 support, a major console overhaul, and more!</p>
662            </div>
663            <div class="flex justify-between items-center gap-x-2 mt-4">
664                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
665							  Release              </span>
666                                          <span class="text-(--ui-text-dimmed) text-sm">
667                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">January 22, 2025</span>
668              </span>
669                        </div>
670          </div>
671        </li>
672<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
673          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
674            <a class="absolute inset-0"  href="https://tempestphp.com/blog/start-with-the-customer-experience"></a>
675            <div>
676              <span class="font-medium">Start with developer experience</span>
677              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Everything else is secondary.</p>
678            </div>
679            <div class="flex justify-between items-center gap-x-2 mt-4">
680                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
681							  Thoughts              </span>
682                                          <span class="text-(--ui-text-dimmed) text-sm">
683                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">January 16, 2025</span>
684              </span>
685                        </div>
686          </div>
687        </li>
688<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
689          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
690            <a class="absolute inset-0"  href="https://tempestphp.com/blog/alpha-4"></a>
691            <div>
692              <span class="font-medium">Tempest alpha 4</span>
693              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest alpha 4 is released with support for asynchronous commands, the new filesystem component, partial discovery cache, and more!</p>
694            </div>
695            <div class="flex justify-between items-center gap-x-2 mt-4">
696                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
697							  Release              </span>
698                                          <span class="text-(--ui-text-dimmed) text-sm">
699                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">November 25, 2024</span>
700              </span>
701                        </div>
702          </div>
703        </li>
704<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
705          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
706            <a class="absolute inset-0"  href="https://tempestphp.com/blog/exit-codes-fallacy"></a>
707            <div>
708              <span class="font-medium">Exit code fallacy</span>
709              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Was I wrong about exit codes?</p>
710            </div>
711            <div class="flex justify-between items-center gap-x-2 mt-4">
712                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
713							  Thoughts              </span>
714                                          <span class="text-(--ui-text-dimmed) text-sm">
715                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">November 15, 2024</span>
716              </span>
717                        </div>
718          </div>
719        </li>
720<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
721          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
722            <a class="absolute inset-0"  href="https://tempestphp.com/blog/unfair-advantage"></a>
723            <div>
724              <span class="font-medium">Unfair advantage</span>
725              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Why Tempest instead of Symfony or Laravel?</p>
726            </div>
727            <div class="flex justify-between items-center gap-x-2 mt-4">
728                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-yellow-400/20 dark:bg-yellow-400/10 text-yellow-700 dark:text-yellow-400">
729							  Thoughts              </span>
730                                          <span class="text-(--ui-text-dimmed) text-sm">
731                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">November 08, 2024</span>
732              </span>
733                        </div>
734          </div>
735        </li>
736<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
737          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
738            <a class="absolute inset-0"  href="https://tempestphp.com/blog/alpha-3"></a>
739            <div>
740              <span class="font-medium">Tempest alpha 3</span>
741              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest alpha 3 is released with deferred tasks support, installers, a refactored view engine, and more!</p>
742            </div>
743            <div class="flex justify-between items-center gap-x-2 mt-4">
744                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
745							  Release              </span>
746                                          <span class="text-(--ui-text-dimmed) text-sm">
747                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">October 31, 2024</span>
748              </span>
749                        </div>
750          </div>
751        </li>
752<li class="p-0.5 relative border border-(--ui-border) bg-(--ui-bg-elevated)/30 hover:bg-(--ui-bg-elevated)/75 rounded-lg transition">
753          <div class="h-full flex flex-col justify-between border border-dashed border-(--ui-border) p-4 rounded-md">
754            <a class="absolute inset-0"  href="https://tempestphp.com/blog/alpha-2"></a>
755            <div>
756              <span class="font-medium">Tempest alpha 2</span>
757              <p class="text-(--ui-text-dimmed) mt-1 line-clamp-2">Tempest alpha 2 is released with auth support, caching, and more!</p>
758            </div>
759            <div class="flex justify-between items-center gap-x-2 mt-4">
760                              <span class="inline-flex items-center gap-1 px-2 py-1 rounded font-medium text-xs uppercase bg-blue-400/20 dark:bg-blue-400/10 text-blue-700 dark:text-blue-400">
761							  Release              </span>
762                                          <span class="text-(--ui-text-dimmed) text-sm">
763                by <span class="text-(--ui-text-muted)">Brent</span> on <span class="text-(--ui-text-muted)">October 02, 2024</span>
764              </span>
765                        </div>
766          </div>
767        </li>
768      </ul>
769		</div>
770  </main>
771
772
773
774
775
776
777<footer class="flex justify-center items-center gap-4 mb-8">
778    <a class="flex items-center gap-1 text-lg font-medium transition hover:text-(--ui-primary)" href="https://tempestphp.com/github">
779        
780
781
782<svg class="size-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2c2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2a4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6c-.6.6-.6 1.2-.5 2V21"/></svg>
783    </a>
784    <a class="flex items-center gap-1 text-lg font-medium transition hover:text-(--ui-primary)" href="https://tempestphp.com/bluesky/brent">
785        
786
787
788<svg class="size-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
788<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6.335 5.144C4.681 3.945 2 3.017 2 5.97c0 .59.35 4.953.556 5.661C3.269 14.094 5.686 14.381 8 14c-4.045.665-4.889 3.208-2.667 5.41C6.363 20.428 7.246 21 8 21c2 0 3.134-2.769 3.5-3.5q.5-1 .5-1.5q0 .5.5 1.5c.366.731 1.5 3.5 3.5 3.5c.754 0 1.637-.571 2.667-1.59C20.889 17.207 20.045 14.664 16 14c2.314.38 4.73.094 5.444-2.369c.206-.708.556-5.072.556-5.661c0-2.953-2.68-2.025-4.335-.826C15.372 6.806 12.905 10.192 12 12c-.905-1.808-3.372-5.194-5.665-6.856"/></svg>
789    </a>
790    <a class="flex items-center gap-1 text-lg font-medium transition hover:text-(--ui-primary)" href="https://tempestphp.com/twitter/brent">
791        
792
793
794<svg class="size-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m4 4l11.733 16H20L8.267 4zm0 16l6.768-6.768m2.46-2.46L20 4"/></svg>
795    </a>
796    <a href="/rss" class="flex items-center gap-1 text-lg font-medium transition hover:text-(--ui-primary)">
797        
798
799
800<svg class="size-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 19a1 1 0 1 0 2 0a1 1 0 1 0-2 0M4 4a16 16 0 0 1 16 16M4 11a9 9 0 0 1 9 9"/></svg>
801    </a>
802    <button id="toggle-theme" class="relative size-6 cursor-pointer overflow-hidden transition hover:text-(--ui-primary)">
803        
804
805
806<svg class="absolute inset-0 dark:opacity-0 size-full dark:translate-y-full duration-200" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3h.393a7.5 7.5 0 0 0 7.92 12.446A9 9 0 1 1 12 2.992z"/></svg>
807        
808
809
810<svg class="absolute inset-0 opacity-0 dark:opacity-100 size-full -translate-y-full dark:translate-y-0 duration-200" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12a4 4 0 1 0 8 0a4 4 0 1 0-8 0m-5 0h1m8-9v1m8 8h1m-9 8v1M5.6 5.6l.7.7m12.1-.7l-.7.7m0 11.4l.7.7m-12.1-.7l-.7.7"/></svg>
811    </button>
812</footer>
813
814
815
816<script>
817    document.getElementById('toggle-theme').addEventListener('click', () => {
818        toggleDarkMode()
819    })
820</script>
820
821
822
823
824</body>
825</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.