<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nandan</title>
    <description>The latest articles on DEV Community by Nandan (@nandan-parmar).</description>
    <link>https://dev.to/nandan-parmar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3535185%2F669a7d87-a3ab-43b8-bcd0-7e77cd95c99e.png</url>
      <title>DEV Community: Nandan</title>
      <link>https://dev.to/nandan-parmar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nandan-parmar"/>
    <language>en</language>
    <item>
      <title>When AI Predicts Too Well: Understanding Hallucinations in Large Language Models</title>
      <dc:creator>Nandan</dc:creator>
      <pubDate>Sun, 26 Oct 2025 13:53:10 +0000</pubDate>
      <link>https://dev.to/nandan-parmar/when-ai-predicts-too-well-understanding-hallucinations-in-large-language-models-3an6</link>
      <guid>https://dev.to/nandan-parmar/when-ai-predicts-too-well-understanding-hallucinations-in-large-language-models-3an6</guid>
      <description>&lt;p&gt;Generative AI as we know now can write, explain, summarize, and even debug like an experienced engineer. But sometimes, it produces something that sounds perfect and still turns out false. That moment, when language outpaces truth, is what developers call a &lt;strong&gt;hallucination&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is not lying. It is not guessing in the human sense. It is the result of a model doing what it was built to do, continue patterns, one token at a time, until a complete sentence appears.The difference between fact and fiction is invisible to it. The model knows form, not meaning.&lt;/p&gt;




