<?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: Tech Webster</title>
    <description>The latest articles on DEV Community by Tech Webster (@techwebster).</description>
    <link>https://dev.to/techwebster</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3755877%2F8fb48f99-2ac5-437f-832c-d1b5cf516e91.jpeg</url>
      <title>DEV Community: Tech Webster</title>
      <link>https://dev.to/techwebster</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techwebster"/>
    <language>en</language>
    <item>
      <title>React List Keys: Keep Edited Text with the Right Record</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Sat, 31 Oct 2026 05:35:26 +0000</pubDate>
      <link>https://dev.to/techwebster/react-list-keys-keep-edited-text-with-the-right-record-4945</link>
      <guid>https://dev.to/techwebster/react-list-keys-keep-edited-text-with-the-right-record-4945</guid>
      <description>&lt;p&gt;You type a note in the first row of a list. Then you sort the list. The note stays in the first row, but that row now shows a different record.&lt;/p&gt;

&lt;p&gt;This can happen when a React list uses its array index as a key. The rows look correct until someone edits a field and changes the order.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the text ends up in the wrong row
&lt;/h2&gt;

&lt;p&gt;Each editor below stores its text with useState. React uses the key to decide which editor instance belongs to which item.&lt;/p&gt;

&lt;p&gt;An index key identifies a position: first row, second row. After sorting, a different record can occupy that position while the editor keeps its previous state. A record ID gives React a way to match the editor to the same record after it moves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the example
&lt;/h2&gt;

&lt;p&gt;Paste this component into a React application's App.jsx. Start with the default stable keys, edit a note, and reverse the list. The note should follow its record.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&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;react&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;initialDrafts&lt;/span&gt; &lt;span class="o"&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;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;incident-42&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cache invalidation review&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Check the stale key path.&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;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;incident-57&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Retry policy review&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Check the backoff limits.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DraftEditor&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;stableKeys&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setBody&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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;article&lt;/span&gt; &lt;span class="na"&gt;aria-label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`Draft at position &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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="nt"&gt;h2&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;draft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&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;h2&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;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Reviewer notes for &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;draft&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;lt;&lt;/span&gt;&lt;span class="nt"&gt;textarea&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;body&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setBody&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&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="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="nt"&gt;label&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;article&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ReviewQueue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;stableKeys&lt;/span&gt; &lt;span class="o"&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;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;drafts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDrafts&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initialDrafts&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;reverseQueue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setDrafts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;current&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;current&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;reverse&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;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Key strategy: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;stableKeys&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;draft id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;array position&lt;/span&gt;&lt;span class="dl"&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;p&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;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;reverseQueue&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Reverse review order&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&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;drafts&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;draft&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;position&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DraftEditor&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;stableKeys&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;draft&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;stableKeys&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;stableKeys&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="si"&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;To see the bug, render the component with stableKeys={false}. Edit incident-42 before reversing the list. The first row will now display incident-57 while keeping the text you entered for incident-42.&lt;/p&gt;

&lt;p&gt;The important line is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;stableKeys&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a real editable list, use a stable value that represents the item among its siblings. Avoid generating a new random key during every render: that gives the component a new identity and resets its state.&lt;/p&gt;

&lt;h2&gt;
  
  
  What keys do not save
&lt;/h2&gt;

&lt;p&gt;If you remove a row from the tree, its local state is discarded. Bringing it back with the same key does not restore the old text. If edits must survive filtering or navigation, store them in a parent or another persistent store, indexed by record ID.&lt;/p&gt;

&lt;p&gt;For a single editor, you might deliberately want to clear the local buffer when the selected record changes. Keying that editor by the selected ID makes that reset explicit. Keep the key on the smallest subtree you intend to reset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the interaction that caused the bug
&lt;/h2&gt;

&lt;p&gt;Edit one record, reorder the list, and check that the edited value still belongs to that record. Checking only the displayed row order misses the problem.&lt;/p&gt;

&lt;p&gt;Then remove the edited record and bring it back. Decide whether losing the local text matches your product's requirements. That is a persistence decision as well as a rendering decision.&lt;/p&gt;

&lt;p&gt;Read more in React's &lt;a href="https://react.dev/learn/preserving-and-resetting-state" rel="noopener noreferrer"&gt;state identity guide&lt;/a&gt; and &lt;a href="https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key" rel="noopener noreferrer"&gt;list key guidance&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Learn React by Building a Searchable Book List</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Fri, 30 Oct 2026 05:24:56 +0000</pubDate>
      <link>https://dev.to/techwebster/learn-react-by-building-a-searchable-book-list-1adk</link>
      <guid>https://dev.to/techwebster/learn-react-by-building-a-searchable-book-list-1adk</guid>
      <description>&lt;p&gt;If you know JavaScript functions, arrays, objects and events, you can start learning React. Use one small project—a searchable book list—to learn components, props and state without adding a database or routing first.&lt;/p&gt;

&lt;p&gt;If those JavaScript topics still feel unfamiliar, practice them before starting this roadmap. React uses them throughout the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Build a static version
&lt;/h2&gt;

&lt;p&gt;Create a page header, a book card and a list. A component is a function that returns part of the interface. JSX lets you write that interface alongside JavaScript expressions.&lt;/p&gt;

&lt;p&gt;Put a few fictional books in an array. Pass each book's title, author and category to the card as props. Props are values the parent provides to a child component.&lt;/p&gt;

&lt;p&gt;Your first checkpoint is a readable list with no interaction. Change the array and confirm the page shows the new content.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Render lists and empty results
&lt;/h2&gt;

&lt;p&gt;Use map to render the books. Give each item a stable key from the data, especially if the list can be filtered or reordered.&lt;/p&gt;

&lt;p&gt;Add a message for an empty list. Sketch which component owns the list and which component renders a card. Keep the structure small enough to explain.&lt;/p&gt;

&lt;p&gt;React's &lt;a href="https://react.dev/learn/thinking-in-react" rel="noopener noreferrer"&gt;Thinking in React&lt;/a&gt; walks through this process with a product table.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add search and a category filter
&lt;/h2&gt;

&lt;p&gt;Store the search text and selected category in state. State holds values that need to survive between renders and change through interaction.&lt;/p&gt;

&lt;p&gt;Calculate the visible books from those values and the original array. Do not store another copy of the filtered list unless you have a specific reason; duplicate state can drift out of sync.&lt;/p&gt;

&lt;p&gt;Use a labeled input for search and native controls for the filter. Test with a keyboard. A query with no matches should show a useful message rather than a blank area.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Add one form
&lt;/h2&gt;

&lt;p&gt;Let someone add a book to the in-memory list. Show an error for an empty title and preserve what they typed while they correct it.&lt;/p&gt;

&lt;p&gt;With a controlled input, its value comes from state and its change handler updates that state. Check that the form behaves correctly after several submissions. A refresh can reset the list at this stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Load data and handle failure
&lt;/h2&gt;

&lt;p&gt;Once local state makes sense, load a small JSON dataset. Show loading, error, empty and successful states. Handle an older request finishing after a newer one so it cannot overwrite the current result.&lt;/p&gt;

&lt;p&gt;Learn Effects as a way to synchronize with an external system. Filtering an existing array is a calculation, so it usually belongs in render logic rather than an Effect. See React's &lt;a href="https://react.dev/learn/synchronizing-with-effects" rel="noopener noreferrer"&gt;Effect guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before adding more libraries
&lt;/h2&gt;

&lt;p&gt;Explain how a typed character reaches state, changes the filtered result and updates the list. Then add one feature without duplicating data in state.&lt;/p&gt;

&lt;p&gt;When you can do that, explore testing, routing, TypeScript and deployment as separate next steps. Keep the book list as a project you understand rather than expanding it until every part depends on a new tool.&lt;/p&gt;

&lt;p&gt;Start with the official &lt;a href="https://react.dev/learn" rel="noopener noreferrer"&gt;React Quick Start&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Wrong Image or Title When You Share a Link? Check These Four Things</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:04:17 +0000</pubDate>
      <link>https://dev.to/techwebster/wrong-image-or-title-when-you-share-a-link-check-these-four-things-4002</link>
      <guid>https://dev.to/techwebster/wrong-image-or-title-when-you-share-a-link-check-these-four-things-4002</guid>
      <description>&lt;p&gt;You share a page on LinkedIn or Facebook, but the preview shows an old title, the wrong image, or no image at all. The page looks fine in your browser. What should you check next?&lt;/p&gt;

&lt;p&gt;A link preview depends on several steps: the platform fetches the shared URL, reads its metadata, fetches the image, and may reuse a cached result. A failure at any step can produce the wrong card.&lt;/p&gt;

&lt;p&gt;Work through these four checks in order. The examples below use placeholder URLs: replace them with your deployed page and image URLs.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Check the metadata in the HTML response
&lt;/h2&gt;

&lt;p&gt;Start with the &lt;strong&gt;exact URL you are sharing&lt;/strong&gt;, including its path and any query parameters. Checking only the homepage can miss a problem on an individual article or product page.&lt;/p&gt;

&lt;p&gt;A basic Open Graph configuration looks like this inside the document's &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A useful page title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A short, accurate summary of this page."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/guides/launch"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/images/launch-card.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image:alt"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"An illustrated checklist for launching a website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use your intended canonical page address for &lt;code&gt;og:url&lt;/code&gt; and a public, absolute URL for &lt;code&gt;og:image&lt;/code&gt;. Use &lt;code&gt;article&lt;/code&gt; instead of &lt;code&gt;website&lt;/code&gt; when describing an article. The &lt;a href="https://ogp.me/" rel="noopener noreferrer"&gt;Open Graph specification&lt;/a&gt; defines the fields and optional image properties.&lt;/p&gt;

&lt;p&gt;Fetch the deployed HTML without relying on your browser's JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;--max-time&lt;/span&gt; 30 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-D&lt;/span&gt; /tmp/card-headers.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; /tmp/card.html &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s1"&gt;'Final URL: %{url_effective}\nStatus: %{http_code}\n'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'https://example.com/guides/launch'&lt;/span&gt;

&lt;span class="nb"&gt;cat&lt;/span&gt; /tmp/card-headers.txt
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-iE&lt;/span&gt; &lt;span class="s1"&gt;'og:(title|description|type|url|image)'&lt;/span&gt; /tmp/card.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-L&lt;/code&gt; follows redirects. Inspect the headers as well as the final status: a redirect to a login page, a challenge page, or the wrong route can explain a missing preview. A &lt;code&gt;200&lt;/code&gt; response alone does not prove that you received the intended page.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;grep&lt;/code&gt; command is a quick search, not an HTML validator. Inspect the full saved response if tags span multiple lines or the result is unclear. Compare it with the browser's rendered DOM. Tags added only by client-side JavaScript may be absent from the response a preview crawler reads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next.js detail:&lt;/strong&gt; metadata can stream for ordinary clients, while Next.js handles known HTML-limited bots differently. For example, its documented behavior for &lt;code&gt;facebookexternalhit&lt;/code&gt; places resolved metadata in the head before returning the page. A normal curl request therefore does not always reproduce the crawler's response. You can compare a second request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;--max-time&lt;/span&gt; 30 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="s1"&gt;'facebookexternalhit/1.1'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; /tmp/card-facebook.html &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'https://example.com/guides/launch'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This changes the user agent only. It does not reproduce the platform's network, cache, or full crawler behavior. Use the &lt;a href="https://nextjs.org/docs/app/api-reference/functions/generate-metadata#streaming-metadata" rel="noopener noreferrer"&gt;Next.js metadata documentation&lt;/a&gt; and the platform inspector together.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Look for conflicting or inherited values
&lt;/h2&gt;

&lt;p&gt;A layout, route, CMS plugin, and manually written tag can each contribute metadata. Check the final response for the page, rather than assuming a configuration file tells the whole story.&lt;/p&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A product page that inherits the homepage title or image.&lt;/li&gt;
&lt;li&gt;An old image URL emitted alongside the intended one.&lt;/li&gt;
&lt;li&gt;Different canonical and Open Graph URLs pointing at unintended pages.&lt;/li&gt;
&lt;li&gt;A nested route whose metadata differs from what you tested locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Multiple &lt;code&gt;og:image&lt;/code&gt; tags can be intentional; Open Graph supports arrays and gives preference to the first value when conflicts occur. Remove unintended duplicates and put the preferred image first. Associate each image's structured properties with that image.&lt;/p&gt;

&lt;p&gt;In Next.js, nested metadata such as &lt;code&gt;openGraph&lt;/code&gt; uses shallow merging between route segments. Defining &lt;code&gt;openGraph&lt;/code&gt; in a child segment can replace fields supplied by a parent. Check that your page still includes its intended image and description after an override. See the &lt;a href="https://nextjs.org/docs/app/api-reference/functions/generate-metadata#merging" rel="noopener noreferrer"&gt;merging documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; inspect both the homepage and one nested page after deployment. Each should describe its own content.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Fetch the image without your login
&lt;/h2&gt;

