<?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>Golf Forem</title>
    <description>The most recent home feed on Golf Forem.</description>
    <link>https://golf.forem.com</link>
    <atom:link rel="self" type="application/rss+xml" href="https://golf.forem.com/feed"/>
    <language>en</language>
    <item>
      <title>What's New At Releem  -  WHM/cPanel integration is available</title>
      <dc:creator>Roman Agabekov</dc:creator>
      <pubDate>Thu, 30 Apr 2026 22:00:13 +0000</pubDate>
      <link>https://golf.forem.com/drupaladmin/whats-new-at-releem-whmcpanel-integration-is-available-1fid</link>
      <guid>https://golf.forem.com/drupaladmin/whats-new-at-releem-whmcpanel-integration-is-available-1fid</guid>
      <description>&lt;p&gt;We spent March focused on expanding query optimization, building out partner integrations, continuing PostgreSQL testing, and improve the overall experience for hosting providers and teams using Releem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;td&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%2Fprk0iaripgm9veey4ydb.png" alt="Screenshot 1" width="600" height="600"&gt;
    &lt;/td&gt;
    &lt;td&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%2F1nteb3r99uey5aijs3a0.png" alt="Screenshot 2" width="400" height="399"&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We also had the chance to connect with the hosting community at CloudFest. There, we met with hosting providers interested in partnering with Releem to offer Database Advisor to their customers. I gave a talk on Database Advisor for teams running databases without a DBA.&lt;/p&gt;

&lt;p&gt;Gabriel presented a deep technical session at Scale23X titled &lt;em&gt;&lt;a href="https://www.socallinuxexpo.org/scale/23x/presentations/hidden-lives-temp-tables-unraveling-mysql-internal-management" rel="noopener noreferrer"&gt;The Hidden Lives of Temp Tables: Unraveling MySQL Internal Management.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Contributions
&lt;/h2&gt;

&lt;p&gt;We're always collecting issues and feature requests on &lt;a href="https://github.com/Releem/mysqlconfigurer" rel="noopener noreferrer"&gt;our GitHub&lt;/a&gt;. Here's where you can contribute:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issues&lt;/strong&gt; – If you encounter any problems or bugs, report them &lt;a href="https://github.com/Releem/mysqlconfigurer/issues" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature Requests&lt;/strong&gt; – Have an idea to make Releem even better? Share your suggestions &lt;a href="https://github.com/Releem/mysqlconfigurer/discussions" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Batch SQL query analysis and recommendations
&lt;/h3&gt;

&lt;p&gt;You can now see recommendations for all queries directly in &lt;strong&gt;Query Analytics&lt;/strong&gt; without any additional clicks, and save them to the &lt;strong&gt;Query Optimization&lt;/strong&gt; tab for further review and optimization.&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%2Fgs6ca3ivio6sktxae1qu.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%2Fgs6ca3ivio6sktxae1qu.png" alt=" " width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If no issues are found, the result shows that the query was analyzed along with the timestamp of the latest check, so you can clearly see what was reviewed and when.&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%2Fovpirnj0glmq9o7zkhnm.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%2Fovpirnj0glmq9o7zkhnm.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Releem continues to automatically identify the most impactful queries based on workload and adds them as discovered opportunities in the Query Optimization tab.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom SQL query optimization
&lt;/h3&gt;

&lt;p&gt;You can now analyze and get recommendations for your own SQL queries, not just the ones Releem detects automatically. Developers can review and optimize queries before they reach production. In &lt;strong&gt;Queries &amp;amp; Schema&lt;/strong&gt; plate go to &lt;strong&gt;&lt;u&gt;Query Optimization&lt;u&gt;&lt;/u&gt;&lt;/u&gt;&lt;/strong&gt; tab and press + Add Custom Query&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%2Fbi6ub0g1x7x76ylrszkr.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%2Fbi6ub0g1x7x76ylrszkr.png" alt=" " width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  WHM/cPanel integration
&lt;/h3&gt;

&lt;p&gt;Releem also integrates with WHM/cPanel, simplifying the installation process and providing access to the Releem dashboard directly from WHM. During installation, Releem disables cPanel auto-tuning rules to ensure compatibility.&lt;/p&gt;

&lt;p&gt;Learn more in the &lt;a href="https://docs.releem.com/releem-agent/installation-guides/whm-cpanel" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&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%2F4caymg4gvd5bz2ay02d6.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%2F4caymg4gvd5bz2ay02d6.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  API and WHMCS integration for hosting partners
&lt;/h3&gt;

&lt;p&gt;We released an API for hosting partners, enabling programmatic integration of Releem into hosting platforms and making it possible to offer Database Advisor to VPS, dedicated, and cloud server customers.&lt;/p&gt;

&lt;p&gt;Releem also integrates with &lt;strong&gt;WHMCS&lt;/strong&gt;, allowing providers to sell and manage Database Advisor as an add-on through their existing billing workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://releem.com/get-releem-partner-deck" rel="noopener noreferrer"&gt;Get the partner deck&lt;/a&gt; to learn more about integration and partnership options.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Aurora Serverless support
&lt;/h3&gt;