&lt;h2&gt;
  
  
  The confident AI moment
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gw4lvezukia7t4g1840.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gw4lvezukia7t4g1840.png" alt="Robot confidently handing wrong answer" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;It sounded sure of itself. It wasn’t.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine asking a code assistant to create a secure SQL connection helper. It returns a snippet that looks professional, reads cleanly, and compiles with no warnings. You test it and realize the class it used doesn’t exist anywhere.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public SqlConnection ConnectSecure(string connectionString)
   {
      // here the Secure Connect is hallucinated class

      var secure = new SecureConnect();
      return secure.Connect(connectionString);
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why does this happen?
&lt;/h4&gt;

&lt;p&gt;The model doesn’t retrieve real code. It predicts what &lt;em&gt;should&lt;/em&gt; appear next in a pattern of text. It saw the words “secure,” “connect,” and “SQL” used together during training so it built the most probable continuation. That’s probability, not knowledge.&lt;/p&gt;

&lt;p&gt;For a developer, this feels like talking to a confident intern who always sounds sure but sometimes makes things up with a straight face. The presentation is smoothb but the output isn’t grounded.&lt;/p&gt;




&lt;h2&gt;
  
  
  When thoughts start to drift
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpg3mnb4tet8a6empn8mu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpg3mnb4tet8a6empn8mu.png" alt="Tokens floating away from a glowing core" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Each word makes sense. Together, they start to wander.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Inside the model, everything happens as a flow of numbers embeddings and attention weights. Each token (a piece of text) affects what comes next. With each new token, the model’s focus shifts slightly. When these shifts stack up, the text can drift from the question’s anchor.&lt;/p&gt;

&lt;h3&gt;
  
  
  This is how a small mismatch becomes a full hallucination:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A minor assumption gets carried forward.
&lt;/li&gt;
&lt;li&gt;The next token fits the local context but moves further from truth.
&lt;/li&gt;
&lt;li&gt;The pattern continues until a full paragraph emerges fluent, confident, and wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In simple terms, the language remains correct while the meaning slips away. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s like reading a story that starts about machine learning and somehow ends in a conversation about coffee 😂 😂. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every step is logical, yet the final scene no longer connects to the start.&lt;/p&gt;




&lt;h2&gt;
  
  
  The human parallel
&lt;/h2&gt;

&lt;p&gt;We do this too. Writers fill memory gaps with what “sounds right.” Developers name a function before writing its logic because they already &lt;em&gt;feel&lt;/em&gt; what belongs there. Humans improvise meaning from structure. A language model just does the same thing at scale, faster and without awareness of what it’s doing.&lt;/p&gt;

&lt;p&gt;This is why hallucination is not a random glitch, it is a natural side effect of fluency. The better the model gets at generating language, the better it becomes at generating &lt;em&gt;convincing illusions&lt;/em&gt; of correctness.&lt;/p&gt;




&lt;h2&gt;
  
  
  When data and design feed the loop
&lt;/h2&gt;

&lt;p&gt;The source of a hallucination isn’t just the model. It can start in how data was prepared, how feedback was scored, or even how prompts are written.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compression&lt;/strong&gt; - billions of facts are compressed into a limited space of parameters. Fine details vanish.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ambiguity&lt;/strong&gt; - when a question allows multiple valid answers, the model fills the gap with one it finds stylistically strongest.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reward models&lt;/strong&gt; - reinforcement from human feedback often rewards confidence and politeness more than factuality.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context overflow&lt;/strong&gt; - if a prompt or document is longer than the model’s context window, older parts fade from memory, causing mixups.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These small design and data effects combine into what we perceive as a single event: a hallucination.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bringing the model back to earth
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldqbozwf7pixtuvzv8gv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldqbozwf7pixtuvzv8gv.png" alt="Robot grounding itself by pulling facts from books" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Even machines can learn to check their work.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The best current fix is &lt;strong&gt;retrieval grounded generation (RAG)&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Before answering, the model queries a database or document store to gather real context. Then it writes, using that information as a local truth source. It still predicts words, but now the prediction passes through factual gravity.&lt;/p&gt;

&lt;p&gt;A grounded setup works like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You ask a question.
&lt;/li&gt;
&lt;li&gt;A retriever searches indexed knowledge sources for relevant chunks.
&lt;/li&gt;
&lt;li&gt;Those chunks are added to the model’s prompt.
&lt;/li&gt;
&lt;li&gt;The model generates text that stays tethered to those chunks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This simple architectural change drastically reduces fabricated details. It does not make models infallible, but it shifts them from pure imagination toward &lt;em&gt;informed storytelling&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The hidden discipline for developers
&lt;/h2&gt;

&lt;p&gt;Hallucinations don’t make these models useless, they make them unpredictable. For engineers, that means two disciplines matter more than ever:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt design&lt;/strong&gt; - precise prompts create smaller spaces for the model to drift.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification&lt;/strong&gt; - outputs should be checked against something objective: logs, APIs, documents, or test data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Treat the model as a collaborator that needs supervision, The same way a senior reviews a junior’s pull request, review what the model writes. The goal is not to silence creativity, it is to build a system that can create &lt;em&gt;and&lt;/em&gt; verify.&lt;/p&gt;




&lt;h2&gt;
  
  
  A closing reflection
&lt;/h2&gt;

&lt;p&gt;Hallucinations remind us that language models do not &lt;em&gt;understand&lt;/em&gt; the world, they &lt;em&gt;approximate&lt;/em&gt; it. They weave probability into sentences, and probability sometimes bends truth. Our task is to pair their creativity with our judgment.&lt;/p&gt;

&lt;p&gt;AI does not need to be perfect to be useful. It needs to be transparent enough that humans can see where it may fail. The next generation of developers won’t just build models. They’ll build guardrails, grounding layers, feedback loops, and retrieval systems that turn fluency into trust.&lt;/p&gt;

&lt;p&gt;And maybe one day, hallucination will become what debugging used to be: a normal, necessary step in making something smarter than it was yesterday.&lt;/p&gt;




&lt;h3&gt;
  
  
  Further reading and References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.anthropic.com/index/research" rel="noopener noreferrer"&gt;Anthropic research on model reliability&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openai.com/research" rel="noopener noreferrer"&gt;OpenAI papers on alignment and factuality&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://deepmind.google/discover/blog" rel="noopener noreferrer"&gt;DeepMind studies on factual consistency&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crfm.stanford.edu/" rel="noopener noreferrer"&gt;Stanford CRFM publications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>rag</category>
    </item>
    <item>
      <title>React’s Leaner Twin? A Deep Dive into Preact</title>
      <dc:creator>Nandan</dc:creator>
      <pubDate>Sat, 04 Oct 2025 09:37:46 +0000</pubDate>
      <link>https://dev.to/nandan-parmar/reacts-leaner-twin-a-deep-dive-into-preact-4ilf</link>
      <guid>https://dev.to/nandan-parmar/reacts-leaner-twin-a-deep-dive-into-preact-4ilf</guid>
      <description>&lt;p&gt;I like tools that stay close to the browser. Preact does that and still feels familiar if you come from React. This doc is about how I set it up, how it keeps code light, where it fits next to React, and a small contribution I made that later led to a fix upstream The goal here is to help you understand Preact and Roll out and not to document a manual.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick picture of Preact and React together
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjvnz7egubx8qprlxkjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjvnz7egubx8qprlxkjp.png" alt="Preact vs React" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig:1 React and Preact share the same model, but Preact trims the overhead&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  A short idea of Preact
&lt;/h2&gt;

&lt;p&gt;Preact is a compact runtime for JSX and components. It uses the native event system that the browser provides. That choice keeps overhead down and makes interop with plain DOM code simple. The core is small, and extra parts live in packages you add only when you need them. For example, the compat layer lets most React libraries run without pulling React itself. See the guide on event semantics and compat notes for details.&lt;/p&gt;
&lt;h2&gt;
  
  
  Clear view next to React
&lt;/h2&gt;

&lt;p&gt;You can move between the two without changing how you think about components. Here are the points that tend to matter when you are shipping.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Events.&lt;/strong&gt; In Preact, &lt;code&gt;onInput&lt;/code&gt; fires on every keystroke and &lt;code&gt;onChange&lt;/code&gt; fires when the value is committed. In React, the &lt;code&gt;onChange&lt;/code&gt; prop behaves like &lt;code&gt;onInput&lt;/code&gt;. When porting code, map this one carefully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundle shape.&lt;/strong&gt; Preact keeps the base small and places extras behind imports, so you do not pay for features you are not using. The compat alias can be enabled only for the packages that need it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server render.&lt;/strong&gt; You can render to HTML and then attach on the client with &lt;code&gt;preact-render-to-string&lt;/code&gt;. It works in Node and also in the browser if you really need it for tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How it stays lightweight
&lt;/h2&gt;

&lt;p&gt;Two design choices keep Preact small and fast.&lt;/p&gt;

&lt;p&gt;First, its core doesn’t try to recreate browser behavior. It uses the browser’s native event system instead of adding a synthetic layer, which means less code to ship and fewer surprises when mixing with plain DOM APIs.&lt;/p&gt;

&lt;p&gt;Second, anything extra like compatibility layers, debug tools, or dev only helpers lives in separate packages. You bring them in only when you need them.&lt;/p&gt;

&lt;p&gt;and similarly If you enable &lt;code&gt;compat&lt;/code&gt; for one React-only library, check its cost in your own build and keep everything else on core Preact. The Vite preset makes toggling this easy.&lt;/p&gt;
&lt;h2&gt;
  
  
  Build setup that does not grow out of control
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// vite.config.ts&lt;/span&gt;
&lt;span class="c1"&gt;// I keep compat off unless a dependency truly needs React types or internals.&lt;/span&gt;
&lt;span class="c1"&gt;// Dev tools stay on only in development. This keeps the production bundle lean.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;preact&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@preact/preset-vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;preact&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;reactAliasesEnabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;devToolsEnabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;})]&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you want static pages with client features, the preset can prerender routes at build time. For server HTML, use preact-render-to-string and then attach on the client.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// server.ts&lt;/span&gt;
&lt;span class="c1"&gt;// This renders a full HTML string. Keeping this step simple so it's easy to follow and debug later.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;renderToString&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;preact-render-to-string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;renderToString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;!doctype html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;
    &amp;lt;div id="app"&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/div&amp;gt;
    &amp;lt;script type="module" src="/client.tsx"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// client.tsx&lt;/span&gt;
&lt;span class="c1"&gt;// We attach interactivity to the server HTML. The root stays stable.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;hydrate&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;preact&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;hydrate&lt;/span&gt;&lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Forms that match the platform
&lt;/h2&gt;

&lt;p&gt;In Preact, form events behave just like they do in plain HTML. If you want your code to respond every time the user types, use &lt;strong&gt;onInput&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
If you only care when the user finishes typing or leaves the field, use &lt;strong&gt;onChange&lt;/strong&gt;. Stick to these browser rules and your forms will stay consistent without extra fixes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// This input updates a signal on each keystroke.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@preact/signals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;NameField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
      &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;onInput&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Precise state with signals
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ec95s9hjm2fuqbue9jr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ec95s9hjm2fuqbue9jr.jpg" alt="Signals" width="800" height="413"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig:2 The signal feeds a computed value, an effect, and a view. Only readers update.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Signals automatically keep track of which components use a specific value and update only those parts when it changes. That means you don’t need extra wrappers like &lt;code&gt;useMemo&lt;/code&gt; or &lt;code&gt;useCallback&lt;/code&gt; to control rerenders. &lt;/p&gt;

&lt;p&gt;Here’s a simple pattern that I’ve found clear and efficient in real projects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Signals for shared state, computed for derived values, effect for side work.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;effect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@preact/signals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nf"&gt;effect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dispatchEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CustomEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cart_total&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Cart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;strong&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Total: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;strong&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;The signal feeds a computed value, an effect, and a view. Only readers update.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Server HTML with suspense and islands
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqag5iycx775a8mgcika.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqag5iycx775a8mgcika.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig:3 Islands hydrating after fallback resolves, without layout shifts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If parts of the page wait on data, you can show a fallback and attach when the island resolves. The current work in Preact makes this smoother and removes some old layout constraints, which helps when you stream or mix static and live parts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// This island may load later. The layout stays natural.&lt;/span&gt;
&lt;span class="c1"&gt;// A wrapper is not required when it becomes many nodes.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Suspense&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;preact/compat&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Profile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Team&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading profile…&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Static HTML lands first, the fallback appears, the island resolves, then listeners attach.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Learning through contribution
&lt;/h2&gt;

&lt;p&gt;While exploring Preact’s context and memo behavior during performance tests, I noticed a subtle memory pattern that kept detached nodes around longer than expected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmug4hdlh8qysj3g04v8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmug4hdlh8qysj3g04v8q.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig:4 Memory retention issue and how the fix resolved detached nodes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I raised it upstream, and the Preact maintainers quickly improved the commit path logic in v11. After the patch, heap snapshots stabilized exactly as they should.&lt;/p&gt;

&lt;p&gt;That kind of responsiveness is one reason I like working with Preact, the core stays small, but the community moves fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Preact earns its place
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Same mental model as React, with less code shipped.&lt;/li&gt;
&lt;li&gt;Real DOM events, no synthetic layer.&lt;/li&gt;
&lt;li&gt;Fast hydration and smaller bundles.&lt;/li&gt;
&lt;li&gt;Straightforward state through Signals.&lt;/li&gt;
&lt;li&gt;Great compatibility when you need React libraries — and you can turn it off when you don’t.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’ve been building React apps and want the same comfort with better performance, Preact deserves a look.&lt;/p&gt;

&lt;h3&gt;
  
  
  Further reading
&lt;/h3&gt;

&lt;p&gt;If you’d like to dig deeper into what’s mentioned above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore &lt;strong&gt;&lt;a href="https://preactjs.com" rel="noopener noreferrer"&gt;Preact’s official documentation&lt;/a&gt;&lt;/strong&gt; — especially the parts on Signals, native events, and hydration.&lt;/li&gt;
&lt;li&gt;Check the &lt;strong&gt;&lt;a href="https://github.com/preactjs/preset-vite" rel="noopener noreferrer"&gt;@preact/preset-vite plugin&lt;/a&gt;&lt;/strong&gt; for build setup and prerendering.&lt;/li&gt;
&lt;li&gt;Look at &lt;strong&gt;&lt;a href="https://github.com/preactjs/preact-render-to-string" rel="noopener noreferrer"&gt;preact-render-to-string&lt;/a&gt;&lt;/strong&gt; for server side rendering examples.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>frontend</category>
      <category>performance</category>
      <category>react</category>
      <category>preact</category>
    </item>
  </channel>
</rss>