&lt;p&gt;Copy the final &lt;code&gt;og:image&lt;/code&gt; URL and request it separately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;--max-time&lt;/span&gt; 30 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-D&lt;/span&gt; /tmp/card-image-headers.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; /tmp/card-image &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s1"&gt;'Final URL: %{url_effective}\nStatus: %{http_code}\nType: %{content_type}\n'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'https://example.com/images/launch-card.jpg'&lt;/span&gt;

&lt;span class="nb"&gt;cat&lt;/span&gt; /tmp/card-image-headers.txt
file /tmp/card-image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that the response contains the intended image, with a successful status and an appropriate image content type. An HTML error page saved with a &lt;code&gt;.jpg&lt;/code&gt; name is still an error page.&lt;/p&gt;

&lt;p&gt;A file visible in your signed-in browser may depend on a session cookie. Expiring image URLs, hotlink protection, CDN rules, or bot challenges can also prevent a platform from fetching it. Check crawler access to both the page and image; an unauthenticated curl request is useful evidence, but it cannot guarantee that the platform can reach them.&lt;/p&gt;

&lt;p&gt;Use a supported image format and the target platform's current size and file limits. Keep important text and logos away from the edges because platforms may crop differently. If you include &lt;code&gt;og:image:width&lt;/code&gt;, &lt;code&gt;og:image:height&lt;/code&gt;, or &lt;code&gt;og:image:type&lt;/code&gt;, make them match the actual file. Add useful &lt;code&gt;og:image:alt&lt;/code&gt; text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; open the downloaded file and confirm it is the image you intended to share.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check the platform's cached preview
&lt;/h2&gt;

&lt;p&gt;Once the deployed HTML and image are correct, inspect the same shared URL using the destination platform's tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/post-inspector/" rel="noopener noreferrer"&gt;LinkedIn Post Inspector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.facebook.com/tools/debug/" rel="noopener noreferrer"&gt;Facebook Sharing Debugger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools may require sign-in. Review any fetch errors and the values the platform detected. Where offered, request a fresh scrape or inspection after deploying your fix.&lt;/p&gt;

&lt;p&gt;If you replaced an image while keeping its URL, your own CDN may still serve an older file. Check that cache too. A new, stable image filename can help distinguish a new asset, but update &lt;code&gt;og:image&lt;/code&gt; and recheck the page rather than relying on a filename change alone.&lt;/p&gt;

&lt;p&gt;Refreshing a preview does not guarantee that every existing post will update immediately. Platforms can cache and display cards differently.&lt;/p&gt;

&lt;p&gt;Avoid appending random query strings to every shared page URL as a permanent workaround. That can create more URL variants while leaving the original issue unresolved.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick way to narrow it down
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you see&lt;/th&gt;
&lt;th&gt;Where to investigate first&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Homepage card appears on every page&lt;/td&gt;
&lt;td&gt;Route metadata, inherited defaults, and redirects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correct title, missing image&lt;/td&gt;
&lt;td&gt;Image URL, response type, and crawler access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Old card after a deployment&lt;/td&gt;
&lt;td&gt;Deployed HTML, CDN caches, then platform cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correct in browser, wrong in inspector&lt;/td&gt;
&lt;td&gt;Server response, user-agent differences, and access rules&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are starting points, not definitive diagnoses. Record the shared URL, final redirected URL, image URL, deployment time, and inspector result so you can compare the same evidence after a fix.&lt;/p&gt;

&lt;p&gt;At TechWebster, we built &lt;a href="https://seo.techwebster.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=link_preview_checks" rel="noopener noreferrer"&gt;SEO By TechWebster&lt;/a&gt; to help inspect metadata and social-card setup before launch. Use it as an initial check, then confirm the result with the destination platform's own inspector.&lt;/p&gt;

&lt;p&gt;For a wider launch review, see &lt;a href="https://dev.to/techwebster/5-seo-checks-to-run-before-launching-your-website-22om"&gt;5 SEO Checks to Run Before Launching Your Website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Which preview problem have you run into most often: the wrong title, a missing image, or a card that refuses to refresh?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>socialmedia</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>React Syllabus for Beginners: A Step-by-Step Roadmap</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Tue, 27 Oct 2026 03:16:02 +0000</pubDate>
      <link>https://dev.to/techwebster/react-syllabus-for-beginners-a-step-by-step-roadmap-361g</link>
      <guid>https://dev.to/techwebster/react-syllabus-for-beginners-a-step-by-step-roadmap-361g</guid>
      <description>&lt;p&gt;Comfortable building a page with HTML, CSS and JavaScript? React is a next step for building interfaces from reusable components and keeping them in sync with changing data.&lt;/p&gt;

&lt;p&gt;This syllabus follows our HTML, CSS and JavaScript roadmaps. Work through the topics in order, try the checkpoints, and build one feature at a time. It is a learning plan, not a promise that reading a list makes you production-ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before You Start
&lt;/h2&gt;

&lt;p&gt;You should be able to use JavaScript functions, arrays, objects, destructuring, modules, events, promises and async/await. Practice mapping and filtering arrays without React first. You do not need to learn Node.js backend development before starting.&lt;/p&gt;

&lt;p&gt;Revisit our &lt;a href="https://dev.to/techwebster/html-syllabus-for-beginners-6fp"&gt;HTML syllabus&lt;/a&gt;, &lt;a href="https://dev.to/techwebster/css-syllabus-for-beginners-4001"&gt;CSS syllabus&lt;/a&gt; and &lt;a href="https://dev.to/techwebster/javascript-syllabus-for-beginners-a-step-by-step-roadmap-5c8k"&gt;JavaScript syllabus&lt;/a&gt; when those foundations need more practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Learning Order
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Sections&lt;/th&gt;
&lt;th&gt;Try this before moving on&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. Components and rendering&lt;/td&gt;
&lt;td&gt;1–7&lt;/td&gt;
&lt;td&gt;Build a static book list from data and explain each component's props.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Interaction and state&lt;/td&gt;
&lt;td&gt;8–14&lt;/td&gt;
&lt;td&gt;Add search, filters and a validated form without duplicating state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. External systems and reusable logic&lt;/td&gt;
&lt;td&gt;15–19&lt;/td&gt;
&lt;td&gt;Handle loading and failure, clean up an Effect and explain when a ref or custom Hook helps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Quality, delivery and next steps&lt;/td&gt;
&lt;td&gt;20–24&lt;/td&gt;
&lt;td&gt;Test a user journey and finish a small accessible capstone before adding ecosystem tools.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The later topics build on the earlier ones. Return to a checkpoint when you cannot yet explain the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Introduction to React
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What a UI library does and how React differs from plain DOM scripting&lt;/li&gt;
&lt;li&gt;Describing the interface from data instead of manually changing each element&lt;/li&gt;
&lt;li&gt;Components, props and state at a high level&lt;/li&gt;
&lt;li&gt;Core React versus frameworks, routing libraries and build tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React does not replace HTML, CSS or JavaScript. Start with the official &lt;a href="https://react.dev/learn" rel="noopener noreferrer"&gt;React Quick Start&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Setting Up Your Workspace
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A code editor, modern browser and browser developer tools&lt;/li&gt;
&lt;li&gt;Trying examples in the interactive sandboxes in React's documentation&lt;/li&gt;
&lt;li&gt;For local learning, a React project created with a current build tool such as Vite&lt;/li&gt;
&lt;li&gt;Reading the generated files, package scripts and development-server output&lt;/li&gt;
&lt;li&gt;Distinguishing development from a production build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use &lt;a href="https://react.dev/learn/creating-a-react-app" rel="noopener noreferrer"&gt;React's setup guidance&lt;/a&gt; to choose an approach. React recommends a framework for new production apps; its &lt;a href="https://react.dev/learn/build-a-react-app-from-scratch" rel="noopener noreferrer"&gt;from-scratch guide&lt;/a&gt; also supports learning the basics with a build tool. Follow &lt;a href="https://vite.dev/guide/" rel="noopener noreferrer"&gt;Vite's current instructions&lt;/a&gt; and Node.js requirements if you choose that route. This syllabus does not depend on Create React App.&lt;/p&gt;