&lt;p&gt;We added support for AWS Aurora Serverless, bringing Releem’s performance analysis and recommendations to these environments (&lt;a href="https://github.com/Releem/mysqlconfigurer/discussions/477" rel="noopener noreferrer"&gt;Feature request #477&lt;/a&gt;).&lt;br&gt;
The installation process is the same as for AWS RDS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deadlock export to CSV
&lt;/h3&gt;

&lt;p&gt;Detected deadlocks can now be exported to CSV for external analysis and reporting (&lt;a href="https://github.com/Releem/mysqlconfigurer/discussions/503" rel="noopener noreferrer"&gt;Feature request #503&lt;/a&gt;).&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%2Fuap4u7oqf4k50h1gie60.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%2Fuap4u7oqf4k50h1gie60.png" alt=" " width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Improved data collection performance
&lt;/h3&gt;

&lt;p&gt;We fixed an issue in how Releem queried table_io_waits_summary_by_index_usage reducing unnecessary full table scans on servers with many databases (&lt;a href="https://github.com/Releem/mysqlconfigurer/issues/500" rel="noopener noreferrer"&gt;Issue #500&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Uninstallation dependency fix
&lt;/h3&gt;

&lt;p&gt;The agent no longer downloads unnecessary dependencies during uninstallation (&lt;a href="https://github.com/Releem/mysqlconfigurer/issues/466" rel="noopener noreferrer"&gt;Issue #466&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Duplicate index detection improvement
&lt;/h3&gt;

&lt;p&gt;We improved duplicate index analysis to account for foreign key-backed indexes, helping prevent unsafe recommendations during index optimization (&lt;a href="https://github.com/Releem/mysqlconfigurer/issues/478" rel="noopener noreferrer"&gt;Issue #478&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Expanded query parser support
&lt;/h3&gt;

&lt;p&gt;Releem now supports optimization for queries that start with '(' instead of 'SELECT' (&lt;a href="https://github.com/Releem/mysqlconfigurer/issues/427" rel="noopener noreferrer"&gt;Issue #427&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Offline agent apply-task fix
&lt;/h3&gt;

&lt;p&gt;We fixed an issue that allowed configuration apply tasks to be scheduled while the agent was offline (&lt;a href="https://github.com/Releem/mysqlconfigurer/issues/311" rel="noopener noreferrer"&gt;Issue #311&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>devops</category>
      <category>database</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Virtualizing SteamOS with QEMU/KVM: The Steps Nobody Tells You</title>
      <dc:creator>Abdullah Musa</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:43:20 +0000</pubDate>
      <link>https://golf.forem.com/retro-1o1/virtualizing-steamos-with-qemukvm-the-steps-nobody-tells-you-2mcm</link>
      <guid>https://golf.forem.com/retro-1o1/virtualizing-steamos-with-qemukvm-the-steps-nobody-tells-you-2mcm</guid>
      <description>&lt;p&gt;&lt;strong&gt;SteamOS&lt;/strong&gt; is not a standard Linux distribution. It ships as a recovery image for the Steam Deck, not a generic ISO. That fact explains every strange requirement you face when you try to run it in a virtual machine. The file you download is a &lt;strong&gt;.bz2&lt;/strong&gt; archive, not an installer. The VM must present the virtual drive as &lt;strong&gt;NVMe&lt;/strong&gt;. And if you let the system reboot right after installation it will launch into Gaming Mode, which cannot work without the Deck's custom AMD GPU.&lt;/p&gt;

&lt;p&gt;I have a full in-depth walkthrough on my blog. This post gives you the reasoning and the exact commands to get a working VM, plus the one intervention that saves you from a permanent black screen.&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%2F7c7u2ay8pjhj8fjhouf9.webp" 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%2F7c7u2ay8pjhj8fjhouf9.webp" alt="Neofetch inside SteamOS running on QEMU/KVM" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The .bz2 Archive Hides a Raw Disk Image
&lt;/h2&gt;

&lt;p&gt;Head to Valve's official SteamOS page and you get a steamOS-recovery-image.bz2 file. Decompress it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xjf&lt;/span&gt; steamOS-recovery-image.bz2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside you'll find a .img file. It's a raw block-level copy of a full SteamOS installation, not a live environment. It contains a GPT partition table, the bootloader, and the A/B root partitions used for atomic updates. Valve compresses it with BZIP2 to keep the download small. That's fair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why You Must Use an NVMe Virtual Drive
&lt;/h2&gt;

&lt;p&gt;The Steam Deck uses an NVMe SSD. The recovery image's installer scripts look for a block device at &lt;strong&gt;/dev/nvme0n1&lt;/strong&gt;. If you attach the virtual disk as a SATA or IDE drive, the kernel sees &lt;strong&gt;/dev/sda&lt;/strong&gt; and the installer will say no valid target is found. It's not a bug. It's what the script expects.&lt;br&gt;
In QEMU you emulate an NVMe controller. First create a virtual disk:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qemu-img create &lt;span class="nt"&gt;-f&lt;/span&gt; qcow2 steamOSDrive.qcow2 16G
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then map it in the launch command. The crucial flags are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;-&lt;span class="n"&gt;drive&lt;/span&gt; &lt;span class="n"&gt;if&lt;/span&gt;=&lt;span class="n"&gt;none&lt;/span&gt;,&lt;span class="n"&gt;id&lt;/span&gt;=&lt;span class="n"&gt;nvme0&lt;/span&gt;,&lt;span class="n"&gt;file&lt;/span&gt;=&lt;span class="n"&gt;steamOSDrive&lt;/span&gt;.&lt;span class="n"&gt;qcow2&lt;/span&gt;
-&lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="n"&gt;nvme&lt;/span&gt;,&lt;span class="n"&gt;drive&lt;/span&gt;=&lt;span class="n"&gt;nvme0&lt;/span&gt;,&lt;span class="n"&gt;serial&lt;/span&gt;=&lt;span class="n"&gt;badbeef&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The serial number is required and can be any string. The moment the recovery environment sees an NVMe namespace, the install option lights up.&lt;/p&gt;

&lt;h2&gt;
  
  
  UEFI Firmware Is Not Optional
&lt;/h2&gt;

&lt;p&gt;SteamOS boots via UEFI with a GPT partition layout. Legacy BIOS won't work. QEMU provides UEFI through the OVMF firmware. You need two files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OVMF_CODE.fd (read-only firmware code)&lt;/li&gt;
&lt;li&gt;OVMF_VARS.fd (persistent NVRAM for boot variables)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On most distros these live in &lt;strong&gt;/usr/share/ovmf/x64/&lt;/strong&gt;. Pass them as pflash drives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;-&lt;span class="n"&gt;drive&lt;/span&gt; &lt;span class="n"&gt;if&lt;/span&gt;=&lt;span class="n"&gt;pflash&lt;/span&gt;,&lt;span class="n"&gt;format&lt;/span&gt;=&lt;span class="n"&gt;raw&lt;/span&gt;,&lt;span class="n"&gt;unit&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="n"&gt;file&lt;/span&gt;=&lt;span class="n"&gt;OVMF&lt;/span&gt;.&lt;span class="n"&gt;fd&lt;/span&gt;,&lt;span class="n"&gt;readonly&lt;/span&gt;=&lt;span class="n"&gt;on&lt;/span&gt;
-&lt;span class="n"&gt;drive&lt;/span&gt; &lt;span class="n"&gt;if&lt;/span&gt;=&lt;span class="n"&gt;pflash&lt;/span&gt;,&lt;span class="n"&gt;format&lt;/span&gt;=&lt;span class="n"&gt;raw&lt;/span&gt;,&lt;span class="n"&gt;unit&lt;/span&gt;=&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="n"&gt;file&lt;/span&gt;=&lt;span class="n"&gt;OVMF_VARS&lt;/span&gt;.&lt;span class="n"&gt;fd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without these, the VM tries BIOS mode, finds nothing on a GPT disk, and halts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Installation Command
&lt;/h2&gt;

&lt;p&gt;With all pieces in place, the complete QEMU command for the installation phase looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qemu-system-x86_64 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-cpu&lt;/span&gt; host &lt;span class="nt"&gt;-enable-kvm&lt;/span&gt; &lt;span class="nt"&gt;-smp&lt;/span&gt; 2 &lt;span class="nt"&gt;-m&lt;/span&gt; 8G &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-drive&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pflash,format&lt;span class="o"&gt;=&lt;/span&gt;raw,unit&lt;span class="o"&gt;=&lt;/span&gt;0,file&lt;span class="o"&gt;=&lt;/span&gt;OVMF.fd,readonly&lt;span class="o"&gt;=&lt;/span&gt;on &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-drive&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pflash,format&lt;span class="o"&gt;=&lt;/span&gt;raw,unit&lt;span class="o"&gt;=&lt;/span&gt;1,file&lt;span class="o"&gt;=&lt;/span&gt;OVMF_VARS.fd &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-drive&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;SteamOS.img,format&lt;span class="o"&gt;=&lt;/span&gt;raw &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-drive&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none,id&lt;span class="o"&gt;=&lt;/span&gt;nvme0,file&lt;span class="o"&gt;=&lt;/span&gt;steamOSDrive.qcow2 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-device&lt;/span&gt; nvme,drive&lt;span class="o"&gt;=&lt;/span&gt;nvme0,serial&lt;span class="o"&gt;=&lt;/span&gt;badbeef &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-display&lt;/span&gt; &lt;span class="s2"&gt;"gtk,gl=on"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-device&lt;/span&gt; usb-tablet &lt;span class="nt"&gt;-usb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fvqht6w1irfdkfjfqtngd.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%2Fvqht6w1irfdkfjfqtngd.png" alt="QEMU launch command to run SteamOS recovery image on VM" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It boots the recovery image with the empty NVMe drive ready. Inside the VM, open the Wipe Devices &amp;amp; Install SteamOS option and click Proceed. The installer will write the A/B partitions to your virtual NVMe.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gaming Mode Trap (Cancel the Reboot)
&lt;/h2&gt;

&lt;p&gt;Once the installation finishes, the wizard asks you to restart. If you click Proceed, SteamOS boots into Gaming Mode, which expects AMD GPU hardware. Inside a VM you get nothing but a black screen.&lt;/p&gt;

&lt;p&gt;Do not reboot. Instead, press Ctrl + Alt + T inside the VM to open a terminal. From there you force SteamOS to boot into the KDE Plasma desktop. Run these chroot commands on both partition sets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;steamos-chroot &lt;span class="nt"&gt;--disk&lt;/span&gt; nvme0n1 &lt;span class="nt"&gt;--partset&lt;/span&gt; A &lt;span class="nt"&gt;--no-overlay&lt;/span&gt;
steamos-readonly disable
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'[Autologin]'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/sddm.conf.d/zz-steamos-autologin.conf
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'Session=plasma.desktop'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/sddm.conf.d/zz-steamos-autologin.conf
steamos-readonly &lt;span class="nb"&gt;enable
exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fnfeetkqjewm3nk51hbaj.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%2Fnfeetkqjewm3nk51hbaj.png" alt="Changing SteamOS default gaming mode to KDE Plasma Desktop" width="800" height="502"&gt;&lt;/a&gt;&lt;br&gt;
Repeat the same block for --partset B. Then type reboot. The VM will now start directly into a working KDE Plasma session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why All This Matters
&lt;/h2&gt;

&lt;p&gt;SteamOS is a locked-down appliance OS built for one device. Running it in a VM reveals the assumptions baked into the installer and teaches you a lot about how Valve's immutable filesystem and A/B update scheme work. And once you have a working desktop session, you can use it almost like any Arch-based system.&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%2Fl9vcboo4gz3rmieu9x6u.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%2Fl9vcboo4gz3rmieu9x6u.png" alt="SteamOS running on QEMU VM fully updated" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a deeper dive that covers additional configuration, GPU passthrough notes, and troubleshooting, check out the full original guide on MusaBase:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.musabase.com/2025/04/how-to-virtualize-steamos-test-its.html" rel="noopener noreferrer"&gt;How to Virtualize SteamOS: Test Its Power Within QEMU/KVM (2026 Updated)&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. No magic, just an OS that wants to be on real Deck hardware. With a few QEMU tricks, you can convince it to run anyway.&lt;/p&gt;

</description>
      <category>steamos</category>
      <category>linux</category>
      <category>virtualmachine</category>
      <category>qemu</category>
    </item>
    <item>
      <title>How I built the fastest color manipulation library in TypeScript and the optimization techniques I learned</title>
      <dc:creator>Dmitry Kryaklin</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:40:00 +0000</pubDate>
      <link>https://golf.forem.com/dkryaklin/how-i-built-the-fastest-color-manipulation-library-in-typescript-and-the-optimization-techniques-i-56al</link>
      <guid>https://golf.forem.com/dkryaklin/how-i-built-the-fastest-color-manipulation-library-in-typescript-and-the-optimization-techniques-i-56al</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In 2025, I started building a color manipulation library called colordx. The frontend ecosystem is moving towards CSS Color 4: OKLCH, OKLab, Display-P3, Rec.2020. Most existing libraries were designed for the sRGB era and bolted modern color spaces on top. I wanted to build something that treats the modern stuff as a first-class citizen.&lt;/p&gt;

&lt;p&gt;But the goal I cared about most was performance. Not just "faster than colord" fast. I wanted colordx to be the fastest option in the benchmarks I cared about, and I wanted to actually understand why.&lt;/p&gt;

&lt;p&gt;This article is a short list of the optimization techniques that mattered the most. If you are working on a hot-path JavaScript library, I hope at least a few of these are useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results first
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;colordx&lt;/th&gt;
&lt;th&gt;colord&lt;/th&gt;
&lt;th&gt;culori&lt;/th&gt;
&lt;th&gt;chroma-js&lt;/th&gt;
&lt;th&gt;color&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Parse HEX → toHsl&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;38 ns&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;99 ns&lt;/td&gt;
&lt;td&gt;151 ns&lt;/td&gt;
&lt;td&gt;294 ns&lt;/td&gt;
&lt;td&gt;382 ns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parse HEX → lighten → toHex&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;64 ns&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;176 ns&lt;/td&gt;
&lt;td&gt;206 ns&lt;/td&gt;
&lt;td&gt;850 ns&lt;/td&gt;
&lt;td&gt;1010 ns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mix two colors&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;102 ns&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;759 ns&lt;/td&gt;
&lt;td&gt;1230 ns&lt;/td&gt;
&lt;td&gt;870 ns&lt;/td&gt;
&lt;td&gt;1900 ns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parse HEX → toOklch&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;271 ns&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;287 ns&lt;/td&gt;
&lt;td&gt;916 ns&lt;/td&gt;
&lt;td&gt;534 ns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inGamutP3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;202 ns&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1030 ns&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Now let's get into how.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Keep one canonical internal representation
&lt;/h2&gt;

&lt;p&gt;Every &lt;code&gt;Colordx&lt;/code&gt; instance stores exactly one thing: an &lt;code&gt;RgbColor&lt;/code&gt; object &lt;code&gt;{ r, g, b, a }&lt;/code&gt;. All conversions go through it.&lt;/p&gt;

&lt;p&gt;The reason is V8 monomorphism. The class has a fixed shape, so V8 always sees the same two fields on every method call. A library that stores different color models in different instances ends up with polymorphic inline caches everywhere, and JIT performance drops.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Don't use Object.create to skip the constructor
&lt;/h2&gt;

&lt;p&gt;This was the single biggest win. My first version used &lt;code&gt;Object.create(Colordx.prototype)&lt;/code&gt; in the internal factory to skip parsing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;_make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RgbColor&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Colordx&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;inst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Colordx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_rgb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_valid&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;inst&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;It looks clean but it is a trap. ES2022 classes with field declarations have a specific V8 hidden class transition chain. &lt;code&gt;Object.create&lt;/code&gt; bypasses the constructor, so the field initialization transitions never fire. The resulting instance has a &lt;em&gt;different&lt;/em&gt; hidden class than one created with &lt;code&gt;new Colordx()&lt;/code&gt;. V8 sees two shapes flowing into every hot method, ICs go polymorphic, performance dies.&lt;/p&gt;

&lt;p&gt;Fix: use a sentinel symbol so the constructor can skip parsing while still going through the proper field transition chain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_SENTINEL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unique&lt;/span&gt; &lt;span class="nx"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AnyColor&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;_SENTINEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_direct&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;RgbColor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;_SENTINEL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_valid&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_rgb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;_direct&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="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* parse */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;_make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RgbColor&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Colordx&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Colordx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_SENTINEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rgb&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;Around 330 ns → 270 ns on &lt;code&gt;Parse HEX → toOklch&lt;/code&gt;. Just from how the object is constructed.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Precomputed lookup tables for hex output
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;toString(16).padStart(2, '0')&lt;/code&gt; allocates a string every call. Precompute all 256 possibilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HEX_BYTE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="cm"&gt;/* #__PURE__ */&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three array lookups instead of three string allocations. Borrowed from &lt;code&gt;color-bits&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Bitwise hex parsing
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;parseInt('ff', 16)&lt;/code&gt; is slow because it is a general-purpose parser. Exploit the ASCII layout to decode a hex character with two integer ops:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hexNibble&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&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;c&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Based on Lemire's technique.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Reuse a module-level buffer when callers always destructure
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rgbToHslRaw&lt;/code&gt; is the hot path for &lt;code&gt;lighten&lt;/code&gt;, &lt;code&gt;darken&lt;/code&gt;, &lt;code&gt;saturate&lt;/code&gt;, etc. Every call would allocate a fresh &lt;code&gt;{ h, s, l, a }&lt;/code&gt; object. But all internal callers immediately destructure the result, so there is no aliasing. So I reuse a single object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_hslBuf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HslColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rgbToHslRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rgb&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="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="nx"&gt;_hslBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hDeg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;_hslBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;_hslBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;_hslBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;_hslBuf&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;This works only because the function is internal and I control all callers. I would not expose this pattern in a public API.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Avoid closure allocation by hoisting helpers to module level
&lt;/h2&gt;

&lt;p&gt;If a helper function is defined inside another function, V8 creates a new closure object on every call. Hoist it to module level and it is allocated once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// at module level, not inside hslToRgb&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_hueToRgb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;q&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&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;...&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Inline conversions to avoid intermediate object allocation
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rgbToOklch&lt;/code&gt; used to call &lt;code&gt;rgbToOklab&lt;/code&gt; and destructure the result. The intermediate &lt;code&gt;OklabColor&lt;/code&gt; object is pure overhead. Inlining the math saves one allocation per call.&lt;/p&gt;

&lt;p&gt;I usually hate duplicated code, but for short, well-tested math the allocation savings are real.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Provide *Into siblings for per-pixel work
&lt;/h2&gt;

&lt;p&gt;For 500×500 OKLCH gradient renders (250k pixels per frame), the natural API allocates 500k–1M short-lived 3-tuples per frame. Wall-clock cost is modest, but the GC pressure causes frame hitches during interactive drag.&lt;/p&gt;

&lt;p&gt;So every channel function has a sibling that writes into a caller-provided buffer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;oklabToLinearInto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Float64Array&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;
  &lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* writes out[0/1/2] */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On a 250k-pixel chained OKLCH→P3 bench, allocations drop from ~9 MB/iter to ~500 kB/iter. Wall-clock is only ~5% better, but interactive renders become visibly smoother.&lt;/p&gt;

&lt;p&gt;I rejected the alternative of a shared module-level buffer (slightly faster in micro-bench, around 10%) because it is non-reentrant and a sharp edge in a public API. &lt;code&gt;gl-matrix&lt;/code&gt; and &lt;code&gt;three.js&lt;/code&gt; use the out-param pattern for the same reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. DRY the data, not the structure
&lt;/h2&gt;

&lt;p&gt;Once I had both &lt;code&gt;oklabToLinear&lt;/code&gt; and &lt;code&gt;oklabToLinearInto&lt;/code&gt;, the obvious refactor was to make the allocating version delegate to the &lt;code&gt;*Into&lt;/code&gt; version. Looks great. Regressed the &lt;code&gt;*Into&lt;/code&gt; path by ~20%.&lt;/p&gt;

&lt;p&gt;The reason was V8 polymorphism. External callers pass a &lt;code&gt;Float64Array&lt;/code&gt;. The new wrapper passes a plain &lt;code&gt;[number, number, number]&lt;/code&gt;. The &lt;code&gt;*Into&lt;/code&gt; call site went from monomorphic to polymorphic, V8's speculative optimizations got disabled.&lt;/p&gt;

&lt;p&gt;The compromise: keep the math duplicated, but extract the matrix coefficients into module-level &lt;code&gt;const&lt;/code&gt;s.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;M1_LR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.4122214708&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;M1_LG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5363325363&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;M1_LB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0514459929&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ... 20+ named coefficients ...&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;linearSrgbToOklabInto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cbrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;M1_LR&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;lr&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;M1_LG&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;lg&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;M1_LB&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;lb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;linearSrgbToOklab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cbrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;M1_LR&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;lr&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;M1_LG&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;lg&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;M1_LB&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;lb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;V8 constant-folds module-level &lt;code&gt;const&lt;/code&gt;s, so there is no runtime cost vs inline literals. One source of truth for the data, two monomorphic call sites.&lt;/p&gt;

&lt;p&gt;The textbook DRY refactor was wrong here. Sometimes you DRY the data and duplicate the structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What didn't help
&lt;/h2&gt;

&lt;p&gt;Equally important: things that looked like they should help but didn't. Save yourself the time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A 256-entry LUT for &lt;code&gt;toLinear&lt;/code&gt;&lt;/strong&gt; was &lt;em&gt;slower&lt;/em&gt; on M4. The FP unit executes &lt;code&gt;Math.pow(x, 2.4)&lt;/code&gt; fast enough that array lookup overhead is not worth it. Result is architecture-specific.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manually inlining &lt;code&gt;toLinear&lt;/code&gt; inside &lt;code&gt;rgbToOklch&lt;/code&gt;&lt;/strong&gt; made things worse (~270 ns → ~530 ns). The function got too large for V8 to optimize the body as a single unit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inlining &lt;code&gt;normalizeHue&lt;/code&gt;&lt;/strong&gt; as an expression instead of a function call: also slower. V8 optimizes named function call sites independently.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The pattern: V8 is smarter than you about inlining small functions. Trust it until you have a profile that says otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons
&lt;/h2&gt;

&lt;p&gt;The biggest wins came from understanding V8's hidden class model, not from clever algorithms. Monomorphism is a feature you preserve, not a thing you add later.&lt;/p&gt;

&lt;p&gt;Allocations matter more than CPU time on hot paths in modern JavaScript. Wall-clock differences are often small, but GC pressure shows up as frame hitches and unpredictable latency.&lt;/p&gt;

&lt;p&gt;DRY is a tool, not a rule. V8 cares about call site shape consistency more than your engineering aesthetics.&lt;/p&gt;

&lt;p&gt;Always measure on the hardware you care about. The LUT result on M4 might be different on a Cortex-A53 phone or an older Intel laptop.&lt;/p&gt;

&lt;p&gt;If you want to play with the library, there is a playground at &lt;a href="https://colordx.dev" rel="noopener noreferrer"&gt;colordx.dev&lt;/a&gt;, and the source is at &lt;a href="https://github.com/dkryaklin/colordx" rel="noopener noreferrer"&gt;github.com/dkryaklin/colordx&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI Agent Orchestration &amp; Applied LLMs: Code Search, Workflow Optimization, Document Processing</title>
      <dc:creator>soy</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:36:33 +0000</pubDate>
      <link>https://golf.forem.com/soytuber/ai-agent-orchestration-applied-llms-code-search-workflow-optimization-document-processing-39ii</link>
      <guid>https://golf.forem.com/soytuber/ai-agent-orchestration-applied-llms-code-search-workflow-optimization-document-processing-39ii</guid>
      <description>&lt;h2&gt;
  
  
  AI Agent Orchestration &amp;amp; Applied LLMs: Code Search, Workflow Optimization, Document Processing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Today's Highlights
&lt;/h3&gt;

&lt;p&gt;Today's top stories highlight practical advancements in AI agent orchestration and applied LLM capabilities for real-world workflows. We feature innovations in efficient code search for Claude, strategic agent usage techniques, and multi-agent document processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  [Open Source] We built a local code search MCP for Claude Code that uses ~98% fewer tokens than grep+read (r/ClaudeAI)
&lt;/h2&gt;

&lt;p&gt;Source: &lt;a href="https://reddit.com/r/ClaudeAI/comments/1szvo7t/open_source_we_built_a_local_code_search_mcp_for/" rel="noopener noreferrer"&gt;https://reddit.com/r/ClaudeAI/comments/1szvo7t/open_source_we_built_a_local_code_search_mcp_for/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This open-source project introduces a "local code search MCP" (Multi-Context Pointer) designed to enhance interaction with large codebases using AI models like Claude Code. The primary motivation was to address the inefficiencies and high token consumption that arise when AI agents fall back to generic tools like &lt;code&gt;grep&lt;/code&gt; or reading entire files for code lookup. By implementing a specialized, context-aware search mechanism, the tool achieves significant token savings, reportedly reducing usage by approximately 98% compared to traditional methods. This optimization is crucial for managing costs and improving the speed of AI-assisted code generation and refactoring tasks, making LLMs more viable for complex development work.&lt;/p&gt;

&lt;p&gt;The solution provides a more intelligent way for AI to navigate and retrieve relevant code snippets without incurring excessive token costs. This approach demonstrates a practical application of AI frameworks to augment developer workflows, specifically in the domain of code understanding and generation. It represents a concrete step towards making large language models more efficient and cost-effective for complex software development tasks by integrating smart, context-aware search capabilities directly into the AI's operational loop.&lt;/p&gt;

&lt;p&gt;Comment: This is a game-changer for anyone doing serious code work with LLMs, directly tackling the context window and token cost limitations by making code search intelligent and efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to be better than 99% of Claude Code users while doing less, imo: (r/ClaudeAI)
&lt;/h2&gt;

&lt;p&gt;Source: &lt;a href="https://reddit.com/r/ClaudeAI/comments/1szn9b0/how_to_be_better_than_99_of_claude_code_users/" rel="noopener noreferrer"&gt;https://reddit.com/r/ClaudeAI/comments/1szn9b0/how_to_be_better_than_99_of_claude_code_users/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This discussion outlines a strategic approach to maximizing efficiency and quality when using AI agents like Claude Code, focusing on leveraging "success criteria" and "subagents" to achieve superior results with less effort. The core idea is to move beyond simple prompting by defining clear, measurable success criteria for each task, allowing the AI to self-evaluate and iterate more effectively. This methodology encourages users to think about the desired outcome in a structured way, guiding the AI to understand what constitutes a successful completion rather than just generating code, thereby reducing wasted iterations.&lt;/p&gt;

&lt;p&gt;Furthermore, the emphasis on using "subagents" intentionally points towards a sophisticated form of AI agent orchestration. By breaking down complex tasks into smaller, manageable sub-tasks handled by specialized (or contextually configured) subagents, the overall workflow becomes more robust and capable of tackling intricate problems. Incorporating "skills" and &lt;code&gt;.md&lt;/code&gt; documentation for repeatable processes further streamlines the interaction, transforming basic AI interaction into a systematic, agent-orchestrated process for enhanced code generation and development workflows.&lt;/p&gt;

&lt;p&gt;Comment: Defining clear success criteria and utilizing subagents for complex tasks is the secret sauce for effective AI-driven development and a core principle for building robust AI agent workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Absolutely blown away by the utility of the Claude Word add-in (r/ClaudeAI)
&lt;/h2&gt;

&lt;p&gt;Source: &lt;a href="https://reddit.com/r/ClaudeAI/comments/1szm5l3/absolutely_blown_away_by_the_utility_of_the/" rel="noopener noreferrer"&gt;https://reddit.com/r/ClaudeAI/comments/1szm5l3/absolutely_blown_away_by_the_utility_of_the/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This user testimonial highlights the transformative power of a Claude Word add-in for processing multiple, dense legal documents. The add-in facilitates sophisticated workflow automation by enabling "agents syncing, pushing and pulling information between them, pinging each other." This capability is particularly impactful in fields like legal analysis, where extracting, comparing, and synthesizing information across numerous lengthy documents is a common, time-consuming task. The described functionality goes beyond simple summarization, suggesting an intricate system of interconnected AI agents collaboratively working on document understanding and knowledge synthesis.&lt;/p&gt;

&lt;p&gt;This represents a practical application of AI agent orchestration and RPA (Robotic Process Automation) principles within a familiar office environment. By embedding AI agents directly into a document editor like Word, it provides a seamless interface for users to leverage advanced AI for complex document processing, search augmentation, and knowledge management. The ability for agents to "ping each other" implies an underlying multi-agent system coordinating to achieve a higher-level goal, demonstrating how AI frameworks can be applied to significantly enhance real-world, document-intensive workflows, potentially saving immense time and reducing manual errors in tasks involving large data volumes.&lt;/p&gt;

&lt;p&gt;Comment: This Word add-in illustrates excellent applied AI, showing how orchestrated agents can revolutionize document processing workflows, especially for complex tasks like legal analysis.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>automation</category>
    </item>
    <item>
      <title>GPU Hardware, VRAM Optimization &amp; Next-Gen Driver Updates</title>
      <dc:creator>soy</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:35:31 +0000</pubDate>
      <link>https://golf.forem.com/soytuber/gpu-hardware-vram-optimization-next-gen-driver-updates-455n</link>
      <guid>https://golf.forem.com/soytuber/gpu-hardware-vram-optimization-next-gen-driver-updates-455n</guid>
      <description>&lt;h2&gt;
  
  
  GPU Hardware, VRAM Optimization &amp;amp; Next-Gen Driver Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Today's Highlights
&lt;/h3&gt;

&lt;p&gt;This week features a deep dive into VRAM efficiency with a new Triton-based KV-cache compression engine, a look at DLSS 4.5 and Path Tracing's potential on the rumored RTX 5080, and a critical review of ASUS's 12VHPWR power delivery solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  [P] I built a Triton KV-cache compression engine: 3.37x compression, 0.69ms P99 on an A10 (r/CUDA)
&lt;/h2&gt;

&lt;p&gt;Source: &lt;a href="https://reddit.com/r/CUDA/comments/1szeh3m/p_i_built_a_triton_kvcache_compression_engine/" rel="noopener noreferrer"&gt;https://reddit.com/r/CUDA/comments/1szeh3m/p_i_built_a_triton_kvcache_compression_engine/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The developer, OmniStack-RS, has unveiled a novel KV-cache compression engine built on NVIDIA's Triton framework, specifically targeting LLM-style recommendation systems. This project aims to address the significant VRAM consumption of Key-Value (KV) caches, which are crucial for maintaining context in large language models. By implementing a compression scheme, the engine achieved an impressive 3.37x compression ratio for the KV-cache, directly translating to more efficient memory usage on the GPU.&lt;/p&gt;

&lt;p&gt;Benchmarking on an NVIDIA A10 GPU revealed a P99 latency of just 0.69ms for the compression operations. This indicates that the technique not only saves VRAM but does so with minimal performance overhead, making it practical for real-time inference scenarios. The use of Triton, a domain-specific language for writing highly efficient custom kernels, underscores the project's focus on low-level optimization and performance. This work is particularly relevant for deploying larger LLMs on GPUs with limited VRAM, or for enhancing throughput in data centers by allowing more concurrent users or larger context windows per GPU.&lt;/p&gt;

&lt;p&gt;Comment: This KV-cache compression technique is a game-changer for VRAM-starved LLM inference, particularly on consumer GPUs or older data center cards like the A10. It means we can run larger models or achieve longer context windows without breaking the bank on new hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dark Souls 2 Path Tracing and DLSS 4.5 - One of the Most Impressive Path Tracing Mods | RTX 5080 (r/nvidia)
&lt;/h2&gt;

&lt;p&gt;Source: &lt;a href="https://reddit.com/r/nvidia/comments/1szx733/dark_souls_2_path_tracing_and_dlss_45_one_of_the/" rel="noopener noreferrer"&gt;https://reddit.com/r/nvidia/comments/1szx733/dark_souls_2_path_tracing_and_dlss_45_one_of_the/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A new mod brings full Path Tracing to Dark Souls 2, showcasing remarkable visual fidelity enhancements for the classic title. This implementation demonstrates the growing capability of modern GPUs to render incredibly realistic lighting and reflections, transforming the game's aesthetic. The mod's impressive performance is reportedly achieved with the aid of NVIDIA's Deep Learning Super Sampling (DLSS) 4.5, a rumored upcoming version of their upscaling technology.&lt;/p&gt;

&lt;p&gt;The mention of "RTX 5080" suggests that this mod, or its implied performance benchmarks, are being tested or are highly performant on NVIDIA's next-generation GPU architecture. This points towards the anticipated performance uplift and new features that the RTX 50-series GPUs and their accompanying driver updates (like DLSS 4.5) will bring. For developers and enthusiasts, this highlights the continued advancement in real-time ray tracing and the crucial role of AI-powered upscaling in making such demanding graphics playable, hinting at what's possible with future GPU launches and driver optimizations.&lt;/p&gt;

&lt;p&gt;Comment: Seeing Path Tracing in an older title like Dark Souls 2, powered by rumored DLSS 4.5 and the RTX 5080, really pushes the boundaries of graphical immersion. It's exciting to anticipate how these advancements will impact future game development and what performance gains we can expect from upcoming NVIDIA hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  [Der8auer] ASUS Equalizer - The 12VHPWR Solution? (r/nvidia)
&lt;/h2&gt;

&lt;p&gt;Source: &lt;a href="https://www.youtube.com/watch?v=GNy_FBt-FZg" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=GNy_FBt-FZg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Renowned hardware overclocker Der8auer has conducted a thorough review of the ASUS Equalizer, a device purported to solve the controversial 12VHPWR connector issues prevalent in high-end NVIDIA GPUs. The 12VHPWR connector has been a source of concern due to reports of melting and poor contact, leading to calls for more robust power delivery solutions. ASUS's Equalizer was marketed as a potential remedy to distribute power more effectively across the connector's pins.&lt;/p&gt;

&lt;p&gt;However, Der8auer's technical analysis revealed that the ASUS Equalizer lacks active circuitry, meaning it's primarily a passive adapter. More critically, testing showed that the device performed worse than expected, failing to deliver on its promise to significantly improve power distribution or mitigate the risks associated with the 12VHPWR design. This finding is a crucial insight for anyone considering third-party solutions for GPU power delivery and underscores the complexities and challenges in designing reliable high-wattage connectors for modern graphics cards. It prompts users to remain cautious about solutions that don't fundamentally address the underlying mechanical or electrical design issues of the problematic connector.&lt;/p&gt;

&lt;p&gt;Comment: Der8auer's deep dive confirms what many suspected: the ASUS Equalizer isn't the magic 12VHPWR fix. It's a reminder that true power delivery solutions need more than passive components, emphasizing the need for robust GPU power and cooling designs from manufacturers.&lt;/p&gt;

</description>
      <category>gpu</category>
      <category>nvidia</category>
      <category>hardware</category>
    </item>
    <item>
      <title>When Monitoring Becomes “Wrong”: The Limits of Watching Only Ping and Disk in Zabbix</title>
      <dc:creator>Nicholas Broch</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:35:03 +0000</pubDate>
      <link>https://golf.forem.com/nicholas_broch_1deee468fe/when-monitoring-becomes-wrong-the-limits-of-watching-only-ping-and-disk-in-zabbix-13gi</link>
      <guid>https://golf.forem.com/nicholas_broch_1deee468fe/when-monitoring-becomes-wrong-the-limits-of-watching-only-ping-and-disk-in-zabbix-13gi</guid>
      <description>&lt;p&gt;Monitoring systems like Zabbix are often introduced with a clear promise: visibility, control, and early warning. In theory, if something starts to fail, you should see it before users notice. In practice, however, monitoring can quietly shift from being a tool for understanding systems to something that merely confirms they are still technically “alive.” This is where it starts to go wrong.&lt;/p&gt;

&lt;p&gt;A common pattern in many environments is to reduce monitoring down to a small set of indicators, often because of time constraints or lack of clarity about what actually matters. Ping checks and basic disk usage are typical examples. They are easy to set up, easy to understand, and they produce clean green or red states in a dashboard. A host is either reachable or it is not. A disk is either above a threshold or below it. On the surface, this looks like responsible system oversight.&lt;/p&gt;

&lt;p&gt;The problem is that these signals say very little about whether a system is actually healthy.&lt;/p&gt;

&lt;p&gt;A server can respond to ping perfectly while the application running on it is completely broken. Services can be degraded, queues can be backing up, authentication can be failing, and yet from a monitoring perspective everything appears fine. Ping only confirms network reachability, not usability. It is the equivalent of checking whether a building’s front door can open, without ever looking inside to see if anything is on fire.&lt;/p&gt;

&lt;p&gt;Disk usage has a similar limitation. Knowing that a disk is 70 percent full does not tell you whether performance is degrading, whether logs are spiraling out of control, or whether a sudden spike is about to cause a critical outage. More importantly, it does not reflect the actual user experience or business impact. A system can have “healthy” disk levels and still be functionally unusable due to database locks, slow queries, or application-level failures.&lt;/p&gt;

&lt;p&gt;The deeper issue is not the choice of metrics themselves, but the illusion of completeness they create. When monitoring is reduced to a handful of system-level checks, it becomes very easy to assume that “green” means “healthy.” This shifts attention away from what monitoring is supposed to achieve: understanding system behavior in a meaningful, contextual way.&lt;/p&gt;

&lt;p&gt;Zabbix, like many monitoring tools, is not the problem. It is capable of deep observability if it is used that way. The issue lies in how it is often configured to reflect infrastructure states rather than service states. Infrastructure tells you what is happening at the machine level. Services tell you what is happening for users. The gap between those two is where incidents hide.&lt;/p&gt;

&lt;p&gt;A more mature approach to monitoring focuses less on whether individual components are responding and more on whether the system as a whole is delivering its intended outcome. That means looking at request success rates instead of just server availability, latency instead of just CPU load, and error rates instead of just disk space. It means treating infrastructure metrics as supporting evidence rather than the main story.&lt;/p&gt;

&lt;p&gt;When monitoring is limited to ping and disk, it becomes reactive and shallow. It can tell you that something has already failed, but rarely why it is about to fail or how it affects real usage. Over time, teams begin to trust dashboards that are technically correct but operationally misleading.&lt;/p&gt;

&lt;p&gt;Good monitoring should introduce doubt, not false certainty. It should make it harder to assume everything is fine when it is not. And it should reflect the system as users experience it, not just as machines report it.&lt;/p&gt;

&lt;p&gt;In that sense, monitoring does not become “wrong” because it is inaccurate. It becomes wrong when it is too narrow to tell the truth that actually matters.&lt;/p&gt;

</description>
      <category>zabbix</category>
      <category>monitoring</category>
      <category>devops</category>
      <category>observability</category>
    </item>
    <item>
      <title>Cursor 3 shipped parallel agents and the community can't agree on whether that's good</title>
      <dc:creator>1p</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:33:59 +0000</pubDate>
      <link>https://golf.forem.com/onepizzateam/cursor-3-shipped-parallel-agents-and-the-community-cant-agree-on-whether-thats-good-1p3n</link>
      <guid>https://golf.forem.com/onepizzateam/cursor-3-shipped-parallel-agents-and-the-community-cant-agree-on-whether-thats-good-1p3n</guid>
      <description>&lt;p&gt;Cursor rebuilt from scratch around managing fleets of AI agents instead of writing code. The demos look very convincing. The HN thread is a mess. And someone spent $2,000 in two days. Here's what actually matters.&lt;/p&gt;

&lt;p&gt;Quick context if you haven't been following the AI tooling space: Cursor is the VS Code fork built by Anysphere that became the de facto AI coding tool for a huge chunk of the dev community, hit $2B ARR earlier this year, and raised over $3 billion from NVIDIA, Google, and others. It's the tool people recommend when someone asks "should I just use Copilot."&lt;/p&gt;

&lt;p&gt;On April 2, 2026 they shipped &lt;strong&gt;Cursor 3&lt;/strong&gt;, internally codenamed Glass. It's not a point release. They rebuilt the interface from scratch.&lt;/p&gt;

&lt;p&gt;The pitch: you are the architect, agents are the builders. The IDE is still there, but the default experience is now managing a fleet.&lt;/p&gt;

&lt;p&gt;Thirty minutes after the announcement hit Hacker News, the top comment wasn't about a feature.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually shipped
&lt;/h2&gt;

&lt;p&gt;The headline change is the &lt;strong&gt;Agents Window&lt;/strong&gt; -- a full-screen workspace running alongside the IDE where you manage multiple AI agents in parallel. Previously: one chat, one agent, one task at a time. Now you can run as many as you want across different repos, local machines, worktrees, SSH environments, and cloud VMs from one place.&lt;/p&gt;

&lt;p&gt;A few things worth knowing about specifically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud agent handoff&lt;/strong&gt; is the feature that makes the rest of it real. Start a session locally, hand it to a cloud VM, close your laptop, come back to a finished PR. This is the part that shifts "AI coding assistant" into something closer to "asynchronous engineering team." Whether that's what you want is a different question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Composer 2&lt;/strong&gt; is Cursor's in-house coding model -- runs locally, no per-use cloud charges, higher usage limits. There's a story here about how they disclosed it (or didn't) that we'll get to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/multitask&lt;/strong&gt;, shipped in 3.2 on April 24, breaks a large task into chunks and fires them at a fleet of subagents simultaneously. Cross-repo too. This is where the "agent execution runtime" framing starts to feel accurate rather than just aspirational -- and where Cursor starts looking less like an IDE and more like a CI/CD layer you interact with conversationally.&lt;/p&gt;

&lt;p&gt;The MCP Marketplace rounds it out. Cursor is quietly becoming a platform. That matters for lock-in reasons as much as feature reasons.&lt;/p&gt;




&lt;h2&gt;
  
  
  The philosophy shift, and why half the community isn't happy about it
&lt;/h2&gt;

&lt;p&gt;Cursor's co-founders framed this release around "three eras of software development." Era one: you edit files manually. Era two: agents write most of the code while you direct. Era three: fleets of agents ship improvements autonomously while you review.&lt;/p&gt;

&lt;p&gt;They're betting we're in era two right now, and building toward three. The interface reflects that.&lt;/p&gt;

&lt;p&gt;The top HN comment the day it launched:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I wish they'd keep the old philosophy of letting the developer drive and the agent assist. I still want to code, not vibe my way through tickets."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A Cursor engineer responded within minutes -- the IDE still exists, the Agents Window is a separate surface, you can have both open simultaneously or ignore agents entirely. Both things are true. But they're not actually disagreeing about features, they're disagreeing about what the job is supposed to be.&lt;/p&gt;

&lt;p&gt;That disconnect is the real story here. Not what features shipped, but what Anysphere believes about where software development is heading, and whether developers agree with that framing. A lot of people who use Cursor are there precisely because they want to stay close to the code. The agent-first pitch reads to them as the tool choosing a direction they didn't ask for.&lt;/p&gt;

&lt;p&gt;And they're not wrong to push back -- because what Cursor 3 is really proposing isn't more automation on top of your existing job. It's a different job. Writing code and managing outputs from multiple semi-autonomous systems running in parallel are not the same skill. They use different mental models, different review instincts, different debugging approaches. One is authorship. The other is closer to code review at scale with partial information and no single source of truth.&lt;/p&gt;

&lt;p&gt;"Orchestrating a fleet" is not a more productive version of "writing systems software." It's a different mode of working. Cursor 3 has a strong opinion on which mode matters more. You might not share it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Composer 2 situation
&lt;/h2&gt;

&lt;p&gt;Cursor didn't disclose what model Composer 2 is built on in their initial announcement. An external developer spotted the identifier &lt;code&gt;kimi-k2p5-rl-0317-s515-fast&lt;/code&gt; in system responses and traced it back to Kimi K2.5 from Moonshot AI.&lt;/p&gt;

&lt;p&gt;Co-founder Aman Sanger called the omission "a miss" and said they'd disclose the base model upfront for future releases. Moonshot AI confirmed it was an authorized commercial partnership through Fireworks AI. About 75% of Composer 2's total compute came from Cursor's own continued pre-training and reinforcement learning on top of the base -- so it's not just a reskin. But the lack of upfront disclosure did not go over great.&lt;/p&gt;

&lt;p&gt;On benchmarks: Composer 2 scores 61.7 on Terminal-Bench 2.0 vs Opus 4.6's 58.0. GPT-5.4 sits at 75.1. Google's Antigravity scores 76.2 on SWE-bench Verified. Cursor is competitive but not leading -- which matters more now that they have an in-house model to defend.&lt;/p&gt;

&lt;p&gt;The upside is real though. Local execution, no per-use cloud charges, higher usage limits than routing everything to frontier models. For people who were burning through Claude credits in Cursor, it's a meaningful cost relief for standard tasks.&lt;/p&gt;




&lt;h2&gt;
  
  
  The cost thing is not a footnote
&lt;/h2&gt;

&lt;p&gt;This is the part most people are going to ignore until they get billed.&lt;/p&gt;

&lt;p&gt;Cursor's pricing page lists four tiers: Free, Pro at $20/month, Pro+ at $60, Ultra at $200. Those numbers look fine. The issue is that cloud agents aren't metered the way the pricing page implies.&lt;/p&gt;

&lt;p&gt;Early adopters on Hacker News reported spending $2,000+ running cloud agents. Not $2,000/month. &lt;strong&gt;Two days.&lt;/strong&gt; One user switched from $1,800/month on Cursor to roughly $200/month on Claude Code, calling it "WAY better value for money." Another reported "$2k a week with premium models" before switching.&lt;/p&gt;

&lt;p&gt;The per-minute VM charges for cloud execution are not disclosed on the pricing page. You find out when the bill arrives.&lt;/p&gt;

&lt;p&gt;Compare: Claude Code Max runs at a flat $100-200/month with parallel execution via worktrees. If you're doing heavy agentic work, the math is not subtle.&lt;/p&gt;

&lt;p&gt;Local agents via Composer 2 have no per-use charges -- that's the intended use case for standard tasks. Cloud agents are where the real power is (overnight runs, mobile-triggered tasks, multi-repo parallelism) and that's also where the costs are opaque. Track your spend for a full week before assuming the listed tier is what you'll actually pay.&lt;/p&gt;

&lt;p&gt;The feature is real. The value is real for the right workload. But the pricing model is designed around the demos, not around what happens when you actually run it for a week.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it sits in the landscape
&lt;/h2&gt;

&lt;p&gt;The AI IDE space consolidated fast this year. Three distinct philosophies, worth knowing the difference:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor 3&lt;/strong&gt; -- IDE-native, GUI-first, now agent-first. If you want visual tooling, parallel agents with a management UI, and the ability to annotate a browser and tell an agent to fix that exact thing, Cursor is where that workflow is most mature. Cost: $20/month listed, variable in practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; -- terminal-native, stays out of your way. No GUI, runs in your existing terminal, integrates with whatever editor you already use. Still ahead on fully autonomous agentic work for people who don't want an IDE wrapper around everything. Flat $100-200/month at Max tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Antigravity&lt;/strong&gt; -- the wildcard. Built from scratch (not a VS Code fork) by the team Google acquired for $2.4B, shipped free in November 2025, 76.2% on SWE-bench Verified which is one of the highest published numbers for a coding agent right now. Free. Worth a weekend if you haven't looked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ForgeCode&lt;/strong&gt; -- open source, terminal-based, bring your own API keys, topped Terminal-Bench 2.0 at 81.8%. Their blog post about hitting number one is titled "benchmarks don't matter," which is either a good sign or a bad sign depending on your priors. Worth a weekend too.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this actually means
&lt;/h2&gt;

&lt;p&gt;The "you're the architect, agents are the builders" framing is going to keep coming up. Cursor 3 is the most explicit statement of that direction from a major tool yet, but it's not the only one heading there. Antigravity, Claude Code, Codex -- they're all converging on the same mental model.&lt;/p&gt;

&lt;p&gt;The question worth sitting with if you build systems software, CLI tools, or anything requiring you to stay close to the metal: does agent orchestration actually help that workflow, or does it mostly help the "generate a CRUD app from a prompt" workflow and kind of work for everything else as a side effect?&lt;/p&gt;

&lt;p&gt;My honest read: parallel agents are genuinely useful for tasks with clear boundaries and independent surface area. Spin up three agents on three separate features, review the PRs, merge what works. That's real. For deep systems work where the whole point is that you're carefully reasoning through one gnarly problem -- handing that to a fleet isn't faster, it's noisier. You spend the time you saved writing code on reviewing agent output that's plausible-looking but wrong in ways that only show up later.&lt;/p&gt;

&lt;p&gt;It'll get there. The benchmarks are moving fast enough that "this doesn't work for systems work" is probably a 2026 statement, not a permanent one. But right now, parallel agents are mostly useful for bounded tasks where correctness is verifiable and the problem decomposes cleanly. That's a real category of work. It's just not all the work.&lt;/p&gt;

&lt;p&gt;The more interesting shift is the one underneath all of this. Cursor 3 isn't really about parallel agents as a feature. It's about what the tooling assumes the job looks like. And if the tools all converge on "you manage agents, you don't write code," the developers who push back aren't being resistant to change -- they're noticing that nobody asked whether that's actually the job they signed up for.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to dig in
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Cmd+Shift+P -&amp;gt; Agents Window&lt;/code&gt; -- try the parallel agents UI in Cursor 3&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cursor.com/changelog" rel="noopener noreferrer"&gt;cursor.com/changelog&lt;/a&gt; -- they ship fast, worth following&lt;/li&gt;
&lt;li&gt;ForgeCode on GitHub -- bring-your-own-keys, open source, worth a look if you're skeptical of the closed tooling direction&lt;/li&gt;
&lt;li&gt;Google Antigravity -- free, agent-first, no VS Code fork baggage&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;What's your current setup? Cursor, Claude Code, something else entirely? And if you've actually run parallel agents in production -- how'd the costs shake out? Drop it in the comments, genuinely curious where people land on this.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>discuss</category>
      <category>news</category>
    </item>
    <item>
      <title>Zero-config Golang Heap Profiling</title>
      <dc:creator>Coroot</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:28:59 +0000</pubDate>
      <link>https://golf.forem.com/coroot/zero-config-golang-heap-profiling-33fi</link>
      <guid>https://golf.forem.com/coroot/zero-config-golang-heap-profiling-33fi</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/coroot/coroot" rel="noopener noreferrer"&gt;Coroot&lt;/a&gt; is an Apache 2.0 open source platform that simplifies observability with no-code configuration. The &lt;a href="https://github.com/coroot/coroot-node-agent" rel="noopener noreferrer"&gt;Coroot node-agent&lt;/a&gt; already collects CPU profiles for any process on the node &lt;a href="https://coroot.com/blog/troubleshooting-java-applications-with-coroot" rel="noopener noreferrer"&gt;using eBPF&lt;/a&gt;, with zero integration from the application side. For Java, we &lt;a href="https://coroot.com/blog/java-profiling-with-async-profiler" rel="noopener noreferrer"&gt;dynamically inject&lt;/a&gt; async-profiler into the JVM to get memory and lock profiles. But Go processes were still a blind spot for non-CPU profiling unless the app exposed a pprof endpoint and the cluster-agent scraped it.&lt;/p&gt;

&lt;p&gt;We wanted the same zero-config experience for Go heap profiles. This post is about how we got there.&lt;/p&gt;

&lt;h1&gt;
  
  
  The runtime already profiles
&lt;/h1&gt;

&lt;p&gt;Go's runtime has a built-in memory profiler. On every allocation, the runtime samples with probability &lt;code&gt;size / MemProfileRate&lt;/code&gt; and records the call stack. The default rate is &lt;code&gt;512 * 1024&lt;/code&gt;, or about 1 sample per 512KB allocated. Samples are aggregated into a linked list of "buckets", where each bucket represents a unique (stack trace, size class) combination and accumulates four counters: total allocations, total frees, bytes allocated, bytes freed.&lt;/p&gt;

&lt;p&gt;This is what &lt;code&gt;runtime.MemProfile()&lt;/code&gt; returns and what &lt;code&gt;go tool pprof http://.../debug/pprof/heap&lt;/code&gt; renders. The overhead is negligible and it's been production-grade since forever.&lt;/p&gt;

&lt;p&gt;There's one catch. The Go linker has an optimization: if no code in the binary references &lt;code&gt;runtime.MemProfile&lt;/code&gt;, it sets an internal &lt;code&gt;disableMemoryProfiling&lt;/code&gt; flag, and the runtime sets &lt;code&gt;MemProfileRate = 0&lt;/code&gt; on init. No samples, no buckets, nothing to read. A binary that doesn't import &lt;code&gt;runtime/pprof&lt;/code&gt; or &lt;code&gt;net/http/pprof&lt;/code&gt; (directly or transitively) has no heap profile available, even though the runtime fully supports it. We'll come back to this.&lt;/p&gt;

&lt;p&gt;This list is what &lt;code&gt;runtime.MemProfile()&lt;/code&gt; walks when &lt;code&gt;pprof&lt;/code&gt; asks for a heap profile. It's literally the global variable &lt;code&gt;runtime.mbuckets&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// runtime/mprof.go&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;mbuckets&lt;/span&gt; &lt;span class="n"&gt;atomic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UnsafePointer&lt;/span&gt; &lt;span class="c"&gt;// *bucket, memory profile buckets&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the data is already there, being collected continuously, for free. The only question is how to read it from outside the process.&lt;/p&gt;

&lt;h1&gt;
  
  
  Reading process memory from outside
&lt;/h1&gt;

&lt;p&gt;Linux exposes every process's virtual address space via &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/mem.&lt;/code&gt; With the right permissions (our node-agent already has &lt;code&gt;CAP_SYS_PTRACE&lt;/code&gt;), you can &lt;code&gt;pread()&lt;/code&gt; arbitrary addresses. It's read-only, it doesn't suspend the process, the target doesn't even know you're there.&lt;/p&gt;

&lt;p&gt;The plan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Find the virtual address of &lt;code&gt;runtime.mbuckets&lt;/code&gt; in the Go binary's symbol table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Read the pointer value at that address from &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/mem.&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Walk the linked list, reading each bucket's header, stack PCs, and memRecord.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Convert to pprof format and upload.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Finding runtime.mbuckets without loading the symbol table
&lt;/h1&gt;

&lt;p&gt;The first gotcha: Go binaries embed their own symbol table (pclntab) for runtime use, but &lt;code&gt;runtime.mbuckets&lt;/code&gt; is not a function. It's a variable, which lives in the &lt;code&gt;ELF .symtab&lt;/code&gt; section. On a stripped binary (&lt;code&gt;go build -ldflags="-s"&lt;/code&gt;), there's no &lt;code&gt;.symtab&lt;/code&gt; and we can't find the symbol. We skip those.&lt;/p&gt;

&lt;p&gt;On an unstripped binary, &lt;code&gt;.symtab&lt;/code&gt; can be huge. For &lt;code&gt;k3s&lt;/code&gt;, it's ~11MB. Using &lt;code&gt;debug/elf.File.Symbols()&lt;/code&gt; loads all of it into memory at once. For a node-agent that profiles dozens of Go processes, that's not OK.&lt;/p&gt;

&lt;p&gt;So we wrote a streaming scan that reads one &lt;code&gt;Elf64_Sym&lt;/code&gt; entry at a time and reads only the bytes we need from the string table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;findSymbolValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ef&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;elf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sectionName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;symName&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;section&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Section&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sectionName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;strtab&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sections&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;symReader&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// Elf64_Sym&lt;/span&gt;
    &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;nameBuf&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;symReader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;nameIdx&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ByteOrder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Uint32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ef&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ByteOrder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Uint64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

        &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;strtab&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ReadAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nameBuf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nameIdx&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;nameBuf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nameBuf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;symName&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Errorf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s not found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;symName&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;Peak memory: a 24-byte buffer plus a 17-byte buffer (&lt;code&gt;len("runtime.mbuckets")+1&lt;/code&gt;), regardless of binary size.&lt;/p&gt;

&lt;p&gt;Before doing this expensive scan we also check if the binary is Go at all via the &lt;code&gt;.go.buildinfo&lt;/code&gt; section: one section header lookup, zero allocations.&lt;/p&gt;

&lt;h1&gt;
  
  
  The bucket layout, and two traps
&lt;/h1&gt;

&lt;p&gt;The bucket struct itself is just a 48-byte header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_&lt;/span&gt;       &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NotInHeap&lt;/span&gt;
    &lt;span class="n"&gt;next&lt;/span&gt;    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;
    &lt;span class="n"&gt;allnext&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;
    &lt;span class="n"&gt;typ&lt;/span&gt;     &lt;span class="n"&gt;bucketType&lt;/span&gt;
    &lt;span class="n"&gt;hash&lt;/span&gt;    &lt;span class="kt"&gt;uintptr&lt;/span&gt;
    &lt;span class="n"&gt;size&lt;/span&gt;    &lt;span class="kt"&gt;uintptr&lt;/span&gt;
    &lt;span class="n"&gt;nstk&lt;/span&gt;    &lt;span class="kt"&gt;uintptr&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the runtime allocates extra space after it and stores two more things in the same contiguous region: the stack trace (nstk program counter addresses, 8 bytes each) and a memRecord struct holding the alloc/free counters.&lt;/p&gt;

&lt;p&gt;So from our point of view, each bucket is a variable-sized blob: &lt;code&gt;48 bytes header + nstk*8 bytes of PCs + 128&lt;/code&gt; bytes of &lt;code&gt;memRecord.&lt;/code&gt; We read the header first to get &lt;code&gt;nstk&lt;/code&gt;, then the rest.&lt;/p&gt;

&lt;p&gt;Two traps we fell into:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trap 1:&lt;/strong&gt; the first field, &lt;code&gt;_ sys.NotInHeap&lt;/code&gt;, looks like 8 bytes of padding. It's zero bytes. Sizing the header at 56 bytes gave us nicely parsed garbage: valid-looking pointers that turned out to be hash values, and typ values in the quintillions. Go 1.17 through 1.19 used a &lt;code&gt;//go:notinheap&lt;/code&gt; comment directive instead; Go 1.20 switched to the &lt;a href="https://github.com/golang/go/commit/a719a78c1b36141af68d84970695fe95263fb896" rel="noopener noreferrer"&gt;typed marker&lt;/a&gt;, but the binary layout didn't change. The real header is 48 bytes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trap 2:&lt;/strong&gt; there are two pointer fields, &lt;code&gt;next&lt;/code&gt; and &lt;code&gt;allnext.&lt;/code&gt; They are not the same list. next is the hash table chain within a size class. allnext is the global list of all memProfile buckets. We want &lt;code&gt;allnext.&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The delta problem
&lt;/h1&gt;

&lt;p&gt;The counters in &lt;code&gt;memRecord&lt;/code&gt; are cumulative: they grow monotonically over the lifetime of the process. If we want an allocation rate, we need to compute the delta between two collection cycles.&lt;/p&gt;

&lt;p&gt;We keep a map per PID of &lt;code&gt;bucket address -&amp;gt; previous counters&lt;/code&gt; and subtract on each cycle to get the delta. We key by bucket address rather than stack hash: the Go runtime never frees mprof buckets, so the address is a stable unique identifier, and it's a single &lt;code&gt;uint64&lt;/code&gt; instead of a variable-length string, which avoids a huge amount of allocation churn in the hot path.&lt;/p&gt;

&lt;h1&gt;
  
  
  Too many syscalls
&lt;/h1&gt;

&lt;p&gt;Early profiles showed our collector spending 30-40% of its CPU in &lt;code&gt;syscall.Pread&lt;/code&gt;. Each bucket needs at least 2 reads: one for the header (to get &lt;code&gt;nstk&lt;/code&gt;), then one for the variable-length &lt;code&gt;stk[nstk] | memRecord&lt;/code&gt; block. With 1000+ buckets per process and a dozen Go processes on a node, that's thousands of syscalls per minute.&lt;/p&gt;

&lt;p&gt;We tried a read-ahead cache: on a miss, pull 256KB centered around the requested address. The idea was that Go's &lt;code&gt;persistentalloc&lt;/code&gt; places buckets in large arenas, so consecutive buckets in the &lt;code&gt;allnext&lt;/code&gt; chain might be physically close.&lt;/p&gt;

&lt;p&gt;We instrumented jump distances between consecutive buckets for one process with 1230 buckets. 40% of jumps are &amp;gt;16MB. Buckets are scattered across the entire process address space, not clustered. &lt;/p&gt;

&lt;p&gt;A 256KB cache hits ~20% of the time: better than nothing, but the best we could do without multi-MB buffers that cost more than they save.&lt;/p&gt;

&lt;h1&gt;
  
  
  The linker-disabled profiling problem
&lt;/h1&gt;

&lt;p&gt;After deploying, we saw some Go processes return an empty bucket list (&lt;code&gt;runtime.mbuckets pointer was 0x0&lt;/code&gt;) even though they were clearly allocating memory (tens of MB RSS, actively running).&lt;/p&gt;

&lt;p&gt;Turns out the Go linker has an optimization: if no code in the binary references &lt;code&gt;runtime.MemProfile&lt;/code&gt;, it sets a &lt;code&gt;disableMemoryProfiling&lt;/code&gt; flag, and the runtime sets &lt;code&gt;MemProfileRate = 0&lt;/code&gt; on init. No &lt;code&gt;profilealloc()&lt;/code&gt; calls, no buckets ever created.&lt;/p&gt;

&lt;p&gt;This hits any Go binary that doesn't import &lt;code&gt;runtime/pprof&lt;/code&gt; or &lt;code&gt;net/http/pprof&lt;/code&gt;, directly or transitively. In our case it was a small load generator: no pprof, no HTTP server, no dependencies that would drag pprof in. The profile endpoint the runtime would serve is dead code, so the linker dropped it.&lt;/p&gt;

&lt;p&gt;The fix: we can write to &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/mem&lt;/code&gt; too. If we detect &lt;code&gt;MemProfileRate == 0&lt;/code&gt;, we write 524288 (the default) back to the &lt;code&gt;runtime.MemProfileRate&lt;/code&gt; address. The runtime checks this variable on every allocation, so the change takes effect immediately: no restart, no signal, nothing. Just a single atomic 8-byte write to a known address in the data segment.&lt;/p&gt;

&lt;p&gt;This is gated behind a &lt;code&gt;--go-heap-profiler=force&lt;/code&gt; flag for users who want the "always on" behavior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;--&lt;span class="n"&gt;go&lt;/span&gt;-&lt;span class="n"&gt;heap&lt;/span&gt;-&lt;span class="n"&gt;profiler&lt;/span&gt;=&lt;span class="n"&gt;disabled&lt;/span&gt;  &lt;span class="c"&gt;# off
&lt;/span&gt;--&lt;span class="n"&gt;go&lt;/span&gt;-&lt;span class="n"&gt;heap&lt;/span&gt;-&lt;span class="n"&gt;profiler&lt;/span&gt;=&lt;span class="n"&gt;enabled&lt;/span&gt;   &lt;span class="c"&gt;# default, passive only
&lt;/span&gt;--&lt;span class="n"&gt;go&lt;/span&gt;-&lt;span class="n"&gt;heap&lt;/span&gt;-&lt;span class="n"&gt;profiler&lt;/span&gt;=&lt;span class="n"&gt;force&lt;/span&gt;     &lt;span class="c"&gt;# write MemProfileRate if zero
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The overhead of re-enabling profiling is whatever the Go default overhead is: ~1 sample per 512KB. For any workload where this matters, you'd want it on anyway.&lt;/p&gt;

&lt;h1&gt;
  
  
  Allocation rate metrics
&lt;/h1&gt;

&lt;p&gt;Since we already compute per-bucket alloc deltas, exposing total allocation rate as Prometheus counters is free:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight prometheus"&gt;&lt;code&gt;&lt;span class="n"&gt;container_go_alloc_bytes_total&lt;/span&gt;    &lt;span class="c"&gt;# total bytes allocated&lt;/span&gt;
&lt;span class="n"&gt;container_go_alloc_objects_total&lt;/span&gt;  &lt;span class="c"&gt;# total objects allocated&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Summed across all buckets in the process. Coroot uses them to draw the allocation rate chart alongside the flamegraph.&lt;/p&gt;

&lt;h1&gt;
  
  
  Limitations
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stripped binaries are skipped.&lt;/strong&gt; No &lt;code&gt;.symtab&lt;/code&gt;, no &lt;code&gt;runtime.mbuckets&lt;/code&gt; address, nothing we can do externally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The&lt;/strong&gt; &lt;code&gt;active&lt;/code&gt; &lt;strong&gt;cycle updates on GC&lt;/strong&gt;. Between GCs, new allocations go into &lt;code&gt;future[0..2]&lt;/code&gt; and we don't see them. Same limitation as &lt;code&gt;runtime.MemProfile().&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Go-internal struct layout.&lt;/strong&gt; If the bucket struct changes in a future Go release, we'll need to update. The layout has been stable since Go 1.17, but there's no API guarantee.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Goroutine, block, and mutex profiles are not yet exposed.&lt;/strong&gt; Block and mutex use the same infrastructure (&lt;code&gt;bbuckets, xbuckets&lt;/code&gt;), but both are disabled by default and have real overhead if enabled (checks on every mutex/channel op), so we're not force-enabling them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  In Coroot
&lt;/h1&gt;

&lt;p&gt;Profiles are already in the Coroot UI. Every memory chart has a link to the heap flamegraph for that service, so you can jump from "memory is climbing" to "here's the call stack eating it" in one click.&lt;/p&gt;

&lt;p&gt;What's new is that profiles are now plugged into RCA. If Coroot sees a service's CPU or memory go up at the same time as an issue, it pulls up the profile and compares two windows: the one during the issue, and a healthy one from just before. The flamegraph you see in the RCA is a diff, not a snapshot. Functions that got hotter pop out, the rest fade away.&lt;/p&gt;

&lt;p&gt;So now RCA can give you a different kind of answer. Instead of "p95 is up, allocations are up", you get "this function is allocating twice as much as it was before the deploy." The metric tells you something is off. The diff tells you which code is off.&lt;/p&gt;

&lt;h1&gt;
  
  
  Chaos experiments
&lt;/h1&gt;

&lt;p&gt;To see this in action, we set up a small demo and broke it on purpose. There's a &lt;code&gt;product-catalog&lt;/code&gt; service backed by Postgres, sitting behind an &lt;code&gt;api-gateway&lt;/code&gt;. We bolted a chaos middleware onto &lt;code&gt;product-catalog&lt;/code&gt; so we can flip on different kinds of bad behavior with a single API call, then we watched what showed up in Coroot.&lt;/p&gt;

&lt;h1&gt;
  
  
  GC pressure
&lt;/h1&gt;

&lt;p&gt;For the first experiment, we flipped on the &lt;code&gt;gc_pressure&lt;/code&gt; switch. That sends every request through a function called &lt;code&gt;inefficientEnrichProducts&lt;/code&gt;, which is exactly as bad as the name suggests. For each of 30 fake products in the request, it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Marshals and unmarshals the product 10 times in a row.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Builds a "search index" by lowercasing, uppercasing and title-casing every word and generating every 2 to 4 character n-grams.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Builds 20 nested "related products" maps, each with three sub-maps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Marshals and unmarshals the whole result one more time "for caching".&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's about 2 MB of throwaway memory per request. The service still answers, but the garbage collector barely gets a break.&lt;/p&gt;

&lt;p&gt;The pain shows up one hop away. &lt;code&gt;api-gateway&lt;/code&gt; talks to &lt;code&gt;product-catalog&lt;/code&gt; on every page render, so as soon as the switch flips, its p95 latency jumps from 0.16s to 3.76s:&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%2F8vpqca44lsscosvrg642.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%2F8vpqca44lsscosvrg642.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coroot's RCA traces the spike back to product-catalog and pulls up its CPU profile:&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%2Faq09huibv95z56812b4e.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%2Faq09huibv95z56812b4e.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at the right side of the flamegraph. There's a fat column of &lt;code&gt;runtime.gcBgMarkWorker&lt;/code&gt;, &lt;code&gt;runtime.systemstack&lt;/code&gt;, &lt;code&gt;runtime.scanobject&lt;/code&gt;, &lt;code&gt;runtime.gcDrain&lt;/code&gt;. The garbage collector is burning real CPU. That's a clear sign the runtime is under allocation pressure, but the CPU profile can't tell you which line of your code is responsible for it.&lt;/p&gt;

&lt;p&gt;The heap profile can:&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%2Flxzwv0fpluxcu23b4d4z.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%2Flxzwv0fpluxcu23b4d4z.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There it is. &lt;code&gt;main.inefficientEnrichProducts&lt;/code&gt; sits at the top of &lt;code&gt;alloc_space&lt;/code&gt;, with the JSON encoders, map growth, and &lt;code&gt;bytes.Buffer&lt;/code&gt; operations stacked underneath. That's the exact set of things the function does inside its loop. Same function the CPU profile already flagged, but now you can see directly that it's the one driving the GC.&lt;/p&gt;

&lt;p&gt;Without the heap profile, you'd see the GC running hot and the JSON encoder eating CPU, and you'd still have to guess which call site to fix. With it, the guess is gone. Cache the marshalled output, drop the redundant rounds, or both, and the alloc band and the GC band shrink together on the next collection.&lt;/p&gt;

&lt;h1&gt;
  
  
  Memory leak
&lt;/h1&gt;

&lt;p&gt;For the second experiment, we flipped the &lt;code&gt;memory_leak&lt;/code&gt; switch. Now every request calls &lt;code&gt;appendToProductCache&lt;/code&gt;, which builds a small chunk of pointer-heavy data (a product map, a search index of fifty terms, cross-references to recent entries) and appends it to a global slice. Nothing ever evicts. The cache grows about 200 KB per request, forever.&lt;/p&gt;

&lt;p&gt;The symptom is the obvious one. &lt;code&gt;product-catalog&lt;/code&gt; memory just keeps climbing. After a few minutes, both replicas are growing at over 640% per hour and on track to OOM-kill themselves.&lt;/p&gt;

&lt;p&gt;What's interesting is what RCA does next. It pulls up the heap profile for the anomaly window and compares it against a healthy window from before the leak started:&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%2F4qqd9ovjc68t5xzc6ovl.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%2F4qqd9ovjc68t5xzc6ovl.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The diff narrows it down to a single function. &lt;code&gt;main.appendToProductCache&lt;/code&gt; accounts for 99.6% of the in-use memory that wasn't there before, and the full call path from the HTTP entrypoint down to it sits right above the flamegraph. There's almost nothing left to investigate.&lt;/p&gt;

&lt;p&gt;A plain heap snapshot would have shown &lt;code&gt;appendToProductCache&lt;/code&gt; near the top too, but mixed in with everything else the service legitimately allocates. The diff drops the noise and keeps only what changed, which is exactly what you want when you're chasing a leak that started somewhere in the last hour.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Heap profiles for your Go services no longer require pprof endpoints, scraping configuration, or a deploy. Coroot picks them up automatically from whatever is already running on your nodes, with no code changes, no annotations, and no restart.&lt;/p&gt;

&lt;p&gt;The payoff shows up in incidents. A memory leak comes down to one function in a diff'd flamegraph. GC pressure stops being a vague "the runtime is busy" and becomes a specific call site. And you get this code-level accuracy without needing access to the code itself, which matters for SRE and platform teams running services they didn't write. Because the profiles sit right next to the metrics and the RCA that surfaced the issue, you go from "something is wrong" to "here is what to fix" without ever leaving the page.&lt;/p&gt;

&lt;p&gt;Want to try Zero-config Go heap profiling on your setup, completely open source? Visit out our&lt;a href="https://github.com/coroot/coroot-node-agent" rel="noopener noreferrer"&gt; Github&lt;/a&gt; to quickly get set up.&lt;/p&gt;

</description>
      <category>go</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>observability</category>
    </item>
    <item>
      <title>React + fetchstream-js: Render JSON as It Arrives</title>
      <dc:creator>CODING IN BLOOD</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:26:25 +0000</pubDate>
      <link>https://golf.forem.com/coding_inblood_7cb339747/react-fetchstream-js-render-json-as-it-arrives-58jo</link>
      <guid>https://golf.forem.com/coding_inblood_7cb339747/react-fetchstream-js-render-json-as-it-arrives-58jo</guid>
      <description>&lt;p&gt;Most React apps still wait for the &lt;strong&gt;full JSON response&lt;/strong&gt; before showing anything. That means a loading spinner, a blank table, and slower perceived performance. fetchstream-js solves this by parsing JSON progressively, so your UI can update as data arrives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;fetchstream-js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Basic React example
&lt;/h2&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fetchStream&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="s2"&gt;fetchstream-js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Users&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;snap&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setSnap&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="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;chunks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&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="nf"&gt;fetchStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/users&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="nf"&gt;live&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;chunks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;done&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="nf"&gt;setSnap&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;chunks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;done&lt;/span&gt; &lt;span class="p"&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;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&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;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;div&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;Users&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;pre&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;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&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;pre&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;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chunks&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; chunks received &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;• done&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="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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this works well in React
&lt;/h2&gt;

&lt;p&gt;With fetchstream-js, your component does not need to wait for the entire payload. The UI can render partial data early, which improves perceived performance and makes the app feel faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use it
&lt;/h2&gt;

&lt;p&gt;Use fetchstream-js for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;large JSON lists&lt;/li&gt;
&lt;li&gt;dashboards&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;li&gt;any UI where early feedback matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;If your React app spends too long on a spinner, fetchstream-js is a simple upgrade. One install, one hook, and your UI starts showing data sooner.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;NPM: &lt;a href="https://www.npmjs.com/package/fetchstream-js" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/fetchstream-js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live Example: &lt;a href="https://fetchstream-js.vercel.app/" rel="noopener noreferrer"&gt;https://fetchstream-js.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Getting Started: &lt;a href="https://eklavya-raj.github.io/fetchstream-js/guide/getting-started" rel="noopener noreferrer"&gt;https://eklavya-raj.github.io/fetchstream-js/guide/getting-started&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>Announcing the Winners of the DEV Weekend Challenge: Earth Day Edition 🌍</title>
      <dc:creator>Jess Lee</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:25:40 +0000</pubDate>
      <link>https://golf.forem.com/devteam/announcing-the-winners-of-the-dev-weekend-challenge-earth-day-edition-1n4</link>
      <guid>https://golf.forem.com/devteam/announcing-the-winners-of-the-dev-weekend-challenge-earth-day-edition-1n4</guid>
      <description>&lt;p&gt;The time has come! We are thrilled to announce the winners of our second &lt;a href="https://dev.to/devteam/join-our-dev-weekend-challenge-1000-in-prizes-across-ten-winners-submissions-due-april-20-at-47i1"&gt;DEV Weekend Challenge: Earth Day Edition&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We were blown away by the creativity, craftsmanship, and care that went into your submissions. You gave the planet a voice through dashboards, AI tools, immersive simulations, and stories that made us think differently about our relationship with the natural world.&lt;/p&gt;

&lt;p&gt;Thank you to everyone who participated. Now, let's celebrate our winners! 🎉&lt;/p&gt;

&lt;h1&gt;
  
  
  🏆 Congratulations To...
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Overall Winners
&lt;/h2&gt;


&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Unearthed
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/anchildress1"&gt;@anchildress1&lt;/a&gt; took us deep underground to examine the fossil fuel systems quietly powering our homes and cities. The post weaves together personal narrative and technical research to reveal the environmental cost hidden behind every flipped light switch. It's a sobering reminder of how much remains out of sight.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/anchildress1/unearthed-the-coal-mine-behind-every-light-switch-234m" class="crayons-story__hidden-navigation-link"&gt;Unearthed—The Coal Mine Behind Every Light Switch&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/anchildress1/unearthed-the-coal-mine-behind-every-light-switch-234m" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/anchildress1" 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%2F3224358%2F7f675c78-6aa0-466a-a5a7-c3e35440d53a.png" alt="anchildress1 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/anchildress1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ashley Childress
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ashley Childress
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3524597" 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="/anchildress1" 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%2F3224358%2F7f675c78-6aa0-466a-a5a7-c3e35440d53a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ashley Childress&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/anchildress1/unearthed-the-coal-mine-behind-every-light-switch-234m" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 20&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/anchildress1/unearthed-the-coal-mine-behind-every-light-switch-234m" id="article-link-3524597"&gt;
          Unearthed—The Coal Mine Behind Every Light Switch
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&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/anchildress1/unearthed-the-coal-mine-behind-every-light-switch-234m" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;34&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/anchildress1/unearthed-the-coal-mine-behind-every-light-switch-234m#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              3&lt;span class="hidden s:inline"&gt; comments&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;
            11 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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Last Breath
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/_boweii"&gt;@_boweii&lt;/a&gt; built an app that uses sound to detect which species are vanishing from your local green spaces. The project combines audio recognition with ecological data to surface biodiversity loss in a way that's immediate and personal. It's a unique approach to environmental storytelling through audio.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/_boweii/i-built-an-app-that-listens-to-your-garden-and-tells-you-whats-disappearing-3g92" class="crayons-story__hidden-navigation-link"&gt;I Built an App That Listens to Your Garden and Tells You What's Disappearing. 🌍&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/_boweii/i-built-an-app-that-listens-to-your-garden-and-tells-you-whats-disappearing-3g92" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/_boweii" 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%2F1745361%2Fa5ccba4b-d4ad-4f12-8265-dcd18c3775cd.jpg" alt="_boweii profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/_boweii" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Tombri Bowei
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Tombri Bowei
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3517346" 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="/_boweii" 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%2F1745361%2Fa5ccba4b-d4ad-4f12-8265-dcd18c3775cd.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Tombri Bowei&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/_boweii/i-built-an-app-that-listens-to-your-garden-and-tells-you-whats-disappearing-3g92" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 17&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/_boweii/i-built-an-app-that-listens-to-your-garden-and-tells-you-whats-disappearing-3g92" id="article-link-3517346"&gt;
          I Built an App That Listens to Your Garden and Tells You What's Disappearing. 🌍
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&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/_boweii/i-built-an-app-that-listens-to-your-garden-and-tells-you-whats-disappearing-3g92" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/_boweii/i-built-an-app-that-listens-to-your-garden-and-tells-you-whats-disappearing-3g92#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              8&lt;span class="hidden s:inline"&gt; comments&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;
            5 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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Energy Leak Scout
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/afreen_hossain_16f9999ebc"&gt;@afreen_hossain_16f9999ebc&lt;/a&gt; built a home energy auditing tool that helps users identify where they're losing energy and money. The app is polished and well-documented, with a clear focus on making sustainability actionable for everyday people. We loved how it encourages positive changes with real financial incentive.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/afreen_hossain_16f9999ebc/energy-leak-scout-find-the-waste-cut-the-bill-21ka" class="crayons-story__hidden-navigation-link"&gt;Energy Leak Scout: Find the Waste. Cut the Bill.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/afreen_hossain_16f9999ebc/energy-leak-scout-find-the-waste-cut-the-bill-21ka" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/afreen_hossain_16f9999ebc" 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%2F3886529%2Fc562ecf0-67fe-477b-b5b7-932b1d274110.png" alt="afreen_hossain_16f9999ebc profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/afreen_hossain_16f9999ebc" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Afreen Hossain
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Afreen Hossain
                
              
              &lt;div id="story-author-preview-content-3524948" 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="/afreen_hossain_16f9999ebc" 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%2F3886529%2Fc562ecf0-67fe-477b-b5b7-932b1d274110.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Afreen Hossain&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/afreen_hossain_16f9999ebc/energy-leak-scout-find-the-waste-cut-the-bill-21ka" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 20&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/afreen_hossain_16f9999ebc/energy-leak-scout-find-the-waste-cut-the-bill-21ka" id="article-link-3524948"&gt;
          Energy Leak Scout: Find the Waste. Cut the Bill.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&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/afreen_hossain_16f9999ebc/energy-leak-scout-find-the-waste-cut-the-bill-21ka" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/afreen_hossain_16f9999ebc/energy-leak-scout-find-the-waste-cut-the-bill-21ka#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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  CrowdCommand
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/aashitanegii"&gt;@aashitanegii&lt;/a&gt; tackled a problem that doesn't get nearly enough attention: the enormous resource waste generated by large-scale events. CrowdCommand uses AI to model crowd movement and reduce inefficiencies in real time, from energy use to physical waste. It's an ambitious, well-executed project with clear potential for real-world deployment.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/aashitanegii/crowdcommand-ai-powered-system-to-optimize-crowd-flow-and-reduce-large-scale-event-waste-3j4j" class="crayons-story__hidden-navigation-link"&gt;CrowdCommand — AI Powered System to optimize crowd flow and reduce large-scale event waste&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/aashitanegii/crowdcommand-ai-powered-system-to-optimize-crowd-flow-and-reduce-large-scale-event-waste-3j4j" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/aashitanegii" 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%2F3885835%2Fe0a2a870-e988-4bc4-af45-00185210d8ec.jpeg" alt="aashitanegii profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/aashitanegii" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aashita
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aashita
                
              
              &lt;div id="story-author-preview-content-3519119" 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="/aashitanegii" 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%2F3885835%2Fe0a2a870-e988-4bc4-af45-00185210d8ec.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aashita&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/aashitanegii/crowdcommand-ai-powered-system-to-optimize-crowd-flow-and-reduce-large-scale-event-waste-3j4j" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 18&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/aashitanegii/crowdcommand-ai-powered-system-to-optimize-crowd-flow-and-reduce-large-scale-event-waste-3j4j" id="article-link-3519119"&gt;
          CrowdCommand — AI Powered System to optimize crowd flow and reduce large-scale event waste
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hackathon"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hackathon&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/aashitanegii/crowdcommand-ai-powered-system-to-optimize-crowd-flow-and-reduce-large-scale-event-waste-3j4j" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;9&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/aashitanegii/crowdcommand-ai-powered-system-to-optimize-crowd-flow-and-reduce-large-scale-event-waste-3j4j#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&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;
&lt;br&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  Prize Category Winners
&lt;/h2&gt;


&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Best Use of Backboard - Terra Triage
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/arqamwd"&gt;@arqamwd&lt;/a&gt; built an app where you snap a photo of an injured animal and the right licensed wildlife rehabilitator gets paged within 60 seconds. The secret is in the memory: every accept, decline, and "at capacity" response is written to Backboard, and that data directly re-ranks who gets contacted next — it's the core mechanism that makes the dispatcher smarter with every case.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/arqamwd/terra-triage-i-built-a-3-agent-wildlife-dispatcher-that-learns-from-every-referral-efk" class="crayons-story__hidden-navigation-link"&gt;Terra Triage: I Built a 3-Agent Wildlife Dispatcher That Learns From Every Referral&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/arqamwd/terra-triage-i-built-a-3-agent-wildlife-dispatcher-that-learns-from-every-referral-efk" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/arqamwd" 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%2F3760002%2Feb94d8d9-e8ef-4932-ab99-d07a12fe197b.jpeg" alt="arqamwd profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/arqamwd" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Arqam Waheed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Arqam Waheed
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3523816" 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="/arqamwd" 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%2F3760002%2Feb94d8d9-e8ef-4932-ab99-d07a12fe197b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Arqam Waheed&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/arqamwd/terra-triage-i-built-a-3-agent-wildlife-dispatcher-that-learns-from-every-referral-efk" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 20&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/arqamwd/terra-triage-i-built-a-3-agent-wildlife-dispatcher-that-learns-from-every-referral-efk" id="article-link-3523816"&gt;
          Terra Triage: I Built a 3-Agent Wildlife Dispatcher That Learns From Every Referral
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/backboard"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;backboard&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/arqamwd/terra-triage-i-built-a-3-agent-wildlife-dispatcher-that-learns-from-every-referral-efk" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;23&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/arqamwd/terra-triage-i-built-a-3-agent-wildlife-dispatcher-that-learns-from-every-referral-efk#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&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;
            9 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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Best Use of Auth0 for Agents - GreenGate
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/jtorchia"&gt;@jtorchia&lt;/a&gt; built a sustainability auditing tool that puts the human firmly in the loop by requiring phone-based approval before any agent action is taken. The project makes clever use of Auth0's CIBA flow to create a secure and accountable agentic system. It's a compelling proof of concept for responsible AI agent design.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/jtorchia/greengate-the-agent-proposes-the-phone-decides-building-an-auth0-ciba-gemini-audit-for-411j" class="crayons-story__hidden-navigation-link"&gt;GreenGate: the agent proposes, the phone decides — building an Auth0 CIBA + Gemini audit for embodied carbon&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/C9zrwHqhMQc" title="GreenGate: the agent proposes, the phone decides — building an Auth0 CIBA + Gemini audit for embodied carbon"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/jtorchia/greengate-the-agent-proposes-the-phone-decides-building-an-auth0-ciba-gemini-audit-for-411j" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/jtorchia" 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%2F885942%2F5b3b3860-d364-4de0-a335-cb7c251109d9.jpeg" alt="jtorchia profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jtorchia" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Juan Torchia
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Juan Torchia
                
              
              &lt;div id="story-author-preview-content-3524678" 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="/jtorchia" 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%2F885942%2F5b3b3860-d364-4de0-a335-cb7c251109d9.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Juan Torchia&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/jtorchia/greengate-the-agent-proposes-the-phone-decides-building-an-auth0-ciba-gemini-audit-for-411j" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 20&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/jtorchia/greengate-the-agent-proposes-the-phone-decides-building-an-auth0-ciba-gemini-audit-for-411j" id="article-link-3524678"&gt;
          GreenGate: the agent proposes, the phone decides — building an Auth0 CIBA + Gemini audit for embodied carbon
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/auth0"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;auth0&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&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/jtorchia/greengate-the-agent-proposes-the-phone-decides-building-an-auth0-ciba-gemini-audit-for-411j" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/jtorchia/greengate-the-agent-proposes-the-phone-decides-building-an-auth0-ciba-gemini-audit-for-411j#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;
            20 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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Best Use of Google Gemini - EcoScan
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/temiloluwavalentine"&gt;@temiloluwavalentine&lt;/a&gt; built a tool that scans your devices and surfaces exactly which ones are consuming the most energy and driving up your bills. Gemini powers the analysis, turning raw usage data into clear, actionable insights for users. The result is a sharp, focused tool that makes energy waste visible in a way that actually motivates change.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/temiloluwavalentine/-ecoscan-see-which-device-is-drinking-your-money-3o69" class="crayons-story__hidden-navigation-link"&gt;# ⚡ EcoScan— See Which Device is Drinking Your Money&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/temiloluwavalentine/-ecoscan-see-which-device-is-drinking-your-money-3o69" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/temiloluwavalentine" 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%2F3089157%2F2d0b75dc-ef58-4753-a762-05689e4e7216.png" alt="temiloluwavalentine profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/temiloluwavalentine" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Temiloluwa Valentine
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Temiloluwa Valentine
                
              
              &lt;div id="story-author-preview-content-3523423" 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="/temiloluwavalentine" 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%2F3089157%2F2d0b75dc-ef58-4753-a762-05689e4e7216.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Temiloluwa Valentine&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/temiloluwavalentine/-ecoscan-see-which-device-is-drinking-your-money-3o69" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 19&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/temiloluwavalentine/-ecoscan-see-which-device-is-drinking-your-money-3o69" id="article-link-3523423"&gt;
          # ⚡ EcoScan— See Which Device is Drinking Your Money
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/earthday"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;earthday&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemini"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemini&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/temiloluwavalentine/-ecoscan-see-which-device-is-drinking-your-money-3o69" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/temiloluwavalentine/-ecoscan-see-which-device-is-drinking-your-money-3o69#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; 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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Best Use of Snowflake - SQLgo
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/mohammad515253"&gt;@mohammad515253&lt;/a&gt; approached sustainability from an unexpected angle: the carbon footprint of inefficient database queries. With Snowflake at the core of the data layer, SQLgo analyzes query patterns and redundant storage to help developers reduce computational waste. It's a clever reframe that makes sustainability relevant to anyone who writes code.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mohammad515253/sqlgo-save-co2-by-optimizing-queries-and-removing-redundant-storage-3" class="crayons-story__hidden-navigation-link"&gt;SqlGo🌱 - Save CO2 by optimizing queries and removing redundant storage&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/mohammad515253/sqlgo-save-co2-by-optimizing-queries-and-removing-redundant-storage-3" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/mohammad515253" 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%2F1253057%2F6503fc19-fb08-466e-b590-05cb896b5dd7.png" alt="mohammad515253 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mohammad515253" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mohammad Tejabwala
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mohammad Tejabwala
                
              
              &lt;div id="story-author-preview-content-3523194" 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="/mohammad515253" 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%2F1253057%2F6503fc19-fb08-466e-b590-05cb896b5dd7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mohammad Tejabwala&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/mohammad515253/sqlgo-save-co2-by-optimizing-queries-and-removing-redundant-storage-3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 20&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/mohammad515253/sqlgo-save-co2-by-optimizing-queries-and-removing-redundant-storage-3" id="article-link-3523194"&gt;
          SqlGo🌱 - Save CO2 by optimizing queries and removing redundant storage
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemini"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemini&lt;/a&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;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/mohammad515253/sqlgo-save-co2-by-optimizing-queries-and-removing-redundant-storage-3" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;11&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mohammad515253/sqlgo-save-co2-by-optimizing-queries-and-removing-redundant-storage-3#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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Best Use of GitHub Copilot - Planetary Pulse
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/mamoor_ahmad"&gt;@mamoor_ahmad&lt;/a&gt; built a sweeping Earth monitoring dashboard that pulls together environmental data from multiple sources into a single, unified view. Copilot handled Express route scaffolding, the animated CSS globe, the SVG health ring, the IPCC-calibrated carbon calculator logic, and responsive layout breakpoints, shaving an estimated 8.5 hours off the total build time. The post makes a compelling case for Copilot as a genuine force multiplier on ambitious solo builds.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mamoor_ahmad/planetary-pulse-ai-powered-earth-dashboard-with-6-prize-tech-integrations-18i2" class="crayons-story__hidden-navigation-link"&gt;🌍 Planetary Pulse — AI-Powered Earth Dashboard with 6 Prize Tech Integrations&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/mamoor_ahmad/planetary-pulse-ai-powered-earth-dashboard-with-6-prize-tech-integrations-18i2" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/mamoor_ahmad" 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%2F3862196%2Fc352af61-07ef-4ca6-ab20-cfffbbfc18de.jpeg" alt="mamoor_ahmad profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mamoor_ahmad" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mamoor Ahmad 
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mamoor Ahmad 
                
              
              &lt;div id="story-author-preview-content-3519247" 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="/mamoor_ahmad" 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%2F3862196%2Fc352af61-07ef-4ca6-ab20-cfffbbfc18de.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mamoor Ahmad &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/mamoor_ahmad/planetary-pulse-ai-powered-earth-dashboard-with-6-prize-tech-integrations-18i2" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 18&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/mamoor_ahmad/planetary-pulse-ai-powered-earth-dashboard-with-6-prize-tech-integrations-18i2" id="article-link-3519247"&gt;
          🌍 Planetary Pulse — AI-Powered Earth Dashboard with 6 Prize Tech Integrations
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hackathon"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hackathon&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/earthday"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;earthday&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/mamoor_ahmad/planetary-pulse-ai-powered-earth-dashboard-with-6-prize-tech-integrations-18i2" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mamoor_ahmad/planetary-pulse-ai-powered-earth-dashboard-with-6-prize-tech-integrations-18i2#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              6&lt;span class="hidden s:inline"&gt; comments&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;
            7 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;
&lt;br&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  Best Use of Solana - EcoLens
&lt;/h3&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/arya_koste_5845807df94776"&gt;@arya_koste_5845807df94776&lt;/a&gt; created a system for recording carbon reduction pledges on-chain, making climate commitments transparent and verifiable. An AI layer backs up each pledge with research and accountability tracking, so the promises people make are grounded in real data. It's an inventive use of blockchain for something that goes well beyond speculation.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/arya_koste_5845807df94776/i-put-carbon-pledges-on-the-solana-blockchain-for-earth-day-and-built-the-ai-to-back-it-up-2hin" class="crayons-story__hidden-navigation-link"&gt;I Put Carbon Pledges on the Solana Blockchain for Earth Day (And Built the AI to Back It Up)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/arya_koste_5845807df94776/i-put-carbon-pledges-on-the-solana-blockchain-for-earth-day-and-built-the-ai-to-back-it-up-2hin" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Earth Day&lt;/p&gt;

&lt;/a&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="/arya_koste_5845807df94776" 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%2F3396126%2Fff57b4f1-4d36-4ad9-8621-d0c4fd20823a.png" alt="arya_koste_5845807df94776 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/arya_koste_5845807df94776" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Arya Koste
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Arya Koste
                
              
              &lt;div id="story-author-preview-content-3523719" 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="/arya_koste_5845807df94776" 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%2F3396126%2Fff57b4f1-4d36-4ad9-8621-d0c4fd20823a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Arya Koste&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/arya_koste_5845807df94776/i-put-carbon-pledges-on-the-solana-blockchain-for-earth-day-and-built-the-ai-to-back-it-up-2hin" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 19&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/arya_koste_5845807df94776/i-put-carbon-pledges-on-the-solana-blockchain-for-earth-day-and-built-the-ai-to-back-it-up-2hin" id="article-link-3523719"&gt;
          I Put Carbon Pledges on the Solana Blockchain for Earth Day (And Built the AI to Back It Up)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/solana"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;solana&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/arya_koste_5845807df94776/i-put-carbon-pledges-on-the-solana-blockchain-for-earth-day-and-built-the-ai-to-back-it-up-2hin" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/arya_koste_5845807df94776/i-put-carbon-pledges-on-the-solana-blockchain-for-earth-day-and-built-the-ai-to-back-it-up-2hin#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;
            6 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;
&lt;br&gt;

&lt;/div&gt;





&lt;h1&gt;
  
  
  Prizes
&lt;/h1&gt;

&lt;p&gt;All ten winners will receive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;$100 USD&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/++"&gt;DEV++&lt;/a&gt; Membership&lt;/li&gt;
&lt;li&gt;Exclusive DEV badge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All participants with a valid submission will receive a completion badge. 🏅&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Stay tuned for upcoming challenges by following this tag:&lt;/p&gt;


&lt;div class="ltag__tag ltag__tag__id__41023"&gt;
    &lt;div class="ltag__tag__content"&gt;
      &lt;h2&gt;#&lt;a href="https://dev.to/t/devchallenge" class="ltag__tag__link"&gt;devchallenge&lt;/a&gt; Follow
&lt;/h2&gt;
      &lt;div class="ltag__tag__summary"&gt;
        This is the official tag for submissions and announcements related to DEV Challenges.
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;We hope you had fun, felt challenged, and maybe added a thing or two to your professional profile.&lt;/p&gt;

&lt;p&gt;See you next time!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>LLM needs to generate/search in order to compare. Silently answer my question is a lie.</title>
      <dc:creator>gitdexgit</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:23:04 +0000</pubDate>
      <link>https://golf.forem.com/gitdexgit/llm-needs-to-generatesearch-in-order-to-compare-silently-answer-my-question-is-a-lie-374k</link>
      <guid>https://golf.forem.com/gitdexgit/llm-needs-to-generatesearch-in-order-to-compare-silently-answer-my-question-is-a-lie-374k</guid>
      <description>&lt;p&gt;LLM works by generating words out of nothing. If context window is 0 then it can't guide to to something it doesn't have. So it needs something prior in the context window. makes sense, you need something to compare something you can't compare nothing to something.&lt;/p&gt;

&lt;p&gt;So Our goal is to use LLM to learn.&lt;/p&gt;

&lt;p&gt;I see and saw people share their prompts: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"silently answer my question first then find where I'm wrong. Don't give me the answer/hints unless I tell you to. Only tell me where I'm wrong"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem is people think their LLM acts as a teacher that guides student to the answer without tell the user the answer. &lt;/p&gt;

&lt;p&gt;That's just absurd, silently generate my answer is a concept only for humans.&lt;/p&gt;

&lt;p&gt;LLM doesn't have a memory where it stores the correct answers. It only generates. If it's not in the context window LLM generates it from scratch.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's analyze the prompt silently generate answer, and only guide user to the correct answer
&lt;/h1&gt;

&lt;p&gt;Let's think about this scenario from the perspective of the user and LLM where user's goal is learning and using LLM to guide his thoughts:&lt;/p&gt;

&lt;h2&gt;
  
  
  What people expect/want:
&lt;/h2&gt;

&lt;p&gt;User:&lt;br&gt;
"Q: Here is the question the user is trying to answer"&lt;br&gt;
--&amp;gt; A: The user answers his own question.&lt;/p&gt;

&lt;p&gt;LLM:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ok user did my job, I don't need to answer his question.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Let me generate in my head silently the correct answer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now let me compare it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. Now let me guide the user to the correct answer using socratic method. I'll only ask him questions and never give him hints unless he asks me to. And only when I see user give up then I'll give him the answer.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  What actually happens:
&lt;/h2&gt;

&lt;p&gt;User:&lt;br&gt;
"Q: Here is the question the user is trying to answer"&lt;br&gt;
--&amp;gt; A: The user answers his own question.&lt;/p&gt;

&lt;p&gt;LLM:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ok user did my job, I don't need to answer his question.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now let me compare it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. Now let me guide the user to the correct answer using Socratic method. I'll only ask him questions and never give him hints unless he asks me to. And only when I see user give up then I'll give him the answer.
&lt;/h2&gt;

&lt;p&gt;As you see 2nd step is missing. It never happens. why?&lt;/p&gt;

&lt;p&gt;Here is why: LLM is unable to silently generate correct answer. LLM model has to physically generate output, example CoT; they call it thinking. Before it gives you the answer. &amp;lt;- Why did they not tell it "Silently think before you give me answer?"&lt;/p&gt;

&lt;p&gt;So LLM needs to have some preliminary context before it gives you the answer.&lt;/p&gt;

&lt;p&gt;So what is it comparing? IDK. It just generates what most likely fit. You could say It generated the answer in CoT. Probably, who knows I'm not sure. But we want to be sure. No matter what model we use, model has thinking or no thinking or only has certain tokens for thinking. We must make sure it generates the answer first.&lt;/p&gt;

&lt;h1&gt;
  
  
  In our Scenario, there are 3 ways that an LLM generates an answer
&lt;/h1&gt;

&lt;p&gt;1) It could happen in it's own CoT. (Unrealaible. No one reads CoT anyways/ could be small)&lt;/p&gt;

&lt;p&gt;2) You just tell LLM "Find where I'm wrong" and just answer. LLM finds where you are wrong. Repeat Until LLM doesn't find anything wrong. (That is so rigorous)&lt;/p&gt;

&lt;p&gt;3) Tell LLM to generate correct answer first OR copy paste correct answer after you finish answering. Then tell LLM to compare with your own answer and find where you are wrong. &lt;/p&gt;

&lt;p&gt;Option 1: Is all about luck&lt;/p&gt;

&lt;p&gt;Option 2: Takes too much time and disrupts your learning process but eventually after some enough time you will get to LLM says Correct. It's so rigorous and it will find exactly where you are wrong word by word. If you make a mistake in technicality not using the exact word then you are wrong.&lt;/p&gt;

&lt;p&gt;Option 3: It already has the answer. It's just comparing it until comparison is 100% complete. You can also tell it compare only the intent if the mental model matches even if the exact words are not correct it's still a solid answer. &lt;/p&gt;

&lt;p&gt;the 3rd option is the winner for learning. I tested both option 2 and 3. Option 2 is very good for a skeptical assistant, but 3 is the go to because it only matches the answer it generates or the answer you give it (yesterday you learned something you copy paste the answer for tomorrow's llm) &lt;/p&gt;

&lt;p&gt;So LLM with prompt  just generating what someone might say when they don't know the answer. Just extra bloat words to read anyway. &lt;/p&gt;

&lt;h1&gt;
  
  
  How to implement option 3
&lt;/h1&gt;

&lt;p&gt;We need some rules:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Either LLM generates an answer at the start of output, but puts it in   &amp;lt;- Similar to how most people don't read CoT. OR you copy paste answer from yesterday without reading it then tell LLM to compare but never give you the answer until you reach 100% same answer to your specific question.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LLM now will compare your previous  and see where you got it wrong and where you got it write. Find the gap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now it can act as a guide. Tell you where you are wrong but provides no answer. Preferably no hints only when you give up then it hints. &amp;lt;-- or just read what you are not supposed to read to find the answer.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the LLM has access to google it would improve the ability to compare correct answer a lot. Giving LLM access to google or search Will hopefully provide more context as well. But keep it simple because LLM google search is expensive.&lt;/p&gt;

&lt;p&gt;Silently generate answer for learning doesn't work. There is no silent answer when dealing with LLM. You need a contract between the user and the LLM. The user will not read the correct answer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>learning</category>
    </item>
    <item>
      <title>Why God Kit? A Lightweight Vue 3 UI Library and Design System for Admin Apps</title>
      <dc:creator>Parsa Jiravand</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:22:25 +0000</pubDate>
      <link>https://golf.forem.com/parsajiravand/why-god-kit-a-lightweight-vue-3-ui-library-and-design-system-for-admin-apps-55al</link>
      <guid>https://golf.forem.com/parsajiravand/why-god-kit-a-lightweight-vue-3-ui-library-and-design-system-for-admin-apps-55al</guid>
      <description>&lt;h2&gt;
  
  
  Why God Kit? A Lightweight Vue 3 Component Library Built for Real Dashboards
&lt;/h2&gt;

&lt;p&gt;If you are evaluating &lt;strong&gt;Vue UI libraries&lt;/strong&gt;, &lt;strong&gt;Vue component frameworks&lt;/strong&gt;, or a &lt;strong&gt;complete design system for Vue 3&lt;/strong&gt;, you have strong options—from full design-language suites with hundreds of primitives to minimal headless kits. &lt;strong&gt;God Kit&lt;/strong&gt; sits in a different niche: &lt;strong&gt;admin and internal tools&lt;/strong&gt; that need &lt;strong&gt;consistent design tokens&lt;/strong&gt;, &lt;strong&gt;small bundles&lt;/strong&gt;, and a &lt;strong&gt;steady path away from legacy UI&lt;/strong&gt;—including dense &lt;strong&gt;data tables&lt;/strong&gt; and dashboard chrome—without carrying a massive runtime.&lt;/p&gt;

&lt;p&gt;This post explains &lt;strong&gt;what God Kit is&lt;/strong&gt;, &lt;strong&gt;why teams choose it over heavier Vue component libraries&lt;/strong&gt;, and where to find &lt;strong&gt;documentation&lt;/strong&gt;, &lt;strong&gt;source&lt;/strong&gt;, and &lt;strong&gt;npm&lt;/strong&gt;. We also share where the project is going: a &lt;strong&gt;visual UI builder&lt;/strong&gt; and a growing ecosystem around &lt;strong&gt;Vue 3&lt;/strong&gt; and &lt;strong&gt;Nuxt 4&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick links (docs, code, package)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Documentation &amp;amp; live component docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://godkit.godplans.org/" rel="noopener noreferrer"&gt;https://godkit.godplans.org/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub (source, issues, contributing)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/god-plans/god-kit" rel="noopener noreferrer"&gt;https://github.com/god-plans/god-kit&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;npm package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.npmjs.com/package/god-kit" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/god-kit&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sponsor / fund the project&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sponsors/god-plans" rel="noopener noreferrer"&gt;https://github.com/sponsors/god-plans&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What is God Kit?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;God Kit&lt;/strong&gt; is an open source &lt;strong&gt;Vue 3 UI kit&lt;/strong&gt; and &lt;strong&gt;design system&lt;/strong&gt; for teams building &lt;strong&gt;dashboards&lt;/strong&gt;, &lt;strong&gt;back-office tools&lt;/strong&gt;, and &lt;strong&gt;Nuxt 4&lt;/strong&gt; apps. It ships:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Typed &lt;code&gt;Gk*&lt;/code&gt; components&lt;/strong&gt; (forms, containment, navigation, data table, feedback, layout)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic design tokens&lt;/strong&gt; (&lt;code&gt;--gk-*&lt;/code&gt; CSS variables) for &lt;strong&gt;light/dark&lt;/strong&gt;, density, and theming&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subpath exports&lt;/strong&gt; so you import only what you need—friendly to &lt;strong&gt;tree-shaking&lt;/strong&gt; and smaller bundles than “install everything” suites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;createGkKit&lt;/code&gt;-style global configuration&lt;/strong&gt; for theme, display, locale, and defaults&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;CLI&lt;/strong&gt; to scaffold components (&lt;code&gt;npx god-kit add …&lt;/code&gt;) aligned with kit conventions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt; coverage on key primitives (e.g. axe-based specs in the repo)&lt;/li&gt;
&lt;li&gt;Optional &lt;strong&gt;bridge stylesheets&lt;/strong&gt; in the repo for &lt;strong&gt;incremental migration&lt;/strong&gt; from older component layers when you cannot rewrite every screen at once&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is &lt;strong&gt;MIT-licensed&lt;/strong&gt; and aimed at developers who want &lt;strong&gt;simple, lightweight Vue components&lt;/strong&gt; with a &lt;strong&gt;token-first&lt;/strong&gt; workflow—not necessarily every marketing-site block in a single package.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why God Kit? (The classic “why this framework?”—for a focused kit)
&lt;/h2&gt;

&lt;p&gt;Many popular guides follow the same recipe: &lt;strong&gt;open community&lt;/strong&gt;, &lt;strong&gt;deep component catalogs&lt;/strong&gt;, &lt;strong&gt;layouts&lt;/strong&gt;, &lt;strong&gt;tooling&lt;/strong&gt;, and long-term support. That pattern works beautifully when you want the &lt;strong&gt;fullest possible surface area&lt;/strong&gt; and a &lt;strong&gt;single-vendor design language&lt;/strong&gt; end to end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;God Kit takes the same spirit—clarity, docs, ecosystem—but narrows the product:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you are searching for…&lt;/th&gt;
&lt;th&gt;God Kit emphasizes…&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lightweight Vue UI library&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Smaller surface area; &lt;strong&gt;admin-first&lt;/strong&gt; components; &lt;strong&gt;subpath imports&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vue 3 component library with design tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Semantic tokens&lt;/strong&gt; and themes, not scattered one-off colors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nuxt 4 UI components&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Documented CSS order, SSR-minded usage, explicit imports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Incremental migration&lt;/strong&gt; from a &lt;strong&gt;legacy UI stack&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Bridge + cookbook&lt;/strong&gt; mindset: replace screens in phases, not one risky big bang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Best Vue UI framework&lt;/strong&gt; (for your &lt;em&gt;dashboard&lt;/em&gt;)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Predictable TypeScript APIs&lt;/strong&gt;, &lt;code&gt;Gk*&lt;/code&gt; prefix, changelog discipline—not the widest marketing-site catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So if your keywords are &lt;strong&gt;Vue component library&lt;/strong&gt;, &lt;strong&gt;design system Vue&lt;/strong&gt;, &lt;strong&gt;admin dashboard Vue 3&lt;/strong&gt;, &lt;strong&gt;lightweight Vue components&lt;/strong&gt;, or &lt;strong&gt;Nuxt 4 component kit&lt;/strong&gt;, God Kit is meant to &lt;strong&gt;match that intent honestly&lt;/strong&gt;: a &lt;strong&gt;complete enough&lt;/strong&gt; design system for &lt;strong&gt;internal products&lt;/strong&gt;, not a contest for the longest feature grid on npm.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key features (SEO-friendly summary)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vue 3 + TypeScript&lt;/strong&gt; — &lt;strong&gt;Composition API&lt;/strong&gt; components with exported types.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design system that works&lt;/strong&gt; — Tokens, themes (presets + registration), RTL-aware documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight by design&lt;/strong&gt; — Import from &lt;code&gt;god-kit/vue/form&lt;/code&gt;, &lt;code&gt;god-kit/vue/layout&lt;/code&gt;, and related subpaths instead of the whole barrel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI for components&lt;/strong&gt; — Scaffold files that follow project conventions (&lt;code&gt;god-kit&lt;/code&gt; CLI).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-heavy UI&lt;/strong&gt; — &lt;strong&gt;GkDataTable&lt;/strong&gt; and patterns aligned with &lt;strong&gt;admin&lt;/strong&gt; and &lt;strong&gt;data-dense&lt;/strong&gt; screens, with migration-oriented docs in the repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free and open source&lt;/strong&gt; — MIT, issues and PRs on &lt;strong&gt;GitHub&lt;/strong&gt;, docs at &lt;strong&gt;godkit.godplans.org&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Who should use God Kit?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Teams shipping &lt;strong&gt;internal admin&lt;/strong&gt; or &lt;strong&gt;SaaS dashboards&lt;/strong&gt; on &lt;strong&gt;Vue 3&lt;/strong&gt; or &lt;strong&gt;Nuxt 4&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Engineers who want a &lt;strong&gt;Vue design system&lt;/strong&gt; with &lt;strong&gt;governed tokens&lt;/strong&gt; and &lt;strong&gt;component authoring&lt;/strong&gt; docs&lt;/li&gt;
&lt;li&gt;Projects that need a &lt;strong&gt;practical migration&lt;/strong&gt; path from an older UI layer rather than a single frozen rewrite&lt;/li&gt;
&lt;li&gt;Developers comparing &lt;strong&gt;best UI library for Vue&lt;/strong&gt; &lt;em&gt;for their use case&lt;/em&gt;—not only total download volume&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Roadmap: UI builder and a growing ecosystem
&lt;/h2&gt;

&lt;p&gt;We are actively working on a &lt;strong&gt;visual UI builder&lt;/strong&gt; and continuing to &lt;strong&gt;improve documentation&lt;/strong&gt;, &lt;strong&gt;components&lt;/strong&gt;, and &lt;strong&gt;tooling&lt;/strong&gt; so the &lt;strong&gt;Vue&lt;/strong&gt; community has a &lt;strong&gt;simple, lightweight&lt;/strong&gt; option that stays maintainable over time. &lt;strong&gt;Sponsors&lt;/strong&gt; and feedback help prioritize &lt;strong&gt;Nuxt&lt;/strong&gt;, &lt;strong&gt;a11y&lt;/strong&gt;, &lt;strong&gt;data components&lt;/strong&gt;, and developer experience—see the &lt;a href="https://github.com/sponsors/god-plans" rel="noopener noreferrer"&gt;sponsors page&lt;/a&gt; and the &lt;a href="https://godkit.godplans.org/guide/roadmap" rel="noopener noreferrer"&gt;roadmap in the docs&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Read &lt;strong&gt;&lt;a href="https://godkit.godplans.org/guide/getting-started" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://godkit.godplans.org/guide/why-god-kit" rel="noopener noreferrer"&gt;Why God Kit&lt;/a&gt;&lt;/strong&gt; on the official site.&lt;/li&gt;
&lt;li&gt;Install from &lt;strong&gt;npm&lt;/strong&gt;: &lt;code&gt;npm install god-kit&lt;/code&gt; (see the &lt;a href="https://www.npmjs.com/package/god-kit" rel="noopener noreferrer"&gt;package page&lt;/a&gt; for the current version).&lt;/li&gt;
&lt;li&gt;Star and watch &lt;strong&gt;&lt;a href="https://github.com/god-plans/god-kit" rel="noopener noreferrer"&gt;god-plans/god-kit&lt;/a&gt;&lt;/strong&gt; for releases and discussions.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Meta cheatsheet (for dev.to and Google)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Suggested title tag (≤ ~60 characters):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;Why God Kit? Vue 3 UI Library, Design Tokens &amp;amp; Nuxt 4&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested meta description (≤ ~155 characters):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;God Kit is a lightweight Vue 3 component library and design system for admin dashboards—design tokens, CLI, Nuxt 4, and incremental migration from legacy UI. Docs, npm, and GitHub links inside.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary keywords (use naturally in headings and first paragraphs):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vue 3 UI library, Vue component library, design system Vue, lightweight Vue components, Nuxt 4 UI, admin dashboard Vue, design tokens CSS, Vue TypeScript components, open source UI kit&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secondary / long-tail:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vue 3 component framework, scaffold Vue components CLI, tree-shaking Vue UI, migrate legacy Vue UI, accessibility Vue components, semantic CSS variables UI&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article reflects the God Kit project as published in the repo’s docs and &lt;code&gt;package.json&lt;/code&gt;; versions and features evolve—check &lt;a href="https://godkit.godplans.org/" rel="noopener noreferrer"&gt;godkit.godplans.org&lt;/a&gt; and &lt;a href="https://www.npmjs.com/package/god-kit" rel="noopener noreferrer"&gt;npm&lt;/a&gt; for the latest.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>frontend</category>
      <category>nuxt</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
