<?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>Forem: Jeff Go</title>
    <description>The latest articles on Forem by Jeff Go (@jeffgo10).</description>
    <link>https://forem.com/jeffgo10</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756317%2F5dcde9c8-b29c-4857-a933-a02310830579.jpeg</url>
      <title>Forem: Jeff Go</title>
      <link>https://forem.com/jeffgo10</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jeffgo10"/>
    <language>en</language>
    <item>
      <title>The Web is just getting better nowadays. Google I/O just announced the HTML-in-Canvas API, and it's going to completely change how we build interactive web apps!</title>
      <dc:creator>Jeff Go</dc:creator>
      <pubDate>Mon, 25 May 2026 04:28:09 +0000</pubDate>
      <link>https://forem.com/jeffgo10/the-web-is-just-getting-better-nowadays-google-io-just-announced-the-html-in-canvas-api-and-its-5adj</link>
      <guid>https://forem.com/jeffgo10/the-web-is-just-getting-better-nowadays-google-io-just-announced-the-html-in-canvas-api-and-its-5adj</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc" class="crayons-story__hidden-navigation-link"&gt;HTML-in-Canvas: The Wild New API from Google I/O (and How Not to Break the Browser)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/jeffgo10" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756317%2F5dcde9c8-b29c-4857-a933-a02310830579.jpeg" alt="jeffgo10 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jeffgo10" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jeff Go
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jeff Go
                
              
              &lt;div id="story-author-preview-content-3745603" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jeffgo10" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756317%2F5dcde9c8-b29c-4857-a933-a02310830579.jpeg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jeff Go&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc" id="article-link-3745603"&gt;
          HTML-in-Canvas: The Wild New API from Google I/O (and How Not to Break the Browser)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/html"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;html&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Google I/O just announced the HTML-in-Canvas API, and it's going to completely change how we build interactive web apps!</title>
      <dc:creator>Jeff Go</dc:creator>
      <pubDate>Mon, 25 May 2026 04:27:28 +0000</pubDate>
      <link>https://forem.com/jeffgo10/google-io-just-announced-the-html-in-canvas-api-and-its-going-to-completely-change-how-we-build-40nc</link>
      <guid>https://forem.com/jeffgo10/google-io-just-announced-the-html-in-canvas-api-and-its-going-to-completely-change-how-we-build-40nc</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc" class="crayons-story__hidden-navigation-link"&gt;HTML-in-Canvas: The Wild New API from Google I/O (and How Not to Break the Browser)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/jeffgo10" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756317%2F5dcde9c8-b29c-4857-a933-a02310830579.jpeg" alt="jeffgo10 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jeffgo10" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jeff Go
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jeff Go
                
              
              &lt;div id="story-author-preview-content-3745603" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jeffgo10" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756317%2F5dcde9c8-b29c-4857-a933-a02310830579.jpeg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jeff Go&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc" id="article-link-3745603"&gt;
          HTML-in-Canvas: The Wild New API from Google I/O (and How Not to Break the Browser)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/html"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;html&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>HTML-in-Canvas: The Wild New API from Google I/O (and How Not to Break the Browser)</title>
      <dc:creator>Jeff Go</dc:creator>
      <pubDate>Mon, 25 May 2026 04:10:10 +0000</pubDate>
      <link>https://forem.com/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc</link>
      <guid>https://forem.com/jeffgo10/html-in-canvas-the-wild-new-api-from-google-io-and-how-not-to-break-the-browser-hkc</guid>
      <description>&lt;p&gt;Google I/O just dropped an absolute bomb of an API for frontend developers: &lt;strong&gt;HTML-in-Canvas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/TUtKGTeFWjQ"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you’ve ever built immersive 3D web experiences, map tools, or heavy data dashboards using WebGL or WebGPU, you know the absolute nightmare of rendering UI text or buttons on top of a canvas. You either had to sync floating, absolute-positioned HTML elements on top of the canvas (which lagged during fast scrolls), or draw text manually using WebGL textures (which killed SEO and accessibility).&lt;/p&gt;

&lt;p&gt;The new HTML-in-Canvas API fixes this by introducing three new primitives—like the &lt;code&gt;layoutsubtree&lt;/code&gt; attribute and &lt;code&gt;textElementImage2D()&lt;/code&gt;—allowing you to put real, styleable HTML elements directly inside a canvas. The browser feeds it straight into the GPU as a texture, but keeps it part of the normal DOM layout and accessibility tree.&lt;/p&gt;

&lt;p&gt;Because it’s an active origin trial, the wild west rules apply. Here are the practical Do's and Don'ts for this new playground.&lt;/p&gt;