&lt;p&gt;Practice: run a starter app, change the heading, and find the error when you deliberately break a component name.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. JSX and Rendering Markup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Writing markup in JSX and embedding JavaScript expressions&lt;/li&gt;
&lt;li&gt;Closing tags, returning one enclosing structure and using fragments&lt;/li&gt;
&lt;li&gt;Using className and JavaScript objects for inline styles&lt;/li&gt;
&lt;li&gt;Keeping render logic predictable and free of side effects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: rebuild a simple profile card with a heading, image and descriptive text.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Components and File Organization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Function components and capitalized component names&lt;/li&gt;
&lt;li&gt;Defining a component separately from rendering it&lt;/li&gt;
&lt;li&gt;Nesting components and organizing imports and exports&lt;/li&gt;
&lt;li&gt;Splitting by responsibility rather than turning every line into a component&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: draw a component tree for a page header, search bar, book list and book card.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Props and Composition
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Passing strings, numbers, objects and callbacks to children&lt;/li&gt;
&lt;li&gt;Reading props without modifying them&lt;/li&gt;
&lt;li&gt;Using children to compose a reusable layout&lt;/li&gt;
&lt;li&gt;Keeping data flow understandable from parent to child&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: render different book cards with the same component. Explain which values come from props.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Lists and Stable Keys
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Transforming arrays into elements with map&lt;/li&gt;
&lt;li&gt;Giving sibling items stable keys from their data&lt;/li&gt;
&lt;li&gt;Avoiding array-index keys when items can move, appear or disappear&lt;/li&gt;
&lt;li&gt;Understanding that keys help identify items rather than becoming ordinary child props&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: reorder editable rows and verify that each edit stays with its record. Read the official &lt;a href="https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key" rel="noopener noreferrer"&gt;list-key guidance&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Conditional UI and Styling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Showing different output with conditions and conditional expressions&lt;/li&gt;
&lt;li&gt;Rendering helpful empty results instead of a blank area&lt;/li&gt;
&lt;li&gt;Applying styles from state or props&lt;/li&gt;
&lt;li&gt;Reusing responsive CSS and semantic HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checkpoint: build the static book-list interface before adding interaction. &lt;a href="https://react.dev/learn/thinking-in-react" rel="noopener noreferrer"&gt;Thinking in React&lt;/a&gt; demonstrates that sequence.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Events and Handlers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Passing an event handler rather than calling it during render&lt;/li&gt;
&lt;li&gt;Responding to clicks, changes and form submissions&lt;/li&gt;
&lt;li&gt;Passing callback props to communicate user actions&lt;/li&gt;
&lt;li&gt;Understanding default browser behavior and event propagation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: add a button that reports which book was selected.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. State with useState
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Adding state for values that change through interaction&lt;/li&gt;
&lt;li&gt;Reading state as a snapshot for a particular render&lt;/li&gt;
&lt;li&gt;Requesting an update with the setter&lt;/li&gt;
&lt;li&gt;Using an updater function when the next value depends on the previous value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: build a counter with increase, decrease and reset controls. Explain why changing an ordinary variable is not enough to update the interface. See &lt;a href="https://react.dev/learn/adding-interactivity" rel="noopener noreferrer"&gt;Adding Interactivity&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Updating Objects and Arrays
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating objects and arrays in state as read-only&lt;/li&gt;
&lt;li&gt;Producing updated copies rather than mutating existing state&lt;/li&gt;
&lt;li&gt;Adding, removing and editing items using stable IDs&lt;/li&gt;
&lt;li&gt;Copying nested values when the update requires it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: toggle a book's completed status and remove a book without changing the previous array.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Controlled Forms and Validation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Connecting text inputs, checkboxes and selects to state&lt;/li&gt;
&lt;li&gt;Keeping controlled values consistent rather than switching between controlled and uncontrolled inputs&lt;/li&gt;
&lt;li&gt;Handling submission and preserving entered values when validation fails&lt;/li&gt;
&lt;li&gt;Associating labels, instructions and errors with form controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: add a book with a required title and a category. Check keyboard submission and repeated submissions. Client validation supports usability; a backend must still validate and authorize requests. Consult React's &lt;a href="https://react.dev/reference/react-dom/components/input" rel="noopener noreferrer"&gt;input reference&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Choosing and Deriving State
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Storing the smallest useful representation of the interaction&lt;/li&gt;
&lt;li&gt;Calculating filtered lists and totals from existing data&lt;/li&gt;
&lt;li&gt;Avoiding duplicate state that can fall out of sync&lt;/li&gt;
&lt;li&gt;Representing loading or submission status without contradictory flags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: store search text and category, then calculate the visible books during render. Do not add an Effect just to copy that filtered list into state. See &lt;a href="https://react.dev/learn/you-might-not-need-an-effect" rel="noopener noreferrer"&gt;You Might Not Need an Effect&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Sharing State Between Components
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Finding the closest common parent that needs the data&lt;/li&gt;
&lt;li&gt;Lifting shared state up and passing values and callbacks down&lt;/li&gt;
&lt;li&gt;Keeping one source of truth for a shared value&lt;/li&gt;
&lt;li&gt;Distinguishing local editing state from shared application data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: keep a results count and book list synchronized from the same filter values. Review &lt;a href="https://react.dev/learn/managing-state" rel="noopener noreferrer"&gt;Managing State&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. State Identity and the Rules of Hooks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How position, component type and keys affect whether state is preserved&lt;/li&gt;
&lt;li&gt;Resetting a small editor intentionally when its selected record changes&lt;/li&gt;
&lt;li&gt;Understanding that removing a component discards its local state&lt;/li&gt;
&lt;li&gt;Calling ordinary Hooks such as useState at the top level of components or custom Hooks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: switch records and decide which edits should survive. Read &lt;a href="https://react.dev/learn/preserving-and-resetting-state" rel="noopener noreferrer"&gt;Preserving and Resetting State&lt;/a&gt; and the &lt;a href="https://react.dev/reference/rules/rules-of-hooks" rel="noopener noreferrer"&gt;Rules of Hooks&lt;/a&gt;. Keep the Hooks lint rules enabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Effects for External Synchronization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using an Effect when synchronizing with an external system&lt;/li&gt;
&lt;li&gt;Distinguishing rendering calculations, user events and Effects&lt;/li&gt;
&lt;li&gt;Specifying dependencies honestly and cleaning up subscriptions or timers&lt;/li&gt;
&lt;li&gt;Understanding development Strict Mode checks rather than disabling them to hide cleanup problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: subscribe to a browser event and remove the listener in cleanup. Filtering data and handling a click usually do not need an Effect. Follow &lt;a href="https://react.dev/learn/synchronizing-with-effects" rel="noopener noreferrer"&gt;Synchronizing with Effects&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Loading Data and Handling Failure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Displaying loading, error, empty and successful states&lt;/li&gt;
&lt;li&gt;Checking HTTP status and the shape of data before using it&lt;/li&gt;
&lt;li&gt;Avoiding stale responses overwriting newer results&lt;/li&gt;
&lt;li&gt;Offering a useful retry path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: load a small public JSON dataset and simulate a slow request, a failed request and no results. A simple Effect-based fetch can teach request lifecycles; production frameworks and data libraries may provide better loading, caching and request coordination. Keep private credentials out of browser code.&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Refs and DOM Access
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using useRef for a value that does not need to trigger a render&lt;/li&gt;
&lt;li&gt;Accessing a DOM node when focus, scrolling or measurement requires it&lt;/li&gt;
&lt;li&gt;Understanding why changing a ref does not update the UI&lt;/li&gt;
&lt;li&gt;Avoiding manual changes to DOM that React manages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: focus the search input from a clearly labeled button. Learn these features as &lt;a href="https://react.dev/learn/escape-hatches" rel="noopener noreferrer"&gt;escape hatches&lt;/a&gt;, not the default way to manage data flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. Reusing Logic with Custom Hooks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Extracting repeated stateful logic after its behavior is understood&lt;/li&gt;
&lt;li&gt;Naming custom Hooks with use&lt;/li&gt;
&lt;li&gt;Keeping each Hook's responsibility specific&lt;/li&gt;
&lt;li&gt;Understanding that sharing a Hook does not automatically share its state between callers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: extract a small online-status subscription used by two components. Explain the setup and cleanup. Use &lt;a href="https://react.dev/learn/reusing-logic-with-custom-hooks" rel="noopener noreferrer"&gt;Reusing Logic with Custom Hooks&lt;/a&gt; as a reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  19. Reducers and Context When Needed
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Consolidating related state transitions with useReducer&lt;/li&gt;
&lt;li&gt;Keeping reducer logic pure and testing transitions separately&lt;/li&gt;
&lt;li&gt;Passing shared values deeper through context when props become cumbersome&lt;/li&gt;
&lt;li&gt;Avoiding global context for every local input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: move increasingly complex book-editing actions into a reducer only when it makes them clearer. A small list can remain in useState. See &lt;a href="https://react.dev/learn/scaling-up-with-reducer-and-context" rel="noopener noreferrer"&gt;Scaling Up with Reducer and Context&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  20. Accessibility and Responsive Interaction
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using real links, buttons, headings and labeled controls&lt;/li&gt;
&lt;li&gt;Testing the full interaction with a keyboard&lt;/li&gt;
&lt;li&gt;Managing focus after important changes and communicating status or errors&lt;/li&gt;
&lt;li&gt;Checking narrow layouts, zoom and readable content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: add a book and find it using only the keyboard. Check the no-results message and make sure the result does not depend on color alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  21. Debugging and Testing Basics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reading component errors, warnings and network failures&lt;/li&gt;
&lt;li&gt;Inspecting props and state with React Developer Tools&lt;/li&gt;
&lt;li&gt;Testing visible behavior rather than private component details&lt;/li&gt;
&lt;li&gt;Starting with a test runner and a component-testing library appropriate to the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practice: test searching, no matches, invalid submission and a successful addition. Include a loading or failure case when fetching data. &lt;a href="https://testing-library.com/docs/react-testing-library/intro/" rel="noopener noreferrer"&gt;React Testing Library&lt;/a&gt; provides tools for tests that resemble how people use an interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  22. Routing, Frameworks and Performance: Next-Stage Topics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Adding URLs and navigation when the app actually needs multiple views&lt;/li&gt;
&lt;li&gt;Distinguishing client rendering, server rendering and Server Components&lt;/li&gt;
&lt;li&gt;Understanding that routing and production data-loading choices depend on the chosen framework or libraries&lt;/li&gt;
&lt;li&gt;Measuring a performance problem before adding memoization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are ecosystem and architecture topics, not prerequisites for your first component. Follow the chosen framework's current documentation rather than mixing incompatible setup instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  23. Capstone: An Accessible Reading List
&lt;/h2&gt;

&lt;p&gt;Build this in small steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Render fictional books with reusable cards and stable IDs.&lt;/li&gt;
&lt;li&gt;Add search, category filters, a results count and an empty state.&lt;/li&gt;
&lt;li&gt;Add, edit and remove books through labeled, validated controls.&lt;/li&gt;
&lt;li&gt;Load a dataset and provide loading, error and retry behavior.&lt;/li&gt;
&lt;li&gt;Add local persistence only if needed; label it clearly as browser-local storage rather than cloud sync.&lt;/li&gt;
&lt;li&gt;Test a complete user journey, review keyboard access and explain the component tree.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The separate book-list practice article is a companion exercise; this syllabus is the wider curriculum. Do not add authentication, payments or a database just to make the first project look bigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  24. Production Build and What to Learn Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Run the project's production build and preview it locally&lt;/li&gt;
&lt;li&gt;Check navigation, assets, empty states and failed requests in that build&lt;/li&gt;
&lt;li&gt;Deploy using the hosting instructions for the chosen build tool or framework&lt;/li&gt;
&lt;li&gt;Continue with TypeScript, routing, more testing or backend integration according to the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A browser-only React app cannot keep a secret API key private. Keep privileged operations on a suitable backend. Finishing a starter project is a foundation for further practice, not proof of production expertise.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Practice
&lt;/h2&gt;

&lt;p&gt;Read a topic, build a small example, change it and observe what happens. Revisit the book list as you learn. Before moving on, explain where its data lives, why it re-renders and what happens when something fails. Your pace depends on your experience and practice time.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Few Common Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need JavaScript before React?
&lt;/h3&gt;

&lt;p&gt;Yes. Functions, arrays, objects, modules and asynchronous code appear throughout React applications. Return to the JavaScript exercises whenever React syntax hides a language concept you do not yet understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I learn React or Next.js first?
&lt;/h3&gt;

&lt;p&gt;Learn components, props, state and events as React concepts. A framework can supply the project setup and production features, but those fundamentals still matter. A small learning app does not need every framework feature on day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need Redux or another state library?
&lt;/h3&gt;

&lt;p&gt;Not for the first project here. Start with local state, lifting shared state and clear data flow. Learn reducers and context when a concrete problem justifies them; evaluate additional libraries later.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does it take to learn React?
&lt;/h3&gt;

&lt;p&gt;There is no fixed mastery timeline. Being able to build, explain, test and debug a small feature tells you more than checking off topics or counting days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Helpful Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://react.dev/learn" rel="noopener noreferrer"&gt;React Learn&lt;/a&gt; — official lessons and interactive examples.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://react.dev/learn/thinking-in-react" rel="noopener noreferrer"&gt;Thinking in React&lt;/a&gt; — component structure and minimal state.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://react.dev/learn/managing-state" rel="noopener noreferrer"&gt;Managing State&lt;/a&gt; — state organization and sharing.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://react.dev/learn/escape-hatches" rel="noopener noreferrer"&gt;Escape Hatches&lt;/a&gt; — refs, Effects and reusable logic.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://react.dev/learn/creating-a-react-app" rel="noopener noreferrer"&gt;Creating a React App&lt;/a&gt; — current setup choices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related TechWebster Roadmaps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/techwebster/html-syllabus-for-beginners-6fp"&gt;HTML Syllabus for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/techwebster/css-syllabus-for-beginners-4001"&gt;CSS Syllabus for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/techwebster/javascript-syllabus-for-beginners-a-step-by-step-roadmap-5c8k"&gt;JavaScript Syllabus for Beginners: A Step-by-Step Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/techwebster/nodejs-syllabus-for-beginners-complete-backend-roadmap-566b"&gt;Node.js Syllabus for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which React topic would you like us to explain next with a hands-on example?&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>LiteLLM 1.107.0 Was Compromised: What to Check Before You Reinstall</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Sun, 25 Oct 2026 10:28:35 +0000</pubDate>
      <link>https://dev.to/techwebster/litellm-11070-was-compromised-what-to-check-before-you-reinstall-223h</link>
      <guid>https://dev.to/techwebster/litellm-11070-was-compromised-what-to-check-before-you-reinstall-223h</guid>
      <description>&lt;p&gt;If your team installed LiteLLM 1.107.0, check which builds and servers used it. LiteLLM says an attacker compromised its release pipeline on 21 October 2026 and published malicious packages.&lt;/p&gt;

&lt;p&gt;The difficult part is the cleanup. Removing the package may leave malicious files behind, and replacing the software does not invalidate credentials that were already stolen.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was affected?
&lt;/h2&gt;

&lt;p&gt;The maintainer’s report identifies malicious &lt;strong&gt;PyPI wheels for version 1.107.0&lt;/strong&gt; and affected container releases, including &lt;strong&gt;v1.107.0&lt;/strong&gt;, &lt;strong&gt;latest&lt;/strong&gt;, &lt;strong&gt;main-latest&lt;/strong&gt;, and &lt;strong&gt;main-stable&lt;/strong&gt; during the incident’s exposure window. The artifacts were subsequently removed or repointed.&lt;/p&gt;

&lt;p&gt;A wheel is the packaged Python code your installer downloads. A container tag such as &lt;code&gt;latest&lt;/code&gt; is a label that can point to different images over time.&lt;/p&gt;

&lt;p&gt;That distinction matters here. The maintainers say the official GitHub source tag did not contain the malicious files. Reviewing that source alone would not tell you whether a downloaded package was safe. They also say customers using the private enterprise registry were unaffected.&lt;/p&gt;

&lt;p&gt;Start with the &lt;a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026" rel="noopener noreferrer"&gt;maintainer’s incident report&lt;/a&gt; for the current scope and recovery instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why isn’t uninstalling enough?
&lt;/h2&gt;

&lt;p&gt;The malicious release could place files in Python’s startup path. Python can load those files when it starts, before your application explicitly imports LiteLLM.&lt;/p&gt;

&lt;p&gt;Wiz identifies files including &lt;code&gt;cook.pth&lt;/code&gt; and &lt;code&gt;sitecustomize.py&lt;/code&gt;. Its researchers describe credential theft and the ability to load more code, with targets including cloud credentials, developer secrets and AI provider keys. They also report observed use of stolen credentials. These findings do not establish what happened on your particular server. See &lt;a href="https://www.wiz.io/blog/litellm-compromised-steals-credentials" rel="noopener noreferrer"&gt;Wiz’s analysis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not begin by running pip in a suspected environment.&lt;/strong&gt; The maintainer warns that starting Python there can execute the malicious startup files again. Even a command intended to inspect the installation may start Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I find out whether we installed it?
&lt;/h2&gt;

&lt;p&gt;Begin with records you can inspect outside the suspected environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Check build logs and lockfiles for LiteLLM 1.107.0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check when CI jobs or servers installed it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For containers, find the image digest that actually ran. A digest identifies a particular image; a moving tag such as &lt;code&gt;latest&lt;/code&gt; does not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List the services, jobs and machines that used those builds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List the credentials those environments could access.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, pulling a clean &lt;code&gt;latest&lt;/code&gt; image today does not tell you what yesterday’s deployment used. Look at the deployment record and original image digest.&lt;/p&gt;

&lt;p&gt;Using LiteLLM does not by itself mean you installed an affected artifact. Establish that from the records before describing a particular system as exposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should an affected team do next?
&lt;/h2&gt;

&lt;p&gt;Bring in the person responsible for security or infrastructure and follow the live maintainer instructions. Preserve relevant logs before cleanup removes evidence.&lt;/p&gt;

&lt;p&gt;Track two parts of the recovery:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rebuild the affected environment.&lt;/strong&gt; The maintainer recommends treating it as compromised, addressing the startup files and rebuilding where possible. A fresh environment avoids relying on package removal to find every malicious file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replace exposed credentials and review their use.&lt;/strong&gt; Work with the services that issued those credentials. Check for unexpected access, resources or charges. Deploy replacement credentials to the rebuilt application and test that it still works.&lt;/p&gt;

&lt;p&gt;A successful application restart only shows that the application starts. It does not show that stolen credentials have stopped working elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in the root-cause report?
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026-attack-chain" rel="noopener noreferrer"&gt;23 October canonical investigation&lt;/a&gt; supersedes early theories about tokens being taken from request logs. LiteLLM says a master key exposed in a public repository was not revoked. An attacker used it to access the Agent Platform and retrieve an organization owner’s GitHub token, then obtained additional CI secrets and altered the release workflow.&lt;/p&gt;

&lt;p&gt;For teams building agents, the practical lesson is to revoke exposed keys immediately and give automation narrowly scoped credentials. Removing a leaked key from Git history does not revoke it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should we change in our release process?
&lt;/h2&gt;

&lt;p&gt;Keep enough information to identify the artifact each deployment used: the package version, build time and container digest where applicable. Pinning versions helps you reproduce a build, but a pinned version can still be malicious.&lt;/p&gt;

&lt;p&gt;For this incident, the useful review questions are specific: &lt;strong&gt;Did we run an affected artifact? Which environments used it? Which credentials could they reach?&lt;/strong&gt; Those answers give the recovery team somewhere concrete to begin.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Checked 25 October 2026 against the linked incident report, canonical investigation and Wiz analysis. Consult the live maintainer guidance before recovery. TechWebster has not independently reproduced the malware.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>python</category>
    </item>
    <item>
      <title>PHP2Shell Follow-up: Do You Need to Change Your Session Settings?</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Sat, 24 Oct 2026 14:36:29 +0000</pubDate>
      <link>https://dev.to/techwebster/php2shell-follow-up-do-you-need-to-change-your-session-settings-33dn</link>
      <guid>https://dev.to/techwebster/php2shell-follow-up-do-you-need-to-change-your-session-settings-33dn</guid>
      <description>&lt;p&gt;If you already updated PHP after PHP2Shell, there is one more notice to review. On 23 October, the PHP team described an additional risk involving session upload progress and a particular way of changing session settings.&lt;/p&gt;

&lt;p&gt;The notice does not say every PHP application is affected. The first thing to check is whether your application changes its session serializer while handling a request.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does that mean in ordinary PHP code?
&lt;/h2&gt;

&lt;p&gt;A session lets PHP keep information between requests, such as the data associated with a signed-in user. The &lt;strong&gt;session serializer&lt;/strong&gt; controls how that data is encoded when PHP stores it.&lt;/p&gt;

&lt;p&gt;PHP also has an &lt;strong&gt;upload-progress feature&lt;/strong&gt; that can store information about an upload in the session. An application can use this to report how much of a file has arrived.&lt;/p&gt;

&lt;p&gt;The new notice concerns a combination of these features. PHP describes a possible remote-code-execution issue, meaning an attacker could potentially make the server execute code. The issue is tracked as &lt;strong&gt;CVE-2026-115560&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which combination should I look for?
&lt;/h2&gt;

&lt;p&gt;The PHP notice describes an application that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Starts with &lt;code&gt;session.serialize_handler&lt;/code&gt; set to &lt;code&gt;php_binary&lt;/code&gt; or &lt;code&gt;php_serialize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Changes that setting to &lt;code&gt;php&lt;/code&gt; using &lt;code&gt;ini_set()&lt;/code&gt; before calling &lt;code&gt;session_start()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Still has session upload progress enabled.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Read those as a combination. Seeing &lt;code&gt;session_start()&lt;/code&gt; in your project alone does not establish that the application matches the notice.&lt;/p&gt;

&lt;p&gt;Search your application and relevant dependencies for &lt;code&gt;session.serialize_handler&lt;/code&gt;, then inspect any code that changes it. Check the PHP configuration used by the web application as well. Your command-line PHP installation may use a different configuration.&lt;/p&gt;

&lt;p&gt;If someone else manages the server, send them the official notice and ask them to check these settings in the environment serving your site.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does PHP recommend?
&lt;/h2&gt;

&lt;p&gt;PHP suggests disabling session upload progress until the next regular bugfix release:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;session.upload_progress.enabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are two qualifications in the notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Applications that &lt;strong&gt;never change the serializer at runtime&lt;/strong&gt; can keep the feature enabled.&lt;/li&gt;
&lt;li&gt;If you already applied this setting for the earlier &lt;strong&gt;CVE-2026-109619&lt;/strong&gt; advisory, keep it in place. PHP says no further action is needed for that case.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Source: &lt;a href="https://www.php.net/archive/2026.php#2026-10-23-1" rel="noopener noreferrer"&gt;PHP’s 23 October informational advisory&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should I check after changing the setting?
&lt;/h2&gt;

&lt;p&gt;If you need to apply the setting, have the person responsible for the deployment put it in &lt;code&gt;php.ini&lt;/code&gt;, an FPM pool or server configuration that applies before request parsing, then restart every relevant PHP worker. Do not rely on &lt;code&gt;ini_set()&lt;/code&gt; or FPM &lt;code&gt;.user.ini&lt;/code&gt; for this mitigation. These deployment instructions come from &lt;a href="https://www.php.net/archive/2026.php#2026-10-21-5" rel="noopener noreferrer"&gt;PHP’s 21 October security advisory&lt;/a&gt;. Then confirm the effective setting in the web-serving environment.&lt;/p&gt;

&lt;p&gt;Test any upload-progress interface your application uses, because disabling the feature can affect how progress is reported. Also run your usual session and upload checks after the configuration change.&lt;/p&gt;

&lt;p&gt;Record where the setting was changed and which application instances received it. That avoids assuming that a configuration edit reached every running worker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do I still need the original PHP2Shell update?
&lt;/h2&gt;

&lt;p&gt;Yes. Keep the original fixes and any applicable mitigation in place. This follow-up adds a configuration check; it does not replace the previous patch guidance.&lt;/p&gt;

&lt;p&gt;Our &lt;a href="https://dev.to/techwebster/php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check-458p"&gt;original PHP2Shell article&lt;/a&gt; covers CVE-2026-109618 and CVE-2026-109619. Keep that update record together with the outcome of this session-setting review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is still pending?
&lt;/h2&gt;

&lt;p&gt;PHP says a full advisory will accompany the next release. This preliminary notice does not provide a complete account of affected builds or exploit conditions.&lt;/p&gt;

&lt;p&gt;For now, write down whether your application changes its serializer, whether upload progress is enabled, and which guidance you followed. Revisit that record when PHP publishes the full advisory and release.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Checked 24 October 2026 against PHP’s official notices. TechWebster has not independently reproduced the issue.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>security</category>
      <category>php2shell</category>
    </item>
    <item>
      <title>Node2Shell: Is Your Node.js App Affected? What to Check and Update</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Fri, 23 Oct 2026 17:44:43 +0000</pubDate>
      <link>https://dev.to/techwebster/node2shell-is-your-nodejs-app-affected-what-to-check-and-update-18kl</link>
      <guid>https://dev.to/techwebster/node2shell-is-your-nodejs-app-affected-what-to-check-and-update-18kl</guid>
      <description>&lt;p&gt;If you run a Node.js backend, check the Node version running in production. The October security release fixes a bug that can allow an attacker to run code by sending specially crafted compressed data to a vulnerable application.&lt;/p&gt;

&lt;p&gt;That does &lt;strong&gt;not&lt;/strong&gt; mean every Node.js app is exploitable. The risk depends on whether the app processes that data. Here is what to check, what to update, and how to confirm the update reached your server.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened?
&lt;/h2&gt;

&lt;p&gt;Brotli is a compression format: it makes data smaller before it travels over the network. The receiving application decompresses it to read the original content.&lt;/p&gt;

&lt;p&gt;Node.js has built-in support for this. The vulnerability is in the part that decompresses Brotli data. A malicious input can make it write outside the memory it should use. In certain circumstances, that can let an attacker execute code inside the Node.js process.&lt;/p&gt;

&lt;p&gt;The issue is tracked as &lt;strong&gt;CVE-2026-111497&lt;/strong&gt; and rated &lt;strong&gt;High&lt;/strong&gt; by the Node.js project. “Node2Shell” is the name Imperva uses for its research into the bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Could my app reach the vulnerable code?
&lt;/h2&gt;

&lt;p&gt;Start with two places: data your server receives and data it fetches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Your app accepts compressed request bodies.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check the middleware that reads incoming requests. Imperva tested an application using configured Express/body-parser middleware that decompressed incoming Brotli data. Simply using Express does not establish that your app follows this path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Your app fetches a compressed response from another server.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of a backend that downloads content from a URL. The response can be compressed, and the client may decompress it for your code. Imperva also demonstrated the issue through Node’s built-in &lt;code&gt;fetch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This second case is easy to overlook: your app makes the request, but another server supplies the response. A firewall filtering incoming requests to your site may not cover it.&lt;/p&gt;

&lt;p&gt;A basic Node HTTP server does not automatically decompress every request body. Look at the libraries and code that handle the data. &lt;strong&gt;If you are unsure which paths your app uses, update the runtime while you investigate.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Which versions contain the fix?
&lt;/h2&gt;

&lt;p&gt;The Node.js security release lists these fixed versions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your Node.js version line&lt;/th&gt;
&lt;th&gt;Fixed release&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;22.x&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;22.23.4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24.x&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;24.22.1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26.x&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;26.12.1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use the listed release or a newer release in that line that includes the fix. These are the release lines covered by the advisory; an older version is not automatically safe because it is absent from the table.&lt;/p&gt;

&lt;p&gt;If your Linux distribution supplies Node.js, check its security notice too. Distributions can apply a fix to their own package without adopting the same upstream version number.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://nodejs.org/en/blog/vulnerability/october-2026-security-releases" rel="noopener noreferrer"&gt;Node.js October security release&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I check and update my deployment?
&lt;/h2&gt;

&lt;p&gt;Run this &lt;strong&gt;inside the environment that runs your app&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running it on your laptop tells you about your laptop. For a container deployment, check inside a running application container. For a server, check the Node installation used by the application service.&lt;/p&gt;

&lt;p&gt;Then follow the route that matches your setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You manage the server:&lt;/strong&gt; install a fixed Node release, restart the application with it, and confirm the serving process uses the updated installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You deploy containers:&lt;/strong&gt; update the Node base image, rebuild your application image, and deploy it. Existing containers keep their old runtime until replaced.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your hosting provider manages Node:&lt;/strong&gt; check its advisory for your runtime version and any required redeployment. For Vercel, use its &lt;a href="https://vercel.com/kb/bulletin/node-js-security-advisory" rel="noopener noreferrer"&gt;Node.js security bulletin&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After deployment, check the version again in the running environment and test your app’s normal requests, uploads and external API calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updating npm packages alone does not update Node.js.&lt;/strong&gt; The fix is in the runtime that executes your JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did the researchers actually demonstrate?
&lt;/h2&gt;

&lt;p&gt;Imperva reports code execution in its tested applications on an official Node.js &lt;strong&gt;24.22.0 Linux ARM64&lt;/strong&gt; image. Version &lt;strong&gt;24.22.1&lt;/strong&gt; rejected the same inputs.&lt;/p&gt;

&lt;p&gt;The demonstration needed multiple attempts and did not cover every build or application. It shows a working attack under those test conditions; it does not show that every vulnerable deployment has been compromised. See &lt;a href="https://www.imperva.com/blog/node2shell-from-brotli-data-to-remote-code-execution/" rel="noopener noreferrer"&gt;Imperva’s technical analysis&lt;/a&gt; for the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you close the update ticket
&lt;/h2&gt;

&lt;p&gt;Make sure you can answer three questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which Node version is running in production now?&lt;/li&gt;
&lt;li&gt;Have all the old instances been replaced or restarted with the fixed runtime?&lt;/li&gt;
&lt;li&gt;Did the application pass its normal checks after deployment?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep the deployed image or release identifier with those answers. It gives the next developer a way to confirm what changed.&lt;/p&gt;

&lt;p&gt;We covered a similar runtime-maintenance problem in our &lt;a href="https://dev.to/techwebster/php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check-458p"&gt;PHP2Shell explainer&lt;/a&gt;. The vulnerabilities are separate, but both require checking the software actually running on the server.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources checked on 23 October 2026. The exploit findings above are attributed to Imperva; TechWebster has not independently reproduced them.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>security</category>
      <category>node2shell</category>
    </item>
    <item>
      <title>PHP2Shell: How the Vulnerabilities Were Found—and What Developers Should Check</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Thu, 22 Oct 2026 06:53:37 +0000</pubDate>
      <link>https://dev.to/techwebster/php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check-458p</link>
      <guid>https://dev.to/techwebster/php2shell-how-the-vulnerabilities-were-found-and-what-developers-should-check-458p</guid>
      <description>&lt;p&gt;&lt;em&gt;Research checked: 22 October 2026. This is a source-based explainer, not original vulnerability research or a claim that TechWebster reproduced the exploits.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An application can be up to date while the runtime underneath it still needs a security patch.&lt;/p&gt;