&lt;h2&gt;
  
  
  👑 The DO's
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DO use it for complex data visualizations and 3D UI&lt;/strong&gt;: This is the ultimate sweet spot. If you are building high-frequency data dashboards or immersive spatial sites, you can now build your menus, form controls, and text overlays in standard HTML/CSS and let the GPU layer them directly over your canvas without a hint of frame lag.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DO keep accessibility in mind&lt;/strong&gt;: Because the elements inside the canvas are real DOM nodes, screen readers can finally read your canvas text, and browser translate features actually work on it natively. Make sure you use semantic HTML (&lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;, etc.) inside your canvas subtree so the accessibility tree populates correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DO use CSS for layout&lt;/strong&gt;: You don't have to write custom JavaScript positioning math anymore. You can apply standard CSS styling to children within the &lt;code&gt;layoutsubtree&lt;/code&gt;. Let the browser engine calculate the bounds, then use the &lt;code&gt;onpaint&lt;/code&gt; hook to upload the fresh layout changes to your WebGL/WebGPU shaders.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚫 The DON'Ts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DON'T dump your whole app into a canvas&lt;/strong&gt;: Just because you can render HTML in a canvas doesn’t mean your entire landing page belongs in one. Canvas-heavy rendering consumes significantly more battery and GPU resources. Use it strictly for high-fidelity interactive sections, not standard text articles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DON'T update the inner HTML 60 times a second&lt;/strong&gt;: The API relies on a &lt;code&gt;.onpaint&lt;/code&gt; event to upload changes as a GPU texture. If you are blasting text modifications or CSS transitions inside the canvas subtree on every single frame, you will bottleneck the main thread with heavy texture re-uploads. Keep the static UI inside the canvas, and use WebGL shaders for the crazy animations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DON'T ship this to production blindly yet&lt;/strong&gt;: It’s an origin trial. It currently requires a flag in Chrome Canary and isn't a baseline standard across Safari or Firefox yet. Use this phase to build prototypes, learn the architecture, and write feedback for the WICG proposal while the API matures.  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;The web is getting fun again. HTML-in-Canvas breaks down the wall between traditional document layouts and hardware-accelerated creative engineering. It’s going to completely change how we build tools, dashboards, and spatial interfaces over the next few years.&lt;/p&gt;

&lt;p&gt;Are you planning to test out the origin trial? What wild UI ideas are you thinking of throwing into a shader? Let’s chat shop in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>html</category>
      <category>api</category>
    </item>
    <item>
      <title>sometimes Wordpress frustrates me, but hey, it is here to stay. here's what we as devs can do about it</title>
      <dc:creator>Jeff Go</dc:creator>
      <pubDate>Sat, 23 May 2026 12:06:15 +0000</pubDate>
      <link>https://forem.com/jeffgo10/sometimes-wordpress-frustrates-me-but-hey-it-is-here-to-stay-heres-what-we-as-devs-can-do-about-164m</link>
      <guid>https://forem.com/jeffgo10/sometimes-wordpress-frustrates-me-but-hey-it-is-here-to-stay-heres-what-we-as-devs-can-do-about-164m</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/jeffgo10/the-wordpress-paradox-why-its-here-to-stay-and-how-to-stop-ruining-it-185e" class="crayons-story__hidden-navigation-link"&gt;The WordPress Paradox: Why It’s Here to Stay (and How to Stop Ruining It)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/jeffgo10" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756317%2F5dcde9c8-b29c-4857-a933-a02310830579.jpeg" alt="jeffgo10 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jeffgo10" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jeff Go
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jeff Go
                
              
              &lt;div id="story-author-preview-content-3732360" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jeffgo10" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756317%2F5dcde9c8-b29c-4857-a933-a02310830579.jpeg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jeff Go&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/jeffgo10/the-wordpress-paradox-why-its-here-to-stay-and-how-to-stop-ruining-it-185e" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/jeffgo10/the-wordpress-paradox-why-its-here-to-stay-and-how-to-stop-ruining-it-185e" id="article-link-3732360"&gt;
          The WordPress Paradox: Why It’s Here to Stay (and How to Stop Ruining It)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/wordpress"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;wordpress&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/jeffgo10/the-wordpress-paradox-why-its-here-to-stay-and-how-to-stop-ruining-it-185e#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>The WordPress Paradox: Why It’s Here to Stay (and How to Stop Ruining It)</title>
      <dc:creator>Jeff Go</dc:creator>
      <pubDate>Sat, 23 May 2026 11:21:47 +0000</pubDate>
      <link>https://forem.com/jeffgo10/the-wordpress-paradox-why-its-here-to-stay-and-how-to-stop-ruining-it-185e</link>
      <guid>https://forem.com/jeffgo10/the-wordpress-paradox-why-its-here-to-stay-and-how-to-stop-ruining-it-185e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fee14wiapnoyb84gaqam5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fee14wiapnoyb84gaqam5.jpg" alt="software developer screaming computer funny meme. Source: itchronicles.com" width="800" height="605"&gt;&lt;/a&gt;Let’s be honest. If you are fluent in React, TypeScript, and modern backend architectures, working on WordPress feels like taking a massive step backward. For years, developers have been predicting its death, claiming modern stacks would completely wipe it out.&lt;/p&gt;