&lt;p&gt;That is the practical reason to pay attention to &lt;strong&gt;PHP2Shell&lt;/strong&gt;. Before deciding whether your WordPress site, Laravel application or custom PHP service is covered, identify the PHP runtime actually handling its web requests.&lt;/p&gt;

&lt;p&gt;This article explains the published discovery story, the underlying failure pattern and a practical response checklist. Discovery, reporting and public disclosure are separate events; the dates below preserve that distinction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What PHP2Shell refers to
&lt;/h2&gt;

&lt;p&gt;On 21 October 2026, PHP released fixes for two critical vulnerabilities that can permit remote code execution without authentication:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Identifier&lt;/th&gt;
&lt;th&gt;Underlying problem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-109618&lt;/td&gt;
&lt;td&gt;An out-of-memory failure can interrupt initialization; cleanup may subsequently trust invalid internal request data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-109619&lt;/td&gt;
&lt;td&gt;Request-owned state can outlive the memory behind it; a later request may use that stale state.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;PHP lists PHP-FPM, Apache with &lt;code&gt;mod_php&lt;/code&gt;, &lt;code&gt;php-cgi&lt;/code&gt;, FrankenPHP and LiteSpeed among the affected web-serving setups. It identifies &lt;code&gt;mod_php&lt;/code&gt; as the highest-risk setup, with a demonstrated attack that runs before application code. &lt;a href="https://www.php.net/archive/2026.php#2026-10-21-5" rel="noopener noreferrer"&gt;PHP's security advisory&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a runtime security issue. A vulnerable installation and a confirmed compromise are different findings; discovering an affected version does not establish that an attacker has used it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the vulnerabilities were found
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Earlier investigation provided clues
&lt;/h3&gt;

&lt;p&gt;The PHP Foundation describes a 2024 audit performed by Quarkslab through OSTIF. While fixing an audit finding, a PHP core developer found signs of the OOM problem later associated with CVE-2026-109618.&lt;/p&gt;

&lt;p&gt;At that stage, a potential exploit had been theorized, but concrete attack vectors had not been found. The Foundation describes difficult compatibility and implementation trade-offs, limited specialist capacity and a decision process that delayed a fix. That is more precise than saying nobody had noticed anything before 2026. &lt;a href="https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/" rel="noopener noreferrer"&gt;PHP Foundation's account&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Calif revisited fatal-error behavior
&lt;/h3&gt;

&lt;p&gt;In its own account, Calif dates the start of its audit to &lt;strong&gt;30 July 2026&lt;/strong&gt; and its first discovery to &lt;strong&gt;1 August&lt;/strong&gt;. Researcher Ryan Austin examined memory-limit failures and the points where they could interrupt PHP's native operations.&lt;/p&gt;

&lt;p&gt;One finding involved bookkeeping becoming visible before an operation had fully initialized its data. If an allocation failed at that point, later cleanup could treat unfinished data as valid. Calif then used the observed pattern to guide AI-assisted searches for related failure paths.&lt;/p&gt;

&lt;p&gt;Its timeline separates discovery from reporting: the first bug was reported to PHP on &lt;strong&gt;11 August&lt;/strong&gt;, followed by an RCE proof of concept on &lt;strong&gt;14 August&lt;/strong&gt;. &lt;a href="https://calif.io/php2shell/" rel="noopener noreferrer"&gt;Calif's original write-up&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Wiz independently found related vulnerabilities
&lt;/h3&gt;

&lt;p&gt;Wiz records its first discovery on &lt;strong&gt;19 August&lt;/strong&gt;, RCE validation against Drupal on &lt;strong&gt;20 August&lt;/strong&gt; and WordPress on &lt;strong&gt;21 August&lt;/strong&gt;, and reporting to PHP on &lt;strong&gt;24 August&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Its write-up describes four exploitable instances grouped into the two CVEs, including memory disclosure and memory corruption. WordPress, Drupal and Joomla were demonstration targets, rather than the location of the underlying PHP engine flaws. &lt;a href="https://www.wiz.io/blog/php2shell-php-rce" rel="noopener noreferrer"&gt;Wiz's research and timeline&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These accounts describe overlapping work. They should not be compressed into a story about a single researcher, company or model finding everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  What role did AI actually play?
&lt;/h2&gt;

&lt;p&gt;The published accounts describe researchers directing AI-assisted investigation, testing and validation. OpenAI says Calif identified a critical flaw using GPT-5.6 Sol through Patch the Planet, while Wiz independently discovered and reported both vulnerabilities. PHP's maintainers led the fixes and release. &lt;a href="https://openai.com/index/coordinated-disclosure-of-critical-vulnerabilities/" rel="noopener noreferrer"&gt;OpenAI's coordination account&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wiz reports using Wiz Atlas, Gemini 4 Argon and GPT-5.6 Sol. It says adapting working exploit chains required repeated testing and debugging across different memory layouts and that frontier models reduced that effort. Those are the research team's reported results, not a benchmark we independently reproduced. &lt;a href="https://www.wiz.io/blog/php2shell-php-rce" rel="noopener noreferrer"&gt;Wiz's description of AI's role&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The useful engineering lesson is to examine interrupted operations as carefully as successful ones:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Operation begins
    ↓
Some state becomes visible
    ↓
A failure interrupts initialization
    ↓
Cleanup or a later request trusts incomplete or stale state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a conceptual explanation of the failure pattern, not an exploit recipe or a model of every affected path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does this mean every WordPress or Laravel site is exposed?
&lt;/h2&gt;

&lt;p&gt;The application name alone cannot answer that question. The runtime build, hosting environment and applied fixes matter.&lt;/p&gt;

&lt;p&gt;For example, Automattic stated on 21 October that WordPress.com, WordPress VIP, WP Cloud, Pressable and Tumblr were already protected. That prevents a misleading conclusion that every WordPress installation still requires its owner to patch PHP personally. Automattic also explains that application, theme and plugin updates alone do not replace a runtime fix. &lt;a href="https://automattic.com/2026/10/21/php2shell/" rel="noopener noreferrer"&gt;Automattic's notice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keep maintaining the application. Also establish who maintains its runtime: your team, your hosting provider or another platform operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which releases contain the upstream fixes?
&lt;/h2&gt;

&lt;p&gt;PHP's 21 October security releases are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PHP branch&lt;/th&gt;
&lt;th&gt;Fixed upstream release&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8.5&lt;/td&gt;
&lt;td&gt;8.5.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;td&gt;8.4.27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.3&lt;/td&gt;
&lt;td&gt;8.3.36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.2&lt;/td&gt;
&lt;td&gt;8.2.35&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Distribution and LTS vendors may backport the fix while retaining an older upstream version number. PHP 8.1 and older have no routine upstream updates; vendor fixes and exceptional minimal source backports for 7.4, 8.0 and 8.1 require checking the relevant guidance. &lt;a href="https://www.php.net/archive/2026.php#2026-10-21-5" rel="noopener noreferrer"&gt;PHP release and update guidance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ubuntu illustrates why the full package version matters: its notice lists fixed distribution builds, including &lt;code&gt;8.3.6-0ubuntu0.24.04.13&lt;/code&gt; for Ubuntu 24.04. It also states that applications using PHP may need restarting after the update; installing packages alone may leave old processes running. &lt;a href="https://ubuntu.com/blog/php2shell-vulnerability-fixes-available" rel="noopener noreferrer"&gt;Ubuntu's package and restart guidance&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical checklist for your team
&lt;/h2&gt;

&lt;p&gt;Use the following as a working record for each deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inventory:&lt;/strong&gt; hostname or application, owner, hosting provider, PHP branch, full package/image version and web-serving runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patch evidence:&lt;/strong&gt; the applicable upstream release or vendor advisory confirming the backport. Record the complete build, not just “PHP 8.3.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; the package or image that was installed, where it was deployed and when the relevant workers were restarted or replaced.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification:&lt;/strong&gt; confirmation that web traffic is reaching the updated deployment, followed by normal application smoke checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check the serving environment explicitly. A local terminal's PHP binary is not evidence about every FPM pool, Apache instance, container or replica.&lt;/p&gt;

&lt;p&gt;For a managed host, ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Have CVE-2026-109618 and CVE-2026-109619 been fixed in the PHP runtime serving our site? Which package or build contains the fix, and have all relevant workers been restarted or replaced?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This makes the response auditable without asking a website owner to diagnose engine internals.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you cannot patch immediately
&lt;/h2&gt;

&lt;p&gt;CERT-EU recommends considering isolation of internet-facing applications from public networks until the fix is applied and verified. It also emphasizes that temporary measures cover specific paths and do not make an installation safe. &lt;a href="https://cert.europa.eu/publications/security-advisories/2026-018" rel="noopener noreferrer"&gt;CERT-EU advisory&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose interim controls with the operator responsible for that environment. Avoid copying a configuration change without understanding its availability effects and the attack paths it does not address.&lt;/p&gt;

&lt;h2&gt;
  
  
  What developers can take from this
&lt;/h2&gt;

&lt;p&gt;Our practical interpretation of the published research is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Review failure paths.&lt;/strong&gt; Ask which state remains visible when initialization stops halfway through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep discovery and proof separate.&lt;/strong&gt; A suspicious pattern, a crash and demonstrated RCE provide different levels of evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make runtime ownership explicit.&lt;/strong&gt; Application maintenance and runtime maintenance need named owners and separate verification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close the deployment loop.&lt;/strong&gt; “The fix exists” and “our serving processes use it” are different milestones.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For this incident, prioritize patching and verifying the PHP deployment. A change of programming language is a separate architectural decision.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Need help with the PHP runtime behind your website? Contact &lt;a href="https://techwebster.com/" rel="noopener noreferrer"&gt;TechWebster&lt;/a&gt; to discuss your setup and next steps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article summarizes the linked primary disclosures and separates reported research from our operational recommendations. We have not independently reproduced the exploits. Recheck the official advisories before applying changes, as guidance may evolve.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>security</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>5 SEO Checks to Run Before Launching Your Website</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Mon, 19 Oct 2026 07:56:49 +0000</pubDate>
      <link>https://dev.to/techwebster/5-seo-checks-to-run-before-launching-your-website-22om</link>
      <guid>https://dev.to/techwebster/5-seo-checks-to-run-before-launching-your-website-22om</guid>
      <description>&lt;p&gt;Your website loads. The layout works on mobile. The forms submit correctly.&lt;/p&gt;

&lt;p&gt;Before you announce the launch, there’s another check worth making: what does your production site tell search engines—and what happens when someone shares its URL?&lt;/p&gt;

&lt;p&gt;A leftover indexing directive or a canonical pointing to staging can be easy to miss during visual testing.&lt;/p&gt;

&lt;p&gt;I’m Ashirbad, CEO of TechWebster. We built &lt;a href="https://seo.techwebster.com/?utm_source=devto&amp;amp;utm_medium=article" rel="noopener noreferrer"&gt;SEO By TechWebster&lt;/a&gt; to make these checks easier. It’s a free tool that checks public URLs without requiring an account.&lt;/p&gt;

&lt;p&gt;Whether you use an analyzer or inspect your pages manually, here are five checks to include in your launch process.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Check whether production pages allow indexing
&lt;/h2&gt;

&lt;p&gt;A staging environment might intentionally include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"noindex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That becomes a problem if it reaches a production page you want people to find through search.&lt;/p&gt;

&lt;p&gt;Check both the page’s robots meta tag and the &lt;code&gt;X-Robots-Tag&lt;/code&gt; response header for unintended indexing restrictions.&lt;/p&gt;

&lt;p&gt;Also review &lt;code&gt;robots.txt&lt;/code&gt;, but remember that crawling and indexing are different. Blocking a URL in &lt;code&gt;robots.txt&lt;/code&gt; can prevent Google from reading its &lt;code&gt;noindex&lt;/code&gt; directive; it does not reliably keep the URL out of search results. &lt;a href="https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag" rel="noopener noreferrer"&gt;Google’s robots documentation&lt;/a&gt; explains how these controls interact.&lt;/p&gt;

&lt;p&gt;To inspect the response headers from a normal GET request, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; - &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null https://yoursite.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for an &lt;code&gt;X-Robots-Tag&lt;/code&gt; header. In your browser, view the page source and search for &lt;code&gt;noindex&lt;/code&gt;; check the rendered HTML too if your app changes metadata with JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before launch:&lt;/strong&gt; verify the settings on the deployed URL, including any rules added by your hosting platform. If you have access to the site’s Search Console property, use &lt;a href="https://support.google.com/webmasters/answer/9012289" rel="noopener noreferrer"&gt;Google Search Console’s URL Inspection&lt;/a&gt; to inspect Google’s indexed information and run a live test.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Give each important page a useful title and description
&lt;/h2&gt;

&lt;p&gt;Check for placeholder titles, missing descriptions, and metadata copied across unrelated pages.&lt;/p&gt;

&lt;p&gt;Compare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Home&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With something more descriptive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Custom Web Development | Example Studio&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second version helps someone understand the page before opening it.&lt;/p&gt;

&lt;p&gt;Write a description that accurately summarizes that particular page, too. Your homepage, services page, and product page serve different purposes.&lt;/p&gt;

&lt;p&gt;Google can generate different title links and snippets, so these fields are inputs rather than a guaranteed preview. Its &lt;a href="https://developers.google.com/search/docs/fundamentals/get-started-developers" rel="noopener noreferrer"&gt;developer SEO guide&lt;/a&gt; recommends descriptive titles and meta descriptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before launch:&lt;/strong&gt; inspect several important routes, rather than checking only the homepage.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make sure canonical URLs point to the right pages
&lt;/h2&gt;

&lt;p&gt;A canonical identifies your preferred URL when similar or duplicate versions exist.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt;
  &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt;
  &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/services/web-development"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;References to a staging domain.&lt;/li&gt;
&lt;li&gt;HTTP URLs when production uses HTTPS.&lt;/li&gt;
&lt;li&gt;Every page pointing to the homepage.&lt;/li&gt;
&lt;li&gt;Multiple conflicting canonical tags.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to give search engines consistent information about your preferred URLs. Google’s &lt;a href="https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics" rel="noopener noreferrer"&gt;JavaScript SEO guidance&lt;/a&gt; also covers canonical handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before launch:&lt;/strong&gt; open a few nested pages, view their source, and search for &lt;code&gt;rel="canonical"&lt;/code&gt;. Confirm each canonical is intentional.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check the preview people will share
&lt;/h2&gt;

&lt;p&gt;Launch day often means sharing a link through LinkedIn, messaging apps, and other social platforms.&lt;/p&gt;

&lt;p&gt;Review your Open Graph and social-card metadata:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Example Studio"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt;
  &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt;
  &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Custom websites and applications for growing businesses."&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt;
  &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt;
  &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/social-preview.jpg"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:card"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"summary_large_image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure the image URL is public, loads successfully, and points to the intended asset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before launch:&lt;/strong&gt; test a real share preview with &lt;a href="https://www.linkedin.com/post-inspector/" rel="noopener noreferrer"&gt;LinkedIn’s Post Inspector&lt;/a&gt;. Platforms may cache older metadata, so inspecting your HTML alone doesn’t confirm what someone will see.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Review discovery files and page structure
&lt;/h2&gt;

&lt;p&gt;Finish with a few checks that are easy to overlook:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does &lt;code&gt;robots.txt&lt;/code&gt; allow access to the public sections you want crawled?&lt;/li&gt;
&lt;li&gt;Does your sitemap contain the intended production URLs?&lt;/li&gt;
&lt;li&gt;Do headings describe the content in a sensible order?&lt;/li&gt;
&lt;li&gt;Do informative images have meaningful alternative text?&lt;/li&gt;
&lt;li&gt;If you include JSON-LD, does it parse correctly and describe the visible content?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every page needs every type of structured data. Choose markup that actually applies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before launch:&lt;/strong&gt; review warnings in context. A checklist score is useful for finding things to inspect; it isn’t a prediction of search rankings.&lt;/p&gt;

&lt;h2&gt;
  
  
  A repeatable launch workflow
&lt;/h2&gt;

&lt;p&gt;My suggested process is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy to the production URL.&lt;/li&gt;
&lt;li&gt;Check the homepage and key landing pages.&lt;/li&gt;
&lt;li&gt;Fix unintended indexing restrictions and incorrect metadata.&lt;/li&gt;
&lt;li&gt;Test social previews.&lt;/li&gt;
&lt;li&gt;Run the checks again after deploying fixes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://seo.techwebster.com/?utm_source=devto&amp;amp;utm_medium=article" rel="noopener noreferrer"&gt;SEO By TechWebster&lt;/a&gt; brings metadata, social cards, discovery files, headings, image alt text, and JSON-LD checks into one report, with suggested fixes.&lt;/p&gt;

&lt;p&gt;Use it as an initial review alongside browser testing and Google Search Console. A passing report doesn’t guarantee indexing or rankings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s one SEO detail you always check before shipping a website?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>JavaScript Syllabus for Beginners: A Step-by-Step Roadmap</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Sun, 18 Oct 2026 18:22:09 +0000</pubDate>
      <link>https://dev.to/techwebster/javascript-syllabus-for-beginners-a-step-by-step-roadmap-5c8k</link>
      <guid>https://dev.to/techwebster/javascript-syllabus-for-beginners-a-step-by-step-roadmap-5c8k</guid>
      <description>&lt;p&gt;Know a little HTML and CSS, but want your pages to do more? JavaScript is the next step. It lets you respond to clicks, work with forms, update content, and bring data into a page.&lt;/p&gt;

&lt;p&gt;There is a lot to learn, so we have put the topics in an order you can follow. Start with the basics, try the small exercises along the way, and use the projects to see how the pieces fit together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before You Start
&lt;/h2&gt;

&lt;p&gt;You should be able to create a simple HTML page, add a stylesheet, use links and form controls, and work with files and folders. You do not need previous JavaScript experience. If those foundations are new, start with our &lt;a href="https://dev.to/techwebster/html-syllabus-for-beginners-6fp"&gt;HTML syllabus&lt;/a&gt; and &lt;a href="https://dev.to/techwebster/css-syllabus-for-beginners-4001"&gt;CSS syllabus&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Learning Order
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Sections&lt;/th&gt;
&lt;th&gt;Try this before moving on&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. Language fundamentals&lt;/td&gt;
&lt;td&gt;1–11&lt;/td&gt;
&lt;td&gt;Write a small calculator and filter a list of product objects without copying a solution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Browser interaction&lt;/td&gt;
&lt;td&gt;12–14&lt;/td&gt;
&lt;td&gt;Build a counter you can use with a keyboard and handle a form submission.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Modern JavaScript and data&lt;/td&gt;
&lt;td&gt;15–22&lt;/td&gt;
&lt;td&gt;Save a task list locally and fetch data with loading and error messages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Projects and next steps&lt;/td&gt;
&lt;td&gt;23–24&lt;/td&gt;
&lt;td&gt;Finish a small project, explain your code, and fix a bug using developer tools.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Work through the sections in order. If an exercise feels difficult, spend a little more time on that topic before moving on.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Introduction to JavaScript
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What JavaScript does in a browser&lt;/li&gt;
&lt;li&gt;How HTML, CSS, and JavaScript work together&lt;/li&gt;
&lt;li&gt;Browser JavaScript versus server-side JavaScript&lt;/li&gt;
&lt;li&gt;Examples: menus, counters, forms, and live search&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Setting Up Your Workspace
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A code editor and a modern browser&lt;/li&gt;
&lt;li&gt;Opening the browser console&lt;/li&gt;
&lt;li&gt;Connecting an external script to an HTML page&lt;/li&gt;
&lt;li&gt;Running your first script and reading its output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; display a welcome message in the console.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Syntax, Variables, and Comments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Statements, expressions, and comments&lt;/li&gt;
&lt;li&gt;Declaring variables with &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Reassigning values and choosing clear names&lt;/li&gt;
&lt;li&gt;Recognizing &lt;code&gt;var&lt;/code&gt; when reading older code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Data Types
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Strings, numbers, booleans, &lt;code&gt;undefined&lt;/code&gt;, and &lt;code&gt;null&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;An introduction to BigInt and Symbol&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;typeof&lt;/code&gt; and recognizing its limitations&lt;/li&gt;
&lt;li&gt;Understanding that &lt;code&gt;typeof null&lt;/code&gt; returns &lt;code&gt;"object"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Operators and Type Conversion
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Arithmetic, assignment, and comparison&lt;/li&gt;
&lt;li&gt;Strict equality with &lt;code&gt;===&lt;/code&gt; and &lt;code&gt;!==&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Logical operators and truthy/falsy values&lt;/li&gt;
&lt;li&gt;Explicit conversion with &lt;code&gt;Number&lt;/code&gt;, &lt;code&gt;String&lt;/code&gt;, and &lt;code&gt;Boolean&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Working with Strings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Quotes and template literals&lt;/li&gt;
&lt;li&gt;String length and accessing characters&lt;/li&gt;
&lt;li&gt;Trimming, searching, and replacing text&lt;/li&gt;
&lt;li&gt;Combining values into useful messages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Conditions and Decisions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;else if&lt;/code&gt;, and &lt;code&gt;else&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;switch&lt;/code&gt; statements&lt;/li&gt;
&lt;li&gt;Conditional expressions&lt;/li&gt;
&lt;li&gt;Combining conditions clearly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; show a different message depending on a user's score.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Loops
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;for&lt;/code&gt; and &lt;code&gt;while&lt;/code&gt; loops&lt;/li&gt;
&lt;li&gt;Iterating over values with &lt;code&gt;for...of&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Avoiding infinite loops&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. Functions and Scope
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Function declarations and expressions&lt;/li&gt;
&lt;li&gt;Parameters, arguments, and return values&lt;/li&gt;
&lt;li&gt;Arrow functions&lt;/li&gt;
&lt;li&gt;Global, function, and block scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; write a function that calculates a shopping-cart total.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Arrays
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Creating arrays and accessing items&lt;/li&gt;
&lt;li&gt;Adding, updating, and removing items&lt;/li&gt;
&lt;li&gt;Iterating with &lt;code&gt;forEach&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Transforming and searching with &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt;, and &lt;code&gt;find&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  11. Objects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Properties, values, and methods&lt;/li&gt;
&lt;li&gt;Reading and updating properties&lt;/li&gt;
&lt;li&gt;Objects inside arrays&lt;/li&gt;
&lt;li&gt;Destructuring and spread syntax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; represent a list of products using an array of objects.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. The Document Object Model (DOM)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How JavaScript interacts with a page&lt;/li&gt;
&lt;li&gt;Selecting elements&lt;/li&gt;
&lt;li&gt;Updating text, attributes, and classes&lt;/li&gt;
&lt;li&gt;Creating, inserting, and removing elements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13. Events and User Interaction
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Registering event listeners&lt;/li&gt;
&lt;li&gt;Handling clicks, typing, and changes&lt;/li&gt;
&lt;li&gt;Reading the event object&lt;/li&gt;
&lt;li&gt;Default behavior and basic event bubbling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; build a button that increases a visible counter.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Forms and Input
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reading input values&lt;/li&gt;
&lt;li&gt;Handling form submission&lt;/li&gt;
&lt;li&gt;Required fields and helpful validation messages&lt;/li&gt;
&lt;li&gt;Converting text input when numbers are needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Browser validation improves usability, but it does not replace server-side validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Organizing Code with Modules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Splitting related code into separate files&lt;/li&gt;
&lt;li&gt;Exporting and importing functions&lt;/li&gt;
&lt;li&gt;Using module scripts in the browser&lt;/li&gt;
&lt;li&gt;Keeping responsibilities small and clear&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  16. Working with JSON
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Objects versus JSON text&lt;/li&gt;
&lt;li&gt;Converting with &lt;code&gt;JSON.stringify&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Parsing with &lt;code&gt;JSON.parse&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Handling invalid JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  17. Browser Storage
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;localStorage&lt;/code&gt; and &lt;code&gt;sessionStorage&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Saving, retrieving, and removing values&lt;/li&gt;
&lt;li&gt;Serializing arrays and objects as JSON&lt;/li&gt;
&lt;li&gt;Understanding that browser storage is local, not cloud sync&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not store passwords or private API keys in browser storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. Asynchronous JavaScript
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Synchronous versus asynchronous work&lt;/li&gt;
&lt;li&gt;Callbacks and timers&lt;/li&gt;
&lt;li&gt;A beginner introduction to the event loop&lt;/li&gt;
&lt;li&gt;Understanding why a result may arrive later&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  19. Promises and Async/Await
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pending, fulfilled, and rejected promises&lt;/li&gt;
&lt;li&gt;Chaining with &lt;code&gt;.then&lt;/code&gt; and &lt;code&gt;.catch&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Writing asynchronous functions&lt;/li&gt;
&lt;li&gt;Handling failures with &lt;code&gt;try...catch&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  20. Fetching Data from an API
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Making a request with &lt;code&gt;fetch&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Checking the HTTP response status&lt;/li&gt;
&lt;li&gt;Reading JSON responses&lt;/li&gt;
&lt;li&gt;Showing loading, empty, success, and error states&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A completed request can still return an HTTP error. Check the response before treating it as successful. Keep private API keys out of browser code.&lt;/p&gt;

&lt;h2&gt;
  
  
  21. Debugging and Error Handling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reading syntax and runtime errors&lt;/li&gt;
&lt;li&gt;Using console messages and breakpoints&lt;/li&gt;
&lt;li&gt;Inspecting variables and network requests&lt;/li&gt;
&lt;li&gt;Fixing one problem at a time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  22. Building Usable Interactions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using real buttons and labeled form fields&lt;/li&gt;
&lt;li&gt;Supporting keyboard interaction&lt;/li&gt;
&lt;li&gt;Keeping focus and status messages understandable&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;textContent&lt;/code&gt; for plain text instead of inserting untrusted HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  23. Practice Projects
&lt;/h2&gt;