&lt;p&gt;But it’s 2026, and WordPress still powers over 40% of the internet. It isn't going anywhere.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7kqd7ftqmmfxonbspu8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7kqd7ftqmmfxonbspu8.jpg" alt="Unfortunately, Wordpress is here to stay *sigh*" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As developers, we have two choices: we can keep complaining about it, or we can understand why businesses love it and learn how to engineer it properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem: Plugin Abuse
&lt;/h2&gt;

&lt;p&gt;WordPress gets a bad reputation, but the fault usually lies with the people building it. Too many developers (and clients) treat the plugin directory like a candy store.&lt;/p&gt;

&lt;p&gt;Need a Google Analytics tag? Install a plugin. Need a basic contact form? Install a plugin. Need to compress an image? Install another one.&lt;/p&gt;

&lt;p&gt;Before you know it, the site is running 40+ heavy plugins. They constantly fight for database resources, conflict with each other during updates, create massive security vulnerabilities, and turn the user experience into a slow, bloated mess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Clients Won't Move On
&lt;/h2&gt;

&lt;p&gt;We love our frameworks, but clients care about business outcomes, not our tech stacks. WordPress wins because of two things:&lt;/p&gt;

&lt;p&gt;The Non-Technical Content Editor: Marketing teams know how to use the dashboard. They want to fix a typo or publish a landing page instantly without opening a GitHub ticket or waiting for a developer to deploy code.&lt;/p&gt;

&lt;p&gt;The Mature Ecosystem: Spinning up standard features like WooCommerce or Advanced Custom Fields (ACF) takes days, whereas building those from scratch in a custom stack takes weeks of expensive engineering time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Modern Compromise: Headless WordPress
&lt;/h2&gt;

&lt;p&gt;You don’t have to build monolithic, slow PHP sites to give clients what they want. The modern way to handle this is Headless WordPress.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eyjo80f1yztxax5f5oi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eyjo80f1yztxax5f5oi.png" alt="Next.js = TECHNOLOGIA" width="800" height="849"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You keep WordPress strictly as a backend Content Management System (CMS). The marketing team gets their familiar login dashboard to manage posts. But instead of letting PHP render the front-end, you pull that content via the WordPress REST API or WPGraphQL.&lt;/p&gt;

&lt;p&gt;Then, you build the actual website using Astro, Next.js, or Remix. The end-user gets a blazing-fast, secure, compile-on-demand static or React site, and the client still gets their favorite editor. It’s a win-win.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Keep Monolithic WordPress Lean (Without 50 Plugins)
&lt;/h2&gt;

&lt;p&gt;If you do have to build a traditional monolithic WordPress site, you can easily keep it from choking if you stick to a few senior development rules:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmk3ty0osc6e04cdl5mff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmk3ty0osc6e04cdl5mff.png" alt="Be the Code Bro - use functions.php" width="800" height="902"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stop using plugins for embed codes:&lt;/strong&gt; If a client needs a Google Analytics tag, a Facebook Pixel, or a custom script, do not look for a plugin to inject it. WordPress gives you native hooks like &lt;code&gt;wp_enqueue_script&lt;/code&gt; or &lt;code&gt;wp_head&lt;/code&gt; and &lt;code&gt;wp_footer&lt;/code&gt;. You can open your &lt;code&gt;functions.php&lt;/code&gt; file, write a quick action hook, and drop the code directly into the header or footer yourself. It takes five minutes, requires zero overhead, and eliminates an entire third-party plugin attack vector.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;// Drop this in functions.php instead of installing a Google Analytics plugin

add_action('wp_head', 'add_google_analytics');

function add_google_analytics() {
    ?&amp;gt;
&lt;span class="c"&gt;&amp;lt;!-- embed code here --&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use native core features:&lt;/strong&gt; If you need to register a custom post type, change a minor layout behavior, or adjust image thumbnail crop sizes, write a few clean lines of native PHP in &lt;code&gt;functions.php&lt;/code&gt;. It keeps your logic version-controlled and tightly integrated with your theme.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ditch heavy page builders:&lt;/strong&gt; Avoid tools like &lt;strong&gt;Elementor&lt;/strong&gt; or &lt;strong&gt;Divi&lt;/strong&gt; that inject endless nested tables, bloated CSS, and unnecessary DOM elements. Use native &lt;strong&gt;Gutenberg&lt;/strong&gt; blocks paired with &lt;strong&gt;Advanced Custom Fields (ACF)&lt;/strong&gt; to give clients flexible layouts that remain incredibly lightweight.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Offload to the Edge:&lt;/strong&gt; Stop using heavy security and optimization plugins that run massive, unoptimized cron jobs on your origin server. Put the site behind &lt;strong&gt;Cloudflare&lt;/strong&gt; and let the network edge handle caching, web application firewalls (WAF), and image optimization.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;WordPress isn't a tech stack problem; it's an engineering discipline problem. Once we stop fighting the fact that it's here to stay, we can start using modern architecture to make it fast, secure, and actually pleasant to work with.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>wordpress</category>
    </item>
  </channel>
</rss>