&lt;p&gt;Build these in order, adding one feature at a time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Counter:&lt;/strong&gt; increase, decrease, and reset a number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To-do list:&lt;/strong&gt; add tasks, mark them complete, delete them, and save them locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API-powered directory:&lt;/strong&gt; fetch public data, display results, add search, and handle loading and errors.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Explain how your project works and test both normal input and unexpected input.&lt;/p&gt;

&lt;h2&gt;
  
  
  24. What to Learn Next
&lt;/h2&gt;

&lt;p&gt;After you can build and debug a small project independently, explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Closures, &lt;code&gt;this&lt;/code&gt;, and prototypes&lt;/li&gt;
&lt;li&gt;Automated testing and deeper asynchronous patterns&lt;/li&gt;
&lt;li&gt;Node.js for backend development&lt;/li&gt;
&lt;li&gt;A frontend framework such as React&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need to rush into a framework. A strong understanding of JavaScript makes the next step easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Practice
&lt;/h2&gt;

&lt;p&gt;Read a topic, write a small example, change it, and observe the result. Revisit earlier projects as you learn new ideas. Your pace will depend on your experience and practice time; finishing the list matters less than understanding what you build.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Few Common Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What JavaScript topics should a beginner learn first?
&lt;/h3&gt;

&lt;p&gt;Start with variables, data types, operators, strings, conditions, loops, functions, arrays, and objects. Then use those ideas with DOM manipulation and events before moving into promises, async/await, and API requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need HTML and CSS before learning JavaScript?
&lt;/h3&gt;

&lt;p&gt;You can learn the core language separately, but basic HTML and CSS will help with the browser projects here. They let you see what your scripts are changing.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does it take to learn JavaScript?
&lt;/h3&gt;

&lt;p&gt;That depends on your programming background, how often you practice, and what you want to build. Try the exercises and projects as you go. Being able to explain your code and fix a bug tells you more than the number of topics you have checked off.&lt;/p&gt;

&lt;h3&gt;
  
  
  When should I learn React or Node.js?
&lt;/h3&gt;

&lt;p&gt;Begin after you can work with functions, arrays, objects, modules, and asynchronous code. For React, also practice DOM events and state changes in a small browser project. For backend work, continue with our &lt;a href="https://dev.to/techwebster/nodejs-syllabus-for-beginners-complete-backend-roadmap-566b"&gt;Node.js learning roadmap&lt;/a&gt;. You can return to deeper language topics while building.&lt;/p&gt;

&lt;h2&gt;
  
  
  Helpful Resources
&lt;/h2&gt;

&lt;p&gt;Use these resources alongside your practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/curriculum/core/javascript-fundamentals/" rel="noopener noreferrer"&gt;MDN JavaScript fundamentals curriculum&lt;/a&gt; — learning outcomes and topic references.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting" rel="noopener noreferrer"&gt;MDN beginner JavaScript lessons and challenges&lt;/a&gt; — explanations, exercises, and browser projects.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://javascript.info/" rel="noopener noreferrer"&gt;The Modern JavaScript Tutorial&lt;/a&gt; — detailed language and browser tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/javascript" rel="noopener noreferrer"&gt;JavaScript developer roadmap&lt;/a&gt; — a broader map to revisit as you progress.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related TechWebster Roadmaps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/techwebster/html-syllabus-for-beginners-6fp"&gt;HTML Syllabus for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/techwebster/css-syllabus-for-beginners-4001"&gt;CSS Syllabus for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/techwebster/nodejs-syllabus-for-beginners-complete-backend-roadmap-566b"&gt;Node.js Syllabus for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which JavaScript topic would you like us to explain next with a hands-on example?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Top 50 HTML Interview Questions and Answers for Beginners</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Wed, 22 Jul 2026 04:35:08 +0000</pubDate>
      <link>https://dev.to/techwebster/top-50-html-interview-questions-and-answers-for-beginners-1mlb</link>
      <guid>https://dev.to/techwebster/top-50-html-interview-questions-and-answers-for-beginners-1mlb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update — 28 October 2026:&lt;/strong&gt; Corrected question 26 to explain that POST sends form data in the request body and is not inherently more secure than GET. Added guidance on HTTPS and application security controls. Thanks to &lt;a href="https://dev.to/merbayerp"&gt;Mustafa ERBAY (@merbayerp)&lt;/a&gt; for pointing this out in the comments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Questions List
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What is HTML?&lt;/li&gt;
&lt;li&gt;What is the difference between HTML and HTML5?&lt;/li&gt;
&lt;li&gt;What is the purpose of DOCTYPE in HTML?&lt;/li&gt;
&lt;li&gt;What is the basic structure of an HTML document?&lt;/li&gt;
&lt;li&gt;What is the difference between a tag and an element?&lt;/li&gt;
&lt;li&gt;What are HTML attributes?&lt;/li&gt;
&lt;li&gt;What is the difference between id and class?&lt;/li&gt;
&lt;li&gt;What are semantic HTML elements?&lt;/li&gt;
&lt;li&gt;Why is Semantic HTML important?&lt;/li&gt;
&lt;li&gt;What is the difference between div and span?&lt;/li&gt;
&lt;li&gt;What are block elements?&lt;/li&gt;
&lt;li&gt;What are inline elements?&lt;/li&gt;
&lt;li&gt;What is the purpose of the head tag?&lt;/li&gt;
&lt;li&gt;What are Meta Tags?&lt;/li&gt;
&lt;li&gt;What is the viewport meta tag?&lt;/li&gt;
&lt;li&gt;What is the difference between relative and absolute paths?&lt;/li&gt;
&lt;li&gt;What is the img tag?&lt;/li&gt;
&lt;li&gt;Why is the alt attribute important?&lt;/li&gt;
&lt;li&gt;What are HTML entities?&lt;/li&gt;
&lt;li&gt;What is the difference between Ordered and Unordered Lists?&lt;/li&gt;
&lt;li&gt;What is a Description List?&lt;/li&gt;
&lt;li&gt;What is a Hyperlink?&lt;/li&gt;
&lt;li&gt;How do you open a link in a new tab?&lt;/li&gt;
&lt;li&gt;What is the purpose of the target attribute?&lt;/li&gt;
&lt;li&gt;What is an iframe?&lt;/li&gt;
&lt;li&gt;What is the difference between GET and POST?&lt;/li&gt;
&lt;li&gt;What is a Form?&lt;/li&gt;
&lt;li&gt;What is the action attribute in forms?&lt;/li&gt;
&lt;li&gt;What is the method attribute in forms?&lt;/li&gt;
&lt;li&gt;What is the label tag?&lt;/li&gt;
&lt;li&gt;What are common input types in HTML?&lt;/li&gt;
&lt;li&gt;Difference between Radio and Checkbox?&lt;/li&gt;
&lt;li&gt;What is the placeholder attribute?&lt;/li&gt;
&lt;li&gt;What is the required attribute?&lt;/li&gt;
&lt;li&gt;What is the readonly attribute?&lt;/li&gt;
&lt;li&gt;What is the disabled attribute?&lt;/li&gt;
&lt;li&gt;What is HTML Accessibility?&lt;/li&gt;
&lt;li&gt;What is SEO in HTML?&lt;/li&gt;
&lt;li&gt;Which HTML tags help SEO?&lt;/li&gt;
&lt;li&gt;What is the difference between b and strong?&lt;/li&gt;
&lt;li&gt;What is the difference between i and em?&lt;/li&gt;
&lt;li&gt;What are empty elements?&lt;/li&gt;
&lt;li&gt;What is the purpose of comments in HTML?&lt;/li&gt;
&lt;li&gt;What is HTML5 Local Storage?&lt;/li&gt;
&lt;li&gt;What is the difference between Local Storage and Session Storage?&lt;/li&gt;
&lt;li&gt;What is the Audio tag?&lt;/li&gt;
&lt;li&gt;What is the Video tag?&lt;/li&gt;
&lt;li&gt;What is the Canvas element?&lt;/li&gt;
&lt;li&gt;What is the difference between HTML CSS and JavaScript?&lt;/li&gt;
&lt;li&gt;Why should we learn HTML?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. What is HTML?
&lt;/h2&gt;

&lt;p&gt;HTML (HyperText Markup Language) is the standard markup language used to create and structure web pages.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  2. What is the difference between HTML and HTML5?
&lt;/h2&gt;

&lt;p&gt;HTML5 is the latest version of HTML.&lt;/p&gt;

&lt;p&gt;New features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic tags&lt;/li&gt;
&lt;li&gt;Audio &amp;amp; Video support&lt;/li&gt;
&lt;li&gt;Canvas&lt;/li&gt;
&lt;li&gt;Local Storage&lt;/li&gt;
&lt;li&gt;New input types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  3. What is the purpose of DOCTYPE in HTML?
&lt;/h2&gt;

&lt;p&gt;It tells the browser that the document uses HTML5.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  4. What is the basic structure of an HTML document?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Page Title&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  5. What is the difference between a tag and an element?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tag
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Element
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An element includes opening tag, content, and closing tag.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  6. What are HTML attributes?
&lt;/h2&gt;

&lt;p&gt;Attributes provide extra information about HTML elements.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://google.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Google&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  7. What is the difference between id and class?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  id
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Unique&lt;/li&gt;
&lt;li&gt;Used once per page&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  class
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reusable&lt;/li&gt;
&lt;li&gt;Used multiple times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  8. What are semantic HTML elements?
&lt;/h2&gt;

&lt;p&gt;Semantic elements describe the meaning of content.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;header&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;nav&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;article&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Why is Semantic HTML important?
&lt;/h2&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better SEO&lt;/li&gt;
&lt;li&gt;Better Accessibility&lt;/li&gt;
&lt;li&gt;Cleaner code structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  10. What is the difference between div and span?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  div
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Block element&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  span
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Inline element&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  11. What are block elements?
&lt;/h2&gt;

&lt;p&gt;Elements that take the full available width.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  12. What are inline elements?
&lt;/h2&gt;

&lt;p&gt;Elements that only take required width.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  13. What is the purpose of the head tag?
&lt;/h2&gt;

&lt;p&gt;Stores metadata such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;CSS files&lt;/li&gt;
&lt;li&gt;Meta tags&lt;/li&gt;
&lt;li&gt;Scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  14. What are Meta Tags?
&lt;/h2&gt;

&lt;p&gt;Meta tags provide information about the webpage.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  15. What is the viewport meta tag?
&lt;/h2&gt;

&lt;p&gt;Used for responsive websites.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  16. What is the difference between relative and absolute paths?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Relative
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;images/logo.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Absolute
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;https://example.com/logo.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  17. What is the img tag?
&lt;/h2&gt;

&lt;p&gt;Used to display images.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  18. Why is the alt attribute important?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Accessibility&lt;/li&gt;
&lt;li&gt;SEO&lt;/li&gt;
&lt;li&gt;Fallback text
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"cat.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Cat Image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  19. What are HTML entities?
&lt;/h2&gt;

&lt;p&gt;Special characters represented using codes.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;copy;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  20. What is the difference between Ordered and Unordered Lists?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ordered List
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows numbers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unordered List
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows bullet points.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  21. What is a Description List?
&lt;/h2&gt;

&lt;p&gt;Used for terms and descriptions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dl&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dt&amp;gt;&lt;/span&gt;HTML&lt;span class="nt"&gt;&amp;lt;/dt&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dd&amp;gt;&lt;/span&gt;Markup Language&lt;span class="nt"&gt;&amp;lt;/dd&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dl&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  22. What is a Hyperlink?
&lt;/h2&gt;

&lt;p&gt;A clickable link created using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  23. How do you open a link in a new tab?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  24. What is the purpose of the target attribute?
&lt;/h2&gt;

&lt;p&gt;It defines where the linked document opens.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  25. What is an iframe?
&lt;/h2&gt;

&lt;p&gt;Used to embed another webpage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;iframe&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  26. What is the difference between GET and POST?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GET
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Used to retrieve data. A GET form submission appends form data to the URL as query parameters.&lt;/li&gt;
&lt;li&gt;URLs can appear in browser history, bookmarks and server logs, so avoid putting sensitive values in them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  POST
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sends form data in the request body and is commonly used for submissions or operations that change server state.&lt;/li&gt;
&lt;li&gt;Keeping form data out of the URL does not encrypt it or make POST inherently more secure than GET.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use HTTPS to protect both GET and POST traffic in transit. Sensitive operations also need appropriate authentication and authorization, plus CSRF protection where applicable, such as forms that use cookie-based sessions. POST alone provides none of these protections.&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#form-submission-attributes" rel="noopener noreferrer"&gt;WHATWG HTML Standard: form submission attributes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  27. What is a Form?
&lt;/h2&gt;

&lt;p&gt;Forms are used to collect user data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  28. What is the action attribute in forms?
&lt;/h2&gt;

&lt;p&gt;Defines where the form data will be sent.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  29. What is the method attribute in forms?
&lt;/h2&gt;

&lt;p&gt;Defines how data is submitted.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET&lt;/li&gt;
&lt;li&gt;POST&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  30. What is the label tag?
&lt;/h2&gt;

&lt;p&gt;Connects text with form inputs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  31. What are common input types in HTML?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;text&lt;/li&gt;
&lt;li&gt;password&lt;/li&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;li&gt;number&lt;/li&gt;
&lt;li&gt;radio&lt;/li&gt;
&lt;li&gt;checkbox&lt;/li&gt;
&lt;li&gt;file&lt;/li&gt;
&lt;li&gt;date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  32. Difference between Radio and Checkbox?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Radio
&lt;/h3&gt;

&lt;p&gt;Only one option can be selected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checkbox
&lt;/h3&gt;

&lt;p&gt;Multiple options can be selected.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  33. What is the placeholder attribute?
&lt;/h2&gt;

&lt;p&gt;Shows hint text inside input fields.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  34. What is the required attribute?
&lt;/h2&gt;

&lt;p&gt;Makes a field mandatory.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  35. What is the readonly attribute?
&lt;/h2&gt;

&lt;p&gt;Makes the field non-editable.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  36. What is the disabled attribute?
&lt;/h2&gt;

&lt;p&gt;Disables an input field.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  37. What is HTML Accessibility?
&lt;/h2&gt;

&lt;p&gt;Making websites usable for everyone, including people with disabilities.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  38. What is SEO in HTML?
&lt;/h2&gt;

&lt;p&gt;SEO means optimizing webpages for search engines.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  39. Which HTML tags help SEO?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;h1 to h6&lt;/li&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;meta&lt;/li&gt;
&lt;li&gt;article&lt;/li&gt;
&lt;li&gt;section&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  40. What is the difference between b and strong?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  b
&lt;/h3&gt;

&lt;p&gt;Visual bold text.&lt;/p&gt;

&lt;h3&gt;
  
  
  strong
&lt;/h3&gt;

&lt;p&gt;Important text with semantic meaning.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  41. What is the difference between i and em?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  i
&lt;/h3&gt;

&lt;p&gt;Italic text.&lt;/p&gt;

&lt;h3&gt;
  
  
  em
&lt;/h3&gt;

&lt;p&gt;Emphasized text with meaning.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  42. What are empty elements?
&lt;/h2&gt;

&lt;p&gt;Elements without closing tags.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;hr&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  43. What is the purpose of comments in HTML?
&lt;/h2&gt;

&lt;p&gt;Used for notes inside code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Comment --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  44. What is HTML5 Local Storage?
&lt;/h2&gt;

&lt;p&gt;Stores data inside the browser permanently until removed.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  45. What is the difference between Local Storage and Session Storage?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Local Storage
&lt;/h3&gt;

&lt;p&gt;Persists until manually removed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Session Storage
&lt;/h3&gt;

&lt;p&gt;Removed when browser tab closes.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  46. What is the Audio tag?
&lt;/h2&gt;

&lt;p&gt;Used to play audio files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;audio&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  47. What is the Video tag?
&lt;/h2&gt;

&lt;p&gt;Used to play videos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;video&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  48. What is the Canvas element?
&lt;/h2&gt;

&lt;p&gt;Used for graphics and drawing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;canvas&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  49. What is the difference between HTML CSS and JavaScript?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&gt;

&lt;p&gt;Structure&lt;/p&gt;

&lt;h3&gt;
  
  
  CSS
&lt;/h3&gt;

&lt;p&gt;Styling&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript
&lt;/h3&gt;

&lt;p&gt;Interactivity&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;




&lt;h2&gt;
  
  
  50. Why should we learn HTML?
&lt;/h2&gt;

&lt;p&gt;HTML is the foundation of every website.&lt;/p&gt;

&lt;p&gt;Without HTML, webpages cannot be structured properly.&lt;/p&gt;

&lt;p&gt;⬆ Back to Questions&lt;/p&gt;

</description>
      <category>interview</category>
      <category>webdev</category>
      <category>html</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Node.js Syllabus for Beginners 🚀 | Complete Backend Roadmap</title>
      <dc:creator>Tech Webster</dc:creator>
      <pubDate>Sun, 12 Jul 2026 16:32:43 +0000</pubDate>
      <link>https://dev.to/techwebster/nodejs-syllabus-for-beginners-complete-backend-roadmap-566b</link>
      <guid>https://dev.to/techwebster/nodejs-syllabus-for-beginners-complete-backend-roadmap-566b</guid>
      <description>&lt;h2&gt;
  
  
  Node.js Syllabus for Beginners 🚀
&lt;/h2&gt;

&lt;p&gt;If you're planning to become a Backend Developer, Full Stack Developer, or JavaScript Developer, learning Node.js is one of the best places to start.&lt;/p&gt;

&lt;p&gt;This beginner-friendly roadmap covers everything from installing Node.js to building REST APIs with Express and MongoDB.&lt;/p&gt;

&lt;p&gt;Whether you're a student or someone switching careers, this syllabus provides a structured learning path to help you become a Node.js developer.&lt;/p&gt;

&lt;p&gt;Let's begin! 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Introduction to Node.js
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is Node.js?&lt;/li&gt;
&lt;li&gt;Why Node.js?&lt;/li&gt;
&lt;li&gt;Features of Node.js&lt;/li&gt;
&lt;li&gt;V8 JavaScript Engine&lt;/li&gt;
&lt;li&gt;Event-Driven Architecture&lt;/li&gt;
&lt;li&gt;Non-Blocking I/O&lt;/li&gt;
&lt;li&gt;Real-world Applications&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Installing Node.js
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Download Node.js&lt;/li&gt;
&lt;li&gt;Install Node.js&lt;/li&gt;
&lt;li&gt;Verify Installation&lt;/li&gt;
&lt;li&gt;LTS vs Current Version&lt;/li&gt;
&lt;li&gt;Node Version Manager (NVM)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Node.js Command Line
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;node Command&lt;/li&gt;
&lt;li&gt;Running JavaScript Files&lt;/li&gt;
&lt;li&gt;Node REPL&lt;/li&gt;
&lt;li&gt;Useful CLI Options&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Your First Node.js Program
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hello World&lt;/li&gt;
&lt;li&gt;Running Files&lt;/li&gt;
&lt;li&gt;Understanding Execution&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Global Objects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;global&lt;/li&gt;
&lt;li&gt;console&lt;/li&gt;
&lt;li&gt;process&lt;/li&gt;
&lt;li&gt;__dirname&lt;/li&gt;
&lt;li&gt;__filename&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Modules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What are Modules?&lt;/li&gt;
&lt;li&gt;Built-in Modules&lt;/li&gt;
&lt;li&gt;Local Modules&lt;/li&gt;
&lt;li&gt;CommonJS&lt;/li&gt;
&lt;li&gt;ECMAScript Modules (ESM)&lt;/li&gt;
&lt;li&gt;require()&lt;/li&gt;
&lt;li&gt;module.exports&lt;/li&gt;
&lt;li&gt;import&lt;/li&gt;
&lt;li&gt;export&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. NPM (Node Package Manager)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is npm?&lt;/li&gt;
&lt;li&gt;package.json&lt;/li&gt;
&lt;li&gt;package-lock.json&lt;/li&gt;
&lt;li&gt;Installing Packages&lt;/li&gt;
&lt;li&gt;Updating Packages&lt;/li&gt;
&lt;li&gt;Removing Packages&lt;/li&gt;
&lt;li&gt;npm Scripts&lt;/li&gt;
&lt;li&gt;Semantic Versioning&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. File System (fs)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reading Files&lt;/li&gt;
&lt;li&gt;Writing Files&lt;/li&gt;
&lt;li&gt;Appending Data&lt;/li&gt;
&lt;li&gt;Renaming Files&lt;/li&gt;
&lt;li&gt;Deleting Files&lt;/li&gt;
&lt;li&gt;Creating Directories&lt;/li&gt;
&lt;li&gt;Removing Directories&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Path Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;path.join()&lt;/li&gt;
&lt;li&gt;path.resolve()&lt;/li&gt;
&lt;li&gt;dirname&lt;/li&gt;
&lt;li&gt;basename&lt;/li&gt;
&lt;li&gt;extname&lt;/li&gt;
&lt;li&gt;normalize()&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. OS Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Platform&lt;/li&gt;
&lt;li&gt;CPU Information&lt;/li&gt;
&lt;li&gt;Memory Information&lt;/li&gt;
&lt;li&gt;User Information&lt;/li&gt;
&lt;li&gt;Network Interfaces&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Process Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;process.argv&lt;/li&gt;
&lt;li&gt;process.env&lt;/li&gt;
&lt;li&gt;process.cwd()&lt;/li&gt;
&lt;li&gt;process.exit()&lt;/li&gt;
&lt;li&gt;process.pid&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  12. Buffer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is Buffer?&lt;/li&gt;
&lt;li&gt;Creating Buffers&lt;/li&gt;
&lt;li&gt;Reading Buffers&lt;/li&gt;
&lt;li&gt;Writing Buffers&lt;/li&gt;
&lt;li&gt;Buffer Encoding&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  13. Events
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;EventEmitter&lt;/li&gt;
&lt;li&gt;Creating Events&lt;/li&gt;
&lt;li&gt;Listening Events&lt;/li&gt;
&lt;li&gt;Removing Listeners&lt;/li&gt;
&lt;li&gt;Custom Events&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  14. Timers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;setTimeout()&lt;/li&gt;
&lt;li&gt;setInterval()&lt;/li&gt;
&lt;li&gt;clearTimeout()&lt;/li&gt;
&lt;li&gt;clearInterval()&lt;/li&gt;
&lt;li&gt;setImmediate()&lt;/li&gt;
&lt;li&gt;process.nextTick()&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  15. URL Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;URL Object&lt;/li&gt;
&lt;li&gt;URL Parameters&lt;/li&gt;
&lt;li&gt;Query Parameters&lt;/li&gt;
&lt;li&gt;URLSearchParams&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  16. HTTP Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Creating HTTP Server&lt;/li&gt;
&lt;li&gt;Request Object&lt;/li&gt;
&lt;li&gt;Response Object&lt;/li&gt;
&lt;li&gt;HTTP Methods&lt;/li&gt;
&lt;li&gt;HTTP Status Codes&lt;/li&gt;
&lt;li&gt;HTTP Headers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  17. Streams
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Readable Streams&lt;/li&gt;
&lt;li&gt;Writable Streams&lt;/li&gt;
&lt;li&gt;Duplex Streams&lt;/li&gt;
&lt;li&gt;Transform Streams&lt;/li&gt;
&lt;li&gt;Piping Streams&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  18. Working with JSON
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;JSON.parse()&lt;/li&gt;
&lt;li&gt;JSON.stringify()&lt;/li&gt;
&lt;li&gt;Reading JSON Files&lt;/li&gt;
&lt;li&gt;Writing JSON Files&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  19. Asynchronous Programming
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Synchronous vs Asynchronous&lt;/li&gt;
&lt;li&gt;Callback Functions&lt;/li&gt;
&lt;li&gt;Promises&lt;/li&gt;
&lt;li&gt;Async / Await&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  20. Event Loop
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is Event Loop?&lt;/li&gt;
&lt;li&gt;Call Stack&lt;/li&gt;
&lt;li&gt;Callback Queue&lt;/li&gt;
&lt;li&gt;Microtask Queue&lt;/li&gt;
&lt;li&gt;Execution Flow&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  21. Error Handling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;try...catch&lt;/li&gt;
&lt;li&gt;throw&lt;/li&gt;
&lt;li&gt;Custom Errors&lt;/li&gt;
&lt;li&gt;Handling Async Errors&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  22. Environment Variables
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;process.env&lt;/li&gt;
&lt;li&gt;.env Files&lt;/li&gt;
&lt;li&gt;Configuration Management&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  23. Working with File Streams
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reading Large Files&lt;/li&gt;
&lt;li&gt;Writing Large Files&lt;/li&gt;
&lt;li&gt;Stream Piping&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  24. Child Process Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;exec()&lt;/li&gt;
&lt;li&gt;spawn()&lt;/li&gt;
&lt;li&gt;fork()&lt;/li&gt;
&lt;li&gt;execFile()&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  25. Crypto Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Random Bytes&lt;/li&gt;
&lt;li&gt;Hashing&lt;/li&gt;
&lt;li&gt;Creating Hashes&lt;/li&gt;
&lt;li&gt;Encryption Basics&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  26. Util Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;promisify()&lt;/li&gt;
&lt;li&gt;format()&lt;/li&gt;
&lt;li&gt;inspect()&lt;/li&gt;
&lt;li&gt;inherits()&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  27. Debugging Node.js
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;console.log()&lt;/li&gt;
&lt;li&gt;Node Inspector&lt;/li&gt;
&lt;li&gt;Debugging with VS Code&lt;/li&gt;
&lt;li&gt;Error Stack Traces&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  28. Performance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Blocking vs Non-Blocking Code&lt;/li&gt;
&lt;li&gt;Memory Usage&lt;/li&gt;
&lt;li&gt;Performance Monitoring&lt;/li&gt;
&lt;li&gt;Best Practices&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  29. Node.js Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Folder Structure&lt;/li&gt;
&lt;li&gt;Code Organization&lt;/li&gt;
&lt;li&gt;Modular Programming&lt;/li&gt;
&lt;li&gt;Error Handling&lt;/li&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>backend</category>
      <category>syllabus</category>
      <category>roadmap</category>
    </item>
  </channel>
</rss>
