<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Tommaso Bertocchi</title>
    <description>The latest articles on Forem by Tommaso Bertocchi (@sonotommy).</description>
    <link>https://forem.com/sonotommy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3399256%2F111d6919-72dc-4992-a6c6-2b20a4ccf85b.jpeg</url>
      <title>Forem: Tommaso Bertocchi</title>
      <link>https://forem.com/sonotommy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sonotommy"/>
    <language>en</language>
    <item>
      <title>I built an AI agent that does OSINT investigations from your terminal</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Fri, 08 May 2026 13:07:52 +0000</pubDate>
      <link>https://forem.com/sonotommy/i-built-an-ai-agent-that-does-osint-investigations-from-your-terminal-22jh</link>
      <guid>https://forem.com/sonotommy/i-built-an-ai-agent-that-does-osint-investigations-from-your-terminal-22jh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tuvy2k6fiw0n0owsosq.gif" 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%2F5tuvy2k6fiw0n0owsosq.gif" alt="Hacking terminal" width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most OSINT tools are great at one thing. You run holehe for emails, sherlock for usernames, sublist3r for domains. But you're the one deciding the workflow, switching between tools, copy-pasting results.&lt;/p&gt;

&lt;p&gt;I wanted to remove that middle layer. So I built &lt;strong&gt;OpenOSINT&lt;/strong&gt; — you describe a target in plain English, the AI figures out what to investigate and how, runs the tools, and hands you a report.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The core idea is simple: instead of hardcoding a fixed pipeline, I use Claude's native tool use API to let the model decide at each step what to do next based on what it found so far.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;you ❯ investigate john.doe@gmail.com

→ search_email(john.doe@gmail.com)
  Found: spotify, wordpress, office365, gravatar

→ search_breach(john.doe@gmail.com)
  Found: 2 breaches (LinkedIn 2016, Adobe 2013)

→ search_paste(john.doe@gmail.com)
  No results.

✓ Report saved to reports/2025-05-08_john-doe.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No hardcoded sequence. The model sees the holehe results and decides whether to check breaches next, look up the domain, or go straight to the report. It's a genuine reasoning loop, not a fixed script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why native tool use matters
&lt;/h2&gt;

&lt;p&gt;The first version I built used a manual ReAct loop — I was parsing JSON from the model, extracting tool calls, running them, feeding results back. It worked but it was fragile. Models hallucinate tool results when they're bored.&lt;/p&gt;

&lt;p&gt;With the &lt;a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview" rel="noopener noreferrer"&gt;Anthropic tool use API&lt;/a&gt;, the model returns &lt;code&gt;stop_reason: "tool_use"&lt;/code&gt; when it wants to call something. You execute it, return the result, and the model continues. The loop is clean:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_definitions&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="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stop_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;end_turn&lt;/span&gt;&lt;span class="sh"&gt;"&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stop_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raw_content&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

            &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
                &lt;span class="p"&gt;})&lt;/span&gt;

            &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model never gets a chance to invent results because it always receives the actual tool output before continuing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools included
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it wraps&lt;/th&gt;
&lt;th&gt;What it finds&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;holehe&lt;/td&gt;
&lt;td&gt;social accounts linked to an email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_username&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;sherlock&lt;/td&gt;
&lt;td&gt;accounts across 300+ platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_domain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;sublist3r&lt;/td&gt;
&lt;td&gt;subdomains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_breach&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HaveIBeenPwned API&lt;/td&gt;
&lt;td&gt;data breach exposure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_whois&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;python-whois&lt;/td&gt;
&lt;td&gt;domain registrant info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_ip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ipinfo.io&lt;/td&gt;
&lt;td&gt;geolocation, ASN, hostname&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generate_dorks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;built-in&lt;/td&gt;
&lt;td&gt;Google dork URLs for any target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_paste&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;psbdmp API&lt;/td&gt;
&lt;td&gt;Pastebin dump mentions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_phone&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;phoneinfoga&lt;/td&gt;
&lt;td&gt;carrier, country, line type&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each tool handles missing dependencies gracefully — if sherlock isn't installed it tells you the install command instead of crashing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-provider
&lt;/h2&gt;

&lt;p&gt;The AI layer is completely swappable. On first run you pick your provider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Select provider:
  [1] Anthropic (Claude) — Recommended
  [2] OpenAI (GPT-4o)
  [3] Ollama (Local) — Experimental
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same agentic loop runs regardless. Anthropic is noticeably better at following structured tool-use instructions, but all three work. Local models via Ollama are marked experimental because they're inconsistent with JSON-structured responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  The terminal UI
&lt;/h2&gt;

&lt;p&gt;Built with &lt;a href="https://github.com/Textualize/rich" rel="noopener noreferrer"&gt;Rich&lt;/a&gt;. Tool calls log inline as they happen so you can see the investigation unfold in real time rather than waiting for a final dump.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openosint ❯ investigate john.doe@example.com

  ⠸ Investigating...

  → search_email          john.doe@example.com
  ✓ Found: spotify, wordpress, gravatar, office365

  → search_breach         john.doe@example.com
  ✓ Found in 2 breaches

  ╭──────────────────── Report ─────────────────────╮
  │ ## Ambiguity Check                              │
  │ Single target identified — high confidence.     │
  │                                                 │
  │ ## Online Presence                              │
  │ Confirmed: Spotify, WordPress, Gravatar,        │
  │ Office365                                       │
  │                                                 │
  │ ## Data Breaches                                │
  │ LinkedIn (2016), Adobe (2013)                   │
  ╰─────────────────────────────────────────────────╯

  Report saved → reports/2025-05-08_john-doe.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;pip &lt;span class="nb"&gt;install &lt;/span&gt;openosint
openosint config    &lt;span class="c"&gt;# runs the setup wizard&lt;/span&gt;
openosint investigate &lt;span class="s2"&gt;"john.doe@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or from source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/OpenOSINT/OpenOSINT
&lt;span class="nb"&gt;cd &lt;/span&gt;OpenOSINT
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
openosint config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Web UI (optional, for non-terminal users)&lt;/li&gt;
&lt;li&gt;Export to PDF&lt;/li&gt;
&lt;li&gt;Graph visualization of connections between identifiers&lt;/li&gt;
&lt;li&gt;More tools: LinkedIn scraping, GitHub profile analysis, image metadata&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Reminder&lt;/strong&gt;: OpenOSINT is for authorized use only. Read &lt;a href="https://github.com/OpenOSINT/OpenOSINT/blob/main/DISCLAIMER.md" rel="noopener noreferrer"&gt;DISCLAIMER.md&lt;/a&gt; before using.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/OpenOSINT/OpenOSINT" rel="noopener noreferrer"&gt;github.com/OpenOSINT/OpenOSINT&lt;/a&gt;&lt;/p&gt;

</description>
      <category>osint</category>
      <category>security</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>8 Tools Powering the Fastest-Growing Startups in 2026</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Wed, 06 May 2026 12:05:58 +0000</pubDate>
      <link>https://forem.com/sonotommy/8-tools-powering-the-fastest-growing-startups-in-2026-5hib</link>
      <guid>https://forem.com/sonotommy/8-tools-powering-the-fastest-growing-startups-in-2026-5hib</guid>
      <description>&lt;p&gt;Most "startup stack" articles are written by people who haven't shipped anything in two years.&lt;/p&gt;

&lt;p&gt;They'll tell you: Next.js, Prisma, Vercel, Supabase, done. That's the 2022 answer.&lt;/p&gt;

&lt;p&gt;The startups gaining traction right now are making different choices — &lt;strong&gt;edge-native, serverless-first, zero-lock-in choices&lt;/strong&gt; that weren't available or production-ready three years ago.&lt;/p&gt;

&lt;p&gt;This isn't a list of "cool tools." It's the actual infrastructure decisions that let a 3-person team scale to 100k users without hiring a DevOps engineer.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I selected these
&lt;/h2&gt;

&lt;p&gt;I'm not ranking by GitHub stars or Twitter buzz. My criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ships fast&lt;/strong&gt; — can a solo dev go from zero to deployed in under a day?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge or serverless-native&lt;/strong&gt; — no single-region Node servers pretending to be modern&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't own your data&lt;/strong&gt; — open-source core or real self-host options&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript-first DX&lt;/strong&gt; — type errors at build time, not at 2am in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solves something boring that used to require a dedicated hire&lt;/strong&gt; — security, background jobs, auth&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The fastest startups in 2026 aren't using the default stack — they're building on edge-native, serverless-first tools that make a 3-person team feel like 10.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/l0MYt5jPR6QX5pnqM" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Hono — The API framework that actually runs at the edge&lt;/li&gt;
&lt;li&gt;Neon — Serverless Postgres that branches like Git&lt;/li&gt;
&lt;li&gt;Drizzle ORM — The TypeScript ORM that doesn't fight your database&lt;/li&gt;
&lt;li&gt;Trigger.dev — Background jobs that don't require a PhD in distributed systems&lt;/li&gt;
&lt;li&gt;shadcn/ui — UI components you copy, own, and never regret&lt;/li&gt;
&lt;li&gt;pompelmi — The one security layer most early-stage startups skip&lt;/li&gt;
&lt;li&gt;OpenNext — Escape Next.js infrastructure lock-in&lt;/li&gt;
&lt;li&gt;Supabase — The open-source BaaS that didn't make you regret it later&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1) Hono — The API framework that actually runs at the edge
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A tiny (~14kB), ultra-fast web framework that runs identically on Cloudflare Workers, Bun, Deno, AWS Lambda, and Node.js.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most API frameworks were designed for a single-region server. Hono was designed for a world where your function runs in 300 locations simultaneously. &lt;strong&gt;When cold starts are zero and latency is single-digit milliseconds globally, the old pattern of running Express in us-east-1 starts looking embarrassing.&lt;/strong&gt; The ergonomics are close enough to Express that migration isn't a rewrite — it's an afternoon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; API-first products, edge-deployed backends, developers escaping Express or Fastify who don't want to give up familiar routing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/honojs/hono" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://hono.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/honojs/hono" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fhonojs%2Fhono" alt="hono preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2) Neon — Serverless Postgres that branches like Git
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Fully managed, serverless Postgres with instant database branching — one command and you have an isolated copy of your database for any PR or experiment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; The "prod data leaking into staging" problem doesn't need to exist anymore. &lt;strong&gt;Neon's branching model means every preview deployment gets its own database copy, spun up in seconds, torn down automatically — no more shared staging databases everyone's afraid to touch.&lt;/strong&gt; Scale-to-zero billing means pre-revenue startups aren't paying for idle Postgres at 3am.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Early-stage startups, teams using Vercel/Railway preview environments, developers who want managed Postgres without the AWS RDS tax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/neondatabase/neon" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://neon.tech" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/neondatabase/neon" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fneondatabase%2Fneon" alt="neon preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3) Drizzle ORM — The TypeScript ORM that doesn't fight your database
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A TypeScript ORM with a SQL-like query API, zero dependencies, and first-class support for Postgres, MySQL, SQLite, and edge runtimes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Prisma is excellent until it isn't — complex joins, raw migrations, or edge deployments all eventually expose its limits. &lt;strong&gt;Drizzle's philosophy is "SQL is the interface, TypeScript is the wrapper" — you write queries that look like SQL and the types fall out automatically.&lt;/strong&gt; In an era where AI-generated code constantly hits ORM edge cases, having a predictable mental model matters more than magic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; TypeScript-first teams, developers deploying to Cloudflare Workers or Bun, anyone who's hit Prisma's migration drift at least once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/drizzle-team/drizzle-orm" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://orm.drizzle.team" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/drizzle-team/drizzle-orm" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fdrizzle-team%2Fdrizzle-orm" alt="drizzle preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/26tOZ42Mg6pbTUPHW" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExeHp5OXg4bHE5N2lkYWY0NjBjMmc0Y3Q4d2xrMHM3bjlzazhmbGIybiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F26tOZ42Mg6pbTUPHW%2Fgiphy.webp" height="320" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/26tOZ42Mg6pbTUPHW" rel="noopener noreferrer" class="c-link"&gt;
            Happy New Year Celebration GIF by Faith Holland - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Happy New Year Celebration GIF by Faith Holland with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  4) Trigger.dev — Background jobs that don't require a PhD in distributed systems
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source platform for creating long-running background jobs in TypeScript — with built-in retries, scheduling, fan-out, and a real-time observability dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Every startup eventually needs background jobs: send emails, process uploads, sync external APIs, generate AI content. The default move is still "throw it in a queue and hope." &lt;strong&gt;Trigger.dev gives you durable, observable, type-safe background execution with the same DX as writing a regular function — no SQS configuration, no dead-letter queue archaeology.&lt;/strong&gt; With LLM workloads now routinely taking 30–120 seconds, having a real background job platform isn't optional anymore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Startups running AI pipelines, teams replacing Inngest or raw SQS queues, developers who want background jobs that don't silently fail at 4am.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/triggerdotdev/trigger.dev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://trigger.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/triggerdotdev/trigger.dev" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Ftriggerdotdev%2Ftrigger.dev" alt="trigger.dev preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5) shadcn/ui — UI components you copy, own, and never regret
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A collection of accessible, composable UI components built on Radix UI and Tailwind — installed by copying source code directly into your project, not by adding a package dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most component libraries eventually become a cage. &lt;strong&gt;shadcn/ui's model is radical: the code lives in your repo, you own it completely, and upgrading is opt-in and surgical.&lt;/strong&gt; With AI-assisted UI development accelerating, having full source access means LLMs can actually modify your components correctly — not guess at a black-box library's undocumented internals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Startups building internal tools or customer-facing dashboards, developers on Next.js or Remix who want full design control without writing Radix from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/shadcn-ui/ui" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://ui.shadcn.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/shadcn-ui/ui" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fshadcn-ui%2Fui" alt="shadcn/ui preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/3o7TKSjRrfIPjeiVyM" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  6) pompelmi — The one security layer most early-stage startups skip
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (Clean, Malicious, ScanError). No daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; User-generated content is everywhere, and every startup with a file upload is one malicious PDF away from a security incident. &lt;strong&gt;In a world where AI-generated malware is getting harder to detect, dropping a local ClamAV scan into your upload pipeline costs 10 lines of code and potentially saves your entire reputation.&lt;/strong&gt; Most early-stage security checklists skip file scanning because it sounds hard — pompelmi makes it a 5-minute integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Startups accepting file uploads from users, SaaS products handling sensitive documents, developers who want server-side file validation without adding a cloud scanning service to their vendor list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7) OpenNext — Escape Next.js infrastructure lock-in
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source adapter that deploys Next.js anywhere — Cloudflare Workers, AWS Lambda, Deno Deploy — not just Vercel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Vercel is excellent, but "excellent" shouldn't mean "only option." &lt;strong&gt;Next.js became so tightly coupled to Vercel's infrastructure that deploying elsewhere felt like reverse engineering — OpenNext changes that by properly implementing the missing adapter layer.&lt;/strong&gt; For startups with data residency requirements or cost concerns at scale, having a real self-hostable path for Next.js changes the architecture conversation entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Startups evaluating multi-cloud or hybrid deployments, teams hitting Vercel's pricing at scale, developers who need Next.js but can't accept single-cloud lock-in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/opennextjs/opennext" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://opennext.js.org" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/opennextjs/opennext" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fopennextjs%2Fopennext" alt="opennext preview" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8) Supabase — The open-source BaaS that didn't make you regret it later
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source Firebase alternative — Postgres, real-time subscriptions, auth, storage, and edge functions, all in one platform with a self-hostable option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Firebase's lock-in cost finally caught up with enough startups that "Firebase alternative" became a real product category. &lt;strong&gt;Supabase won that category by building on Postgres instead of a proprietary database — meaning your data model is portable from day one and the entire SQL ecosystem just works.&lt;/strong&gt; With vector extensions, branching support, and a maturing edge functions story, Supabase in 2026 is not the scrappy Firebase clone it was in 2020.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Full-stack teams that want to move fast without infrastructure babysitting, startups that need auth + database + storage without stitching three separate services together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/supabase/supabase" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/supabase/supabase" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fsupabase%2Fsupabase" alt="supabase preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/l0HlBO7eyXzSZkJri" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The best startup stacks in 2026 were built for a world where compute is cheap, cold starts are unacceptable, and a 2-person team needs to move like a 20-person team.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why the tools actually winning right now are built around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edge-native execution as the default, not an afterthought&lt;/li&gt;
&lt;li&gt;Type safety all the way from schema to frontend component&lt;/li&gt;
&lt;li&gt;Open-source cores with managed hosting options — not one or the other&lt;/li&gt;
&lt;li&gt;Security baked in early, before an incident forces the conversation&lt;/li&gt;
&lt;li&gt;Boring infrastructure decisions made once, not revisited every quarter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "default stack" gets you started. These tools get you to scale without burning out your team or your runway.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the one tool in your stack you'd refuse to build a startup without?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>programming</category>
      <category>tooling</category>
    </item>
    <item>
      <title>9 Open-Source Tools to Own Your Stack (and Kill Your Cloud Bills) in 2026</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Tue, 05 May 2026 09:59:50 +0000</pubDate>
      <link>https://forem.com/sonotommy/9-open-source-tools-to-own-your-stack-and-kill-your-cloud-bills-in-2026-2lih</link>
      <guid>https://forem.com/sonotommy/9-open-source-tools-to-own-your-stack-and-kill-your-cloud-bills-in-2026-2lih</guid>
      <description>&lt;p&gt;Most "self-hosting" articles are basically a list of Docker Compose files.&lt;/p&gt;

&lt;p&gt;They tell you &lt;em&gt;what&lt;/em&gt; to run. They don't tell you &lt;em&gt;why&lt;/em&gt; the smart money is moving away from managed cloud services — or what a real production stack looks like when you do it right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The shift isn't about being cheap. It's about control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your data. Your pipeline. Your infra. No vendor lock-in, no surprise pricing changes, no terms-of-service update that kills your product overnight.&lt;/p&gt;

&lt;p&gt;Here's the stack I'd build today if I were starting from scratch — tools that are production-grade, actively maintained, and built by teams who eat their own cooking.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I picked these
&lt;/h2&gt;

&lt;p&gt;I'm not ranking by GitHub stars or Hacker News upvotes. I'm ranking by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production-readiness&lt;/strong&gt; — does it hold up under real load, or is it a weekend project with a pretty README?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration story&lt;/strong&gt; — can you replace an existing paid service without a 3-month rewrite?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance burden&lt;/strong&gt; — how much ops work does it create vs. eliminate?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy posture&lt;/strong&gt; — does it send &lt;em&gt;anything&lt;/em&gt; home? Telemetry, usage data, silent pings?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community momentum&lt;/strong&gt; — growing or stagnating?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; In 2026 you can run a full production stack on cheap VPS hardware and own everything from auth to analytics to AI inference — the cloud is a choice, not a requirement.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/26ufdipQqU2lhNA4g" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Ollama — Run any LLM locally, one command&lt;/li&gt;
&lt;li&gt;Coolify — Deploy apps without touching AWS or Vercel&lt;/li&gt;
&lt;li&gt;Plausible — Analytics that don't spy on your users&lt;/li&gt;
&lt;li&gt;Authentik — Auth without the $300/month Auth0 invoice&lt;/li&gt;
&lt;li&gt;Forgejo — Git hosting that's actually yours&lt;/li&gt;
&lt;li&gt;pompelmi — File scanning without sending files to the cloud&lt;/li&gt;
&lt;li&gt;Meilisearch — Search that doesn't bill per query&lt;/li&gt;
&lt;li&gt;Windmill — Automate workflows without Zapier's pricing ceiling&lt;/li&gt;
&lt;li&gt;Netdata — Real-time monitoring without Datadog sticker shock&lt;/li&gt;
&lt;/ol&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/l0MYt5jPR6QX5pnqM" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  1) Ollama — Run any LLM locally, one command
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A runtime that lets you download and run open-weight LLMs (Llama 3, Mistral, Gemma, Phi-4, DeepSeek) on your own hardware with a single CLI command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Every app is getting an AI feature bolted on, and most teams are routing everything through OpenAI — which means user prompts, internal documents, and sensitive data are leaving your infrastructure constantly. &lt;strong&gt;Ollama changes the threat model entirely.&lt;/strong&gt; Your inference stays local. No API key, no usage ceiling, no per-token bill that scales into a surprise. With Apple Silicon and consumer NVIDIA cards getting faster every cycle, "local LLM" has crossed the threshold from demo to production-viable for most workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; privacy-sensitive apps, teams building on open-weight models, developers who want zero inference cost during iteration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/ollama/ollama" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ollama/ollama" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Follama%2Follama" alt="ollama preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2) Coolify — Deploy apps without touching AWS or Vercel
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A self-hostable PaaS that handles deployments, SSL, reverse proxying, database provisioning, and environment management — a full Heroku/Vercel replacement you run on your own VPS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Vercel's pricing restructure and Render's new limits made a lot of teams do the math. &lt;strong&gt;A $6/month Hetzner VPS running Coolify handles most indie projects better than $50/month on a managed platform.&lt;/strong&gt; The interface is clean, deployment from Git is one-click, and it handles Docker Compose natively. The difference from older self-hosted PaaS tools (Dokku, CapRover) is that Coolify actually feels finished.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; indie hackers, small agencies, teams that want Heroku UX on their own hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/coollabsio/coolify" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://coolify.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/coollabsio/coolify" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fcoollabsio%2Fcoolify" alt="coolify preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/QMHoU66sBXqqLqYvGo" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  3) Plausible — Analytics that don't spy on your users
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A lightweight, privacy-first web analytics tool that gives you pageviews, referrers, and traffic sources — without cookies, without GDPR banners, without sending data to Google.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; GA4 is still a compliance headache and a UX nightmare. More critically, a growing segment of users actively block Google Analytics. &lt;strong&gt;Plausible's tracker is under 1KB and so privacy-respecting that it loads on pages where GA4 gets blocked.&lt;/strong&gt; Self-hosted, your data never leaves your server. You get cleaner numbers, not inflated by bot traffic that GA4 struggles to filter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; GDPR-conscious teams, devs building privacy-first products, anyone who tried GA4 onboarding and immediately wanted to quit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/plausible/analytics" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://plausible.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/plausible/analytics" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fplausible%2Fanalytics" alt="plausible preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4) Authentik — Auth without the $300/month Auth0 invoice
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A self-hosted identity provider and SSO platform that supports OAuth2, SAML, LDAP, and SCIM — a full Auth0/Okta alternative you run in a Docker container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Auth0's free tier got gutted, and Okta's breach history hasn't helped confidence. &lt;strong&gt;The irony is that Authentik is genuinely more configurable than the SaaS alternatives&lt;/strong&gt; — custom flows, policy engines, MFA, and social logins — all with no per-MAU pricing. If your app handles sensitive data, running your own auth means you control the session store, token lifetimes, and audit logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; B2B SaaS teams, compliance-sensitive apps, developers who've hit Auth0's pricing wall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/goauthentik/authentik" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://goauthentik.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/goauthentik/authentik" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fgoauthentik%2Fauthentik" alt="authentik preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5) Forgejo — Git hosting that's actually yours
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A community-maintained fork of Gitea that gives you a full GitHub-like experience — repos, issues, PRs, CI/CD hooks, and package registries — on your own infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; GitHub is owned by Microsoft. GitLab's self-hosted path got increasingly hobbled toward enterprise licensing. Forgejo is the community fork that said no thanks to both trajectories. &lt;strong&gt;It runs on a $5 VPS, mirrors to GitHub if you want redundancy, and doesn't phone home.&lt;/strong&gt; For teams handling proprietary code or working in regulated industries, your Git host shouldn't be someone else's SaaS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams with IP concerns, regulated industries, developers who want GitHub UX without GitHub dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/forgejo/forgejo" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://forgejo.org" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/forgejo/forgejo" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fforgejo%2Fforgejo" alt="forgejo preview" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/3o7TKSjRrfIPjeiVyM" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  6) pompelmi — File scanning without sending files to the cloud
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (Clean, Malicious, ScanError). No daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; If you're self-hosting everything else, why are you sending uploaded files to a cloud AV API? &lt;strong&gt;That's a data exfiltration vector you're literally paying for.&lt;/strong&gt; pompelmi gives you local file scanning in one function call — it wraps ClamAV without the usual C-binding pain or process management overhead. With LLM-generated code being used to create novel malware at scale, user upload scanning isn't optional anymore — and it shouldn't require trusting a third party with your files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; self-hosted file storage, Node.js backends with upload endpoints, teams running ClamAV who don't want to manage it directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7) Meilisearch — Search that doesn't bill per query
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A fast, typo-tolerant, open-source search engine you self-host — think Algolia's UX without Algolia's pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Algolia is still excellent. It's also $1/1000 operations, which adds up fast once you have any real traffic. &lt;strong&gt;Meilisearch delivers sub-50ms search out of the box&lt;/strong&gt;, handles typos and faceted filtering natively, and ships as a single binary. The API is close enough to Algolia's that migration is low-friction. For any product where search is a core feature and you're already hosting your own data, this is a no-brainer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; product teams replacing Algolia, developers building search-heavy apps, e-commerce on self-hosted infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/meilisearch/meilisearch" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://meilisearch.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/meilisearch/meilisearch" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fmeilisearch%2Fmeilisearch" alt="meilisearch preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/3oriO0OEd9QIDdllqo" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  8) Windmill — Automate workflows without Zapier's pricing ceiling
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A self-hosted workflow automation and internal tool builder — write scripts in Python, TypeScript, or Go, connect them into flows, trigger via webhook, cron, or API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Zapier's task-based pricing model breaks at scale. n8n is solid but has a steep learning curve. &lt;strong&gt;Windmill is what you'd get if you rebuilt Zapier for engineers&lt;/strong&gt; — scripts are first-class, version-controlled, and testable. Audit logs, RBAC, and secrets management are built in. Teams running internal ops, data pipelines, or API integrations are migrating here because the code is actually theirs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; engineering teams running internal tooling, data teams replacing Make/Zapier for complex flows, developers who want code-first automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/windmill-labs/windmill" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://windmill.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/windmill-labs/windmill" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fwindmill-labs%2Fwindmill" alt="windmill preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9) Netdata — Real-time monitoring without Datadog sticker shock
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A high-resolution, real-time infrastructure monitoring agent that collects thousands of metrics with zero configuration and visualizes them in a live dashboard — fully self-hosted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Datadog's pricing has become a running joke — teams routinely get hit with invoices they didn't budget for. &lt;strong&gt;Netdata installs in 60 seconds, collects at 1-second resolution by default, and the dashboard is genuinely better-looking than most paid alternatives.&lt;/strong&gt; The Netdata Cloud tier is optional — you can run it entirely air-gapped. For teams that moved to self-hosted infra, this closes the observability gap without re-introducing a SaaS dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; self-hosted infrastructure, on-call teams who need high-resolution metrics, developers who tried Prometheus + Grafana and decided life was too short.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/netdata/netdata" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://netdata.cloud" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/netdata/netdata" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fnetdata%2Fnetdata" alt="netdata preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/l0HlBO7eyXzSZkJri" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The cloud is still useful — but "we have to use the cloud" is almost never true anymore.&lt;/p&gt;

&lt;p&gt;The tools above cover the full surface area of a production stack: inference, deployment, analytics, auth, version control, file security, search, automation, and observability. All open source. All self-hostable. All production-grade.&lt;/p&gt;

&lt;p&gt;That's why the best infrastructure decisions being made right now are about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ownership over convenience&lt;/li&gt;
&lt;li&gt;Privacy by architecture, not by policy&lt;/li&gt;
&lt;li&gt;Cost predictability as a first-class engineering requirement&lt;/li&gt;
&lt;li&gt;Vendor lock-in treated as a risk to be mitigated, not a feature&lt;/li&gt;
&lt;li&gt;Local-first as the default, cloud as the deliberate exception&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The irony is that the self-hosted stack is often faster, cheaper, and more reliable than the managed equivalent — once you get past the initial setup.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which managed service are you most tempted to replace right now?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>security</category>
      <category>productivity</category>
    </item>
    <item>
      <title>7 Mistakes Every Developer Makes in 2026 — And the Open-Source Fix for Each</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Mon, 04 May 2026 10:59:30 +0000</pubDate>
      <link>https://forem.com/sonotommy/7-mistakes-every-developer-makes-in-2026-and-the-open-source-fix-for-each-18b3</link>
      <guid>https://forem.com/sonotommy/7-mistakes-every-developer-makes-in-2026-and-the-open-source-fix-for-each-18b3</guid>
      <description>&lt;p&gt;Most "best practices" articles are useless.&lt;/p&gt;

&lt;p&gt;They tell you to "write tests" and "use environment variables" without ever showing you the specific moment those warnings actually matter. You nod along and forget them by tomorrow.&lt;/p&gt;

&lt;p&gt;This is the version with names, repos, and real consequences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every mistake below has a free, self-hostable open-source fix — no SaaS required.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These aren't theoretical. They're the kind of thing that causes a 3am incident, a silent data breach, or a "how did this even work" Slack thread that ends careers.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I picked these
&lt;/h2&gt;

&lt;p&gt;Not by StackOverflow survey popularity or Twitter discourse. I ranked by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost of getting it wrong&lt;/strong&gt; — does this mistake cause a data breach, an outage, or just mild annoyance?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How often developers skip it&lt;/strong&gt; — not because they don't know better, but because the fix felt annoying to set up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whether a drop-in open-source fix exists&lt;/strong&gt; — something you can actually add today, not a six-month architecture project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relevance to 2026 specifically&lt;/strong&gt; — AI-generated code, LLM integrations, and supply chain attacks changed what "default safe" even means&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The most dangerous developer mistakes in 2026 aren't about writing bad code — they're about skipping the invisible layers that make code trustworthy.&lt;/p&gt;
&lt;/blockquote&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/QMHoU66sBXqqLqYvGo" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Infisical — Stop hardcoding secrets, you know who you are&lt;/li&gt;
&lt;li&gt;pompelmi — Your file upload endpoint is a malware delivery service&lt;/li&gt;
&lt;li&gt;SigNoz — You're flying blind the moment you ship&lt;/li&gt;
&lt;li&gt;Atlas — Your database migrations are ticking time bombs&lt;/li&gt;
&lt;li&gt;Scalar — Your API docs are a lie and your team knows it&lt;/li&gt;
&lt;li&gt;Testcontainers — "Works on my machine" never fixed a production outage&lt;/li&gt;
&lt;li&gt;Unkey — Your API is open for abuse right now&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1) Infisical — Stop hardcoding secrets, you know who you are
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A self-hosted secrets manager that replaces &lt;code&gt;.env&lt;/code&gt; files, GitHub secrets, and the shame of finding your API key in a public repo two years later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; AI code assistants train on public repositories. If your key leaks into a commit, it's not just crawled by bots — it's potentially ingested into model training data. &lt;strong&gt;Secrets management is no longer a DevOps concern; it's an AI-era data hygiene issue.&lt;/strong&gt; Infisical gives you a centralized vault with access control, audit logs, and SDK support for Node, Python, Go, and more — replacing the &lt;code&gt;.env&lt;/code&gt; file that currently lives on 7 different machines with no rotation policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Solo devs tired of rotating leaked keys, teams onboarding new engineers, any project using more than 2 third-party APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/Infisical/infisical" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://infisical.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Infisical/infisical" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FInfisical%2Finfisical" alt="Infisical preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/3o7TKSjRrfIPjeiVyM" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  2) pompelmi — Your file upload endpoint is a malware delivery service
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (Clean, Malicious, ScanError). No daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Every app that accepts file uploads is one crafted &lt;code&gt;.pdf&lt;/code&gt; away from distributing malware to other users. &lt;strong&gt;With AI-generated documents now trivially easy to weaponize, most upload handlers still do zero scanning — and they're one shared file away from becoming the distribution vector.&lt;/strong&gt; pompelmi wraps ClamAV in a single function call, runs fully local (no files ever leave your server), and drops into any Node.js middleware stack in under 10 lines. It's the security layer most tutorials forget to mention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Node.js APIs that accept file uploads, SaaS platforms with user-generated content, developers who need antivirus scanning without touching a cloud vendor's data pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3) SigNoz — You're flying blind the moment you ship
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A full-stack observability platform (metrics, traces, logs) built on OpenTelemetry — a self-hosted alternative to Datadog and New Relic that doesn't send your data to a third party.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; The average developer adds a &lt;code&gt;console.log&lt;/code&gt; and calls it monitoring. Then their LLM-powered feature starts misbehaving at scale and they have no idea which requests are failing, why, or for whom. &lt;strong&gt;Observability is the difference between a 5-minute fix and a 3-hour war room.&lt;/strong&gt; SigNoz uses OpenTelemetry natively — no vendor lock-in, no 6-figure Datadog bill, and your traces stay on your own infra.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams running microservices, developers building on top of LLM APIs who need to trace latency per model call, anyone who opened a surprise Datadog invoice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/SigNoz/signoz" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://signoz.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/SigNoz/signoz" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FSigNoz%2Fsignoz" alt="SigNoz preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/3oEjI6SIIHBdRxXI40" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  4) Atlas — Your database migrations are ticking time bombs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A schema management tool that treats your database schema like code — versioned, reviewed, and applied safely. Think &lt;code&gt;terraform plan&lt;/code&gt; but for your Postgres or MySQL schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Half the startups I've seen have migrations that were run manually once and never committed. Someone adds a column in production, forgets to update the migration file, and three months later a new engineer runs &lt;code&gt;migrate up&lt;/code&gt; and breaks staging. &lt;strong&gt;With AI assistants generating schema changes faster than ever, migration debt is compounding at a rate humans can't manually track.&lt;/strong&gt; Atlas gives you a &lt;code&gt;schema diff&lt;/code&gt;, a migration linter, and CI integration so schema changes go through the same review process as your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Postgres/MySQL/SQLite users, teams using ORMs that generate inconsistent migrations, any project where "just run this ALTER TABLE manually" has been said out loud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/ariga/atlas" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://atlasgo.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ariga/atlas" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fariga%2Fatlas" alt="Atlas preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5) Scalar — Your API docs are a lie and your team knows it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A beautiful, interactive API reference generator that renders OpenAPI specs as live documentation with a built-in HTTP client, dark mode, and code generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Every team I've worked with has Swagger docs that are three sprints out of date. Developers end up Slack-messaging the engineer who wrote the endpoint instead of reading docs. &lt;strong&gt;When AI coding assistants generate code against your API, stale docs don't just waste time — they produce broken integrations at scale.&lt;/strong&gt; Scalar auto-renders from your OpenAPI spec, runs as a single script tag or self-hosted service, and actually looks good enough that people open it voluntarily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; API-first teams, developer tools companies, anyone building something other developers will integrate against.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/scalar/scalar" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://scalar.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/scalar/scalar" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fscalar%2Fscalar" alt="Scalar preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/26tOZ42Mg6pbTUPHW" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExYmtwbmdjempjZ29iNmdrNW42anZ3cTFvZnp1eGx2Nmc1bTlxbHdkbCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F26tOZ42Mg6pbTUPHW%2Fgiphy.webp" height="320" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/26tOZ42Mg6pbTUPHW" rel="noopener noreferrer" class="c-link"&gt;
            Happy New Year Celebration GIF by Faith Holland - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Happy New Year Celebration GIF by Faith Holland with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  6) Testcontainers — "Works on my machine" never fixed a production outage
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A library (Node, Go, Java, Python, .NET, and more) that spins up real Docker containers for your tests — actual Postgres, Redis, Kafka, not mocks — and tears them down when the test finishes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Mocking your database in tests is a lie you tell yourself. The mock passes, the query fails in production because your ORM generated slightly different SQL than you expected. &lt;strong&gt;AI assistants now write most test code, and they default to mocking everything — which means your test suite looks green while the actual behavior is untested.&lt;/strong&gt; Testcontainers runs the real dependency for the duration of the test with zero local setup. No "but it worked in CI."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Backend engineers tired of flaky integration tests, teams where AI generates most test scaffolding, any project where unit tests keep missing bugs that only show up in staging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/testcontainers/testcontainers-node" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://testcontainers.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/testcontainers/testcontainers-node" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Ftestcontainers%2Ftestcontainers-node" alt="Testcontainers preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7) Unkey — Your API is open for abuse right now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source API key management and rate limiting platform — create, revoke, and audit API keys with per-key rate limits and usage analytics, all via a single API call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most APIs either have no rate limiting or rely on a regex check on an Authorization header someone wrote at 2am. &lt;strong&gt;When AI agents start calling your API autonomously in tight loops, "no rate limit" becomes a self-inflicted DDoS from your own paying users.&lt;/strong&gt; Unkey treats API keys as first-class objects — each key gets its own rate limit, expiry date, metadata, and audit trail. You can issue temporary keys for trials, revoke them in real time, and see exactly who is hammering your endpoint before it becomes a bill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; API developers who need per-customer rate limits, SaaS builders offering API access as a product feature, anyone whose API will be consumed by AI agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/unkeyed/unkey" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://unkey.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/unkeyed/unkey" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Funkeyed%2Funkey" alt="Unkey preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/l0HlBO7eyXzSZkJri" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The mistakes that sink projects in 2026 aren't syntax errors or wrong algorithms — they're the invisible gaps in the trust layer: unscanned uploads, untracked secrets, unmonitored requests, untested integrations.&lt;/p&gt;

&lt;p&gt;That's why the best open-source tooling right now is focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Making the secure path the easy path, not the expert path&lt;/li&gt;
&lt;li&gt;Replacing "just mock it" with real dependencies that actually behave like production&lt;/li&gt;
&lt;li&gt;Treating secrets, schemas, and API keys as first-class versioned objects&lt;/li&gt;
&lt;li&gt;Building observability in before you need it, not during the incident&lt;/li&gt;
&lt;li&gt;Closing the gap between AI-generated code and production-worthy code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools aren't new ideas. They're the missing defaults that should have shipped with every framework from day one.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What mistake cost you the most hours to debug?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>8 Open-Source Tools That Save Solo Developers Hours Every Week</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Fri, 01 May 2026 06:48:19 +0000</pubDate>
      <link>https://forem.com/sonotommy/8-open-source-tools-that-save-solo-developers-hours-every-week-50e9</link>
      <guid>https://forem.com/sonotommy/8-open-source-tools-that-save-solo-developers-hours-every-week-50e9</guid>
      <description>&lt;p&gt;Most "developer productivity" lists rank tools by GitHub stars. That's not how time actually gets saved.&lt;/p&gt;

&lt;p&gt;The real time sinks for solo developers aren't slow autocomplete or missing keyboard shortcuts. They're the invisible taxes: three hours configuring a backend before writing a line of product code, half a day debugging a secrets leak, an afternoon building glue code that was "temporary" and now runs in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The right stack doesn't make existing work faster — it eliminates entire categories of work before you have to do them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the only metric I used here. Eight tools that each remove a whole class of problem from your week.&lt;/p&gt;

&lt;p&gt;I filtered them by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it replace something I'd otherwise build from scratch or pay $20+/month for?&lt;/li&gt;
&lt;li&gt;Can I be productive with it in under 30 minutes?&lt;/li&gt;
&lt;li&gt;Is it self-hostable and actively maintained?&lt;/li&gt;
&lt;li&gt;Does it stay out of my way after the initial setup?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Solo developers who ship the fastest in 2026 aren't the most skilled — they're the ones with the shortest distance between idea and deployed feature.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;n8n — Automation without writing automation code&lt;/li&gt;
&lt;li&gt;Pocketbase — Your entire backend in one binary&lt;/li&gt;
&lt;li&gt;Hoppscotch — API testing without the Postman subscription&lt;/li&gt;
&lt;li&gt;Trigger.dev — Background jobs without the infrastructure tax&lt;/li&gt;
&lt;li&gt;pompelmi — File security scanning in 10 lines of Node.js&lt;/li&gt;
&lt;li&gt;Infisical — Secrets management that actually prevents leaks&lt;/li&gt;
&lt;li&gt;Mermaid — Diagrams in Markdown, diagramming app deleted&lt;/li&gt;
&lt;li&gt;Zed — An editor fast enough to get out of your way&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1) n8n — Automation without writing automation code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A self-hostable workflow automation platform that connects any API, database, or service with a visual editor — and lets you drop into JavaScript when the visual part isn't enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Every solo project eventually accumulates glue code — send a Slack message when a row is inserted, sync a form to a CRM, hit a webhook on a schedule. That code is always "just temporary" and then runs in production for two years. &lt;strong&gt;n8n replaces that entire category of throwaway code with a single self-hosted instance you control.&lt;/strong&gt; With AI nodes built in, your automation layer can call LLM APIs, parse AI responses, and route logic — without you writing the plumbing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Solo founders building internal tools, developers who want Zapier-level power without Zapier's pricing, anyone with "trigger X when Y happens" in their backlog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/n8n-io/n8n" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://n8n.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/n8n-io/n8n" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fn8n-io%2Fn8n" alt="n8n preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2) Pocketbase — Your entire backend in one binary
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A single Go binary that gives you a real-time database, file storage, authentication, and an admin UI — no cloud account, no Docker Compose, no migrations config required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Bootstrapping a backend used to mean: pick a cloud provider, configure IAM, spin up a database, wire up auth, add file storage, write your first migration. That's an entire day before you've built any product. &lt;strong&gt;Pocketbase compresses that whole setup into one binary and one folder.&lt;/strong&gt; For MVPs, internal tools, and early SaaS products, it removes the "infrastructure" category from your week entirely. When you outgrow it, you've already validated the thing you're building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Solo developers building MVPs fast, developers who want a self-hosted Firebase alternative, projects where you'd otherwise reach for Supabase on day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pocketbase/pocketbase" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://pocketbase.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pocketbase/pocketbase" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpocketbase%2Fpocketbase" alt="pocketbase preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/26ufdipQqU2lhNA4g" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  3) Hoppscotch — API testing without the Postman subscription
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A lightweight, open-source API development platform — REST, GraphQL, WebSocket, gRPC — that runs in your browser or self-hosted, with no Electron app and no account required to save collections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Postman evolved from "free API tool" to "enterprise collaboration platform with a $49/month team plan" in about three years. Hoppscotch is what Postman was before it became bloatware. &lt;strong&gt;It opens in a browser tab, saves your collections locally, and doesn't require you to agree to a terms update every time you need to test an endpoint.&lt;/strong&gt; With more AI-generated APIs and LLM endpoints to wire up, having a fast zero-friction testing tool matters more than ever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who test APIs daily without needing team collaboration features, backend engineers building REST or GraphQL APIs, anyone whose machine slows down when Postman opens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/hoppscotch/hoppscotch" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://hoppscotch.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hoppscotch/hoppscotch" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fhoppscotch%2Fhoppscotch" alt="hoppscotch preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4) Trigger.dev — Background jobs without the infrastructure tax
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A developer-first platform for building background jobs, scheduled tasks, and event-driven workflows directly in your TypeScript codebase — with a dashboard showing exactly what ran, when, and why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Background jobs are "solved" in theory and painful in practice. You either bolt on Redis + BullMQ and manage the queue yourself, or you pay for a managed job service. &lt;strong&gt;Trigger.dev sits in your codebase like a regular function but runs on managed infrastructure — no separate worker process, no queue configuration, no Redis.&lt;/strong&gt; As more apps need async AI pipelines and long-running LLM calls, having a TypeScript-native job system that doesn't require a separate service is quietly becoming essential.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Node.js and TypeScript developers building apps with async workflows, developers who want Celery-like functionality without adding Python or a separate service, projects on Vercel or serverless where long-running tasks don't fit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/triggerdotdev/trigger.dev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://trigger.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/triggerdotdev/trigger.dev" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Ftriggerdotdev%2Ftrigger.dev" alt="trigger.dev preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/QMHoU66sBXqqLqYvGo" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  5) pompelmi — File security scanning in 10 lines of Node.js
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (Clean, Malicious, ScanError). No daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; If your app accepts file uploads, you almost certainly don't scan them for malware — because the setup friction is too high. Spinning up ClamAV, managing its daemon, parsing CLI output correctly: nobody does this solo until something goes wrong. &lt;strong&gt;pompelmi removes every one of those friction points: install the package, call one function, get back a typed result.&lt;/strong&gt; With AI-generated files, document parsing APIs, and LLM code execution making user-uploaded content more dangerous and more common, scanning at upload time is a baseline expectation, not an edge case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Node.js developers building any file upload feature, solo devs who want a security baseline without a security team, apps handling user-generated documents, PDFs, or archives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6) Infisical — Secrets management that actually prevents leaks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source platform for managing environment variables and secrets across environments, with a CLI, SDKs for every major language, and GitHub Actions integration — fully self-hostable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; &lt;code&gt;.env&lt;/code&gt; files committed to GitHub have caused more security incidents than any other single developer mistake in the last decade. The problem isn't carelessness — it's that &lt;code&gt;.env&lt;/code&gt; is the path of least resistance. &lt;strong&gt;Infisical replaces the &lt;code&gt;.env&lt;/code&gt; workflow with a proper secrets manager you control, without paying $50/month for HashiCorp Vault or fighting AWS Secrets Manager's IAM complexity.&lt;/strong&gt; In 2026, with AI coding assistants reading your project context, the surface area for accidentally exposing a secret has grown considerably.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Solo developers managing multiple environments, teams where secrets live in someone's Downloads folder or get copy-pasted in DMs, projects where &lt;code&gt;.env.production&lt;/code&gt; exists on more than one machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/Infisical/infisical" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://infisical.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Infisical/infisical" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FInfisical%2Finfisical" alt="infisical preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/3oriO0OEd9QIDdllqo" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  7) Mermaid — Diagrams in Markdown, diagramming app deleted
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A JavaScript-based diagramming tool that turns plain text into flowcharts, sequence diagrams, ERDs, Gantt charts, and more — renders natively in GitHub, GitLab, Notion, and most modern wikis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Architecture diagrams rot the moment they're created. Nobody updates a Lucidchart file after a refactor because the file lives in a browser tab, divorced from the codebase. &lt;strong&gt;Mermaid diagrams live in your repo, version-controlled, next to the code they describe — which means they actually get updated.&lt;/strong&gt; GitHub renders Mermaid natively in Markdown files, so your &lt;code&gt;README.md&lt;/code&gt; can have a live system diagram with zero extra tooling. With more AI tools reading codebases to answer questions, having machine-readable architecture descriptions in your repo is quietly becoming valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers documenting system architecture, anyone who has a stale PDF diagram somewhere, teams where the actual architecture exists only in one person's head.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/mermaid-js/mermaid" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://mermaid.js.org" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mermaid-js/mermaid" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fmermaid-js%2Fmermaid" alt="mermaid preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8) Zed — An editor fast enough to get out of your way
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A GPU-accelerated code editor written in Rust, built for performance and collaboration, with native AI integration and a growing extension ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; VS Code is the safe choice. It's also 1.8GB of Electron that takes 3 seconds to open and slows down on large codebases. &lt;strong&gt;Zed opens in under a second, has zero input lag even in monorepos, and integrates AI features natively — without the extension-chasing that most VS Code AI setups require.&lt;/strong&gt; For solo developers who live in their editor all day, this is one of the rare tool switches that makes a noticeable difference in daily energy — the friction just disappears.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who've accepted VS Code lag as a fact of life, Rust or Go developers who want a native editor, anyone whose editor currently loads slower than their terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/zed-industries/zed" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://zed.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/zed-industries/zed" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fzed-industries%2Fzed" alt="zed preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://giphy.com/gifs/l0HlBO7eyXzSZkJri" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;giphy.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The best solo dev tooling isn't about doing the same work faster — it's about not having to do entire categories of work at all.&lt;/p&gt;

&lt;p&gt;That's the pattern across every tool above. Each one eliminates a problem rather than optimizing it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automation that replaces glue code you'd write and forget&lt;/li&gt;
&lt;li&gt;A backend that removes the infrastructure setup category entirely&lt;/li&gt;
&lt;li&gt;Secrets management that makes &lt;code&gt;.env&lt;/code&gt; files a historical artifact&lt;/li&gt;
&lt;li&gt;File security scanning with zero ops overhead&lt;/li&gt;
&lt;li&gt;Diagrams that actually stay in sync with your codebase&lt;/li&gt;
&lt;li&gt;An editor that doesn't fight you for attention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The solo developer who ships the most in 2026 isn't the one with the deepest skills in any single area. It's the one who systematically removed the most friction from their stack.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the one tool in your stack that saved you the most time — and that most developers still don't know about?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>8 AI Coding Agents That Actually Ship Production Code in 2026</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Thu, 30 Apr 2026 06:29:10 +0000</pubDate>
      <link>https://forem.com/sonotommy/8-ai-coding-agents-that-actually-ship-production-code-in-2026-18ch</link>
      <guid>https://forem.com/sonotommy/8-ai-coding-agents-that-actually-ship-production-code-in-2026-18ch</guid>
      <description>&lt;p&gt;Most "AI agent" articles list frameworks for building agents.&lt;/p&gt;

&lt;p&gt;This isn't that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using an AI coding agent and building one are completely different problems.&lt;/strong&gt; Using one means file system access, real test suites, actual PRs, production config files. The bar is higher than "it autocompletes well."&lt;/p&gt;

&lt;p&gt;I've been watching teams use — and abandon — these tools on real codebases. Not demos. Not toy repos. Here's what's actually moving the needle in 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I picked these
&lt;/h2&gt;

&lt;p&gt;I'm not ranking by GitHub stars or VC funding. I'm ranking by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Does it work on codebases you didn't write?&lt;/strong&gt; Most agents fall apart past 3 files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it respect your existing workflow?&lt;/strong&gt; Git, CI, tests — not a sandbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can it hold context across multiple files?&lt;/strong&gt; The whole point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it know when to stop and ask?&lt;/strong&gt; Autonomy without judgment is a liability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Would I trust it on a Friday afternoon deploy?&lt;/strong&gt; Honest test.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; AI coding agents are past the demo phase — the ones worth using in 2026 edit real files, run real tests, and ask before they touch your main branch.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xT9IgDECfnfLzBM8M8/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xT9IgDECfnfLzBM8M8/giphy.gif" alt="guy typing fast" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Claude Code — Terminal-native agent that reasons before it acts&lt;/li&gt;
&lt;li&gt;Aider — Git-aware CLI pair programmer, fully open source&lt;/li&gt;
&lt;li&gt;Cursor — AI-first editor with a multi-file agent mode that actually ships&lt;/li&gt;
&lt;li&gt;OpenHands — Self-hostable autonomous software engineer&lt;/li&gt;
&lt;li&gt;Cline — VS Code agent that reads your repo and deploys&lt;/li&gt;
&lt;li&gt;pompelmi — The security check before AI-generated code ships&lt;/li&gt;
&lt;li&gt;SWE-agent — Princeton's agent that resolves GitHub issues on its own&lt;/li&gt;
&lt;li&gt;Sweep — Turns GitHub issues into PRs without a keystroke&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1) Claude Code — Terminal-native agent that reasons before it acts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A CLI agent from Anthropic that runs in your terminal, reads your files, runs shell commands, and edits code across your entire repository without leaving the command line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most AI tools work on files you paste into a chat window. Claude Code works on your actual project — it greps, runs tests, reads git history, and makes decisions based on what it finds. &lt;strong&gt;The key differentiator is that it asks before doing anything destructive, which is the behavior you want in a tool that has write access to your repo.&lt;/strong&gt; In a world where agents are proliferating fast, "does it know when to stop" is the real benchmark.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Solo developers building full-stack apps, teams that want an agent integrated into their existing terminal workflow, anyone who wants Claude's reasoning applied directly to their codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://claude.ai/code" rel="noopener noreferrer"&gt;Website&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%2Fmmamwjcxrninnvil87ui.gif" 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%2Fmmamwjcxrninnvil87ui.gif" alt="Fry not sure meme" width="320" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2) Aider — Git-aware CLI pair programmer, fully open source
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source CLI tool that connects to GPT-4, Claude, Gemini, or any local LLM and makes code edits directly in your repo, committing each change with a sensible message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Aider is what you use when you want control. No UI, no lock-in, no black box. &lt;strong&gt;It writes the code, commits it, and stays out of your way — and the team publishes SWE-bench results for every supported model so you know exactly what you're getting.&lt;/strong&gt; That kind of transparency is rare in a space full of marketing claims.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who live in the terminal, open-source maintainers, teams that need LLM-agnostic coding agent tooling they can audit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/Aider-AI/aider" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://aider.chat" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Aider-AI/aider" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FAider-AI%2Faider" alt="Aider preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3) Cursor — AI-first editor with a multi-file agent mode that ships
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A VS Code fork where the AI is embedded at the core — not a plugin — with an agent mode that edits files, runs terminal commands, reads error output, and iterates until tests pass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Cursor's agent mode isn't autocomplete at scale. It reads the error, proposes a fix, applies it, runs the test, and loops. &lt;strong&gt;That edit → test → fix cycle is what makes it feel like a junior engineer who actually follows through instead of handing you a diff and walking away.&lt;/strong&gt; Jump-to-definition context means it rarely hallucinates APIs it doesn't know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Frontend and full-stack developers, teams that want AI deeply embedded in their editing workflow, anyone who finds GitHub Copilot too shallow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4) OpenHands — Self-hostable autonomous software engineer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source platform (formerly OpenDevin) where you assign an AI agent a task and it spins up a sandboxed environment, browses the web, writes code, runs tests, and submits PRs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; OpenHands is the fully autonomous end of the spectrum — you open an issue and it takes over. &lt;strong&gt;What makes it different from closed alternatives is that you own the infrastructure: self-host it, plug in your own LLM, keep your code off third-party servers.&lt;/strong&gt; For companies with compliance requirements, that's non-negotiable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Engineering teams that want autonomous issue resolution, security-conscious orgs that can't send source code to external APIs, AI researchers building on top of a full agent stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/All-Hands-AI/OpenHands" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.all-hands.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/All-Hands-AI/OpenHands" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FAll-Hands-AI%2FOpenHands" alt="OpenHands preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://i.giphy.com/media/a5viI92PAF2LU/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/a5viI92PAF2LU/giphy.gif" alt="cat on computer" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5) Cline — VS Code agent that reads your repo and deploys
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A VS Code extension (formerly claude-dev) that gives Claude or any compatible LLM full access to your file system, terminal, and browser — with explicit permission prompts before every action.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Cline operates with a level of transparency most agents skip. Every file edit, every terminal command — it asks first. &lt;strong&gt;That sounds slow, but in practice it builds exactly the trust you need to let an agent touch production config files and deployment scripts.&lt;/strong&gt; It's the agent version of "show your work."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers who want agent capabilities without giving up control, teams onboarding AI into a mature codebase with strict review processes, anyone building or stress-testing agent tooling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/cline/cline" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cline/cline" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fcline%2Fcline" alt="Cline preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6) pompelmi — The security check before AI-generated code ships
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (&lt;code&gt;Clean&lt;/code&gt;, &lt;code&gt;Malicious&lt;/code&gt;, &lt;code&gt;ScanError&lt;/code&gt;) — no daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; AI agents download dependencies, generate scripts, pull in external assets. Every file an agent touches is a potential attack surface. &lt;strong&gt;Most developers add coding agents to their pipeline without adding a single new security check — pompelmi is the one you add in 10 minutes that closes that gap.&lt;/strong&gt; As agents become responsible for more file I/O, a programmatic scan at the output layer isn't paranoid; it's just good hygiene.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams running AI agents in CI/CD pipelines, Node.js apps that handle agent-generated or user-uploaded files, security-conscious developers who want local scanning with no cloud dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://i.giphy.com/media/QMHoU66sBXqqLqYvGo/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/QMHoU66sBXqqLqYvGo/giphy.gif" alt="This is fine dog" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7) SWE-agent — Princeton's agent that resolves GitHub issues on its own
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source research agent from Princeton NLP that takes a GitHub issue URL, spins up a sandboxed environment, and produces a working patch — no human in the loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; SWE-agent was one of the first agents to score competitively on SWE-bench, the benchmark that measures real-world GitHub issue resolution. &lt;strong&gt;What makes it valuable beyond the benchmark is that you can run it yourself and study exactly where it succeeds and fails.&lt;/strong&gt; For engineers building their own agents, that transparency is more useful than a polished product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; AI researchers, developers evaluating coding agent capabilities, open-source maintainers experimenting with automated issue triage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/princeton-nlp/SWE-agent" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://swe-agent.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/princeton-nlp/SWE-agent" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fprinceton-nlp%2FSWE-agent" alt="SWE-agent preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8) Sweep — Turns GitHub issues into PRs without a keystroke
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An AI GitHub app that reads your issue, searches your codebase, writes the code, and opens a PR — you review and merge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Sweep sits at the intersection of AI agents and existing developer workflows. No new tools, no new terminals — just a GitHub issue that becomes a PR. &lt;strong&gt;It's the agent for teams that don't want to change how they work, just augment it.&lt;/strong&gt; With codebase search and iterative refinement built in, it handles the kind of small, scoped tasks that quietly eat hours every week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams with a backlog of small improvements, open-source maintainers with more issues than bandwidth, engineering leads who want to delegate clearly scoped tasks without changing the review process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/sweepai/sweep" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://sweep.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sweepai/sweep" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fsweepai%2Fsweep" alt="Sweep preview" width="1200" height="600"&gt;&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%2Ftxuvg2xf9pcylz0tcxnu.gif" 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%2Ftxuvg2xf9pcylz0tcxnu.gif" alt="mic drop" width="400" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;AI coding agents are no longer science projects — they're part of how software gets written in 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That shift creates a new category of problem: how do you maintain quality, security, and judgment when an agent has file system access and can open PRs on your behalf?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The best teams right now are thinking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which tasks are safe to fully delegate vs. which need a human in the loop&lt;/li&gt;
&lt;li&gt;What security checks belong at the output layer of any AI pipeline&lt;/li&gt;
&lt;li&gt;How to give agents enough context to succeed without exposing sensitive data&lt;/li&gt;
&lt;li&gt;Building trust incrementally — not flipping a switch to full autonomy&lt;/li&gt;
&lt;li&gt;What "good" looks like when you're reviewing AI-authored code at scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tools in this list aren't replacements for engineering judgment. They're multipliers for it.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which AI agent have you actually shipped production code with?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>8 Open-Source Security Tools Every Developer Should Be Using in 2026</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Wed, 29 Apr 2026 11:26:19 +0000</pubDate>
      <link>https://forem.com/sonotommy/8-open-source-security-tools-every-developer-should-be-using-in-2026-3ai0</link>
      <guid>https://forem.com/sonotommy/8-open-source-security-tools-every-developer-should-be-using-in-2026-3ai0</guid>
      <description>&lt;p&gt;Most developer security content is a checklist you'll never finish.&lt;/p&gt;

&lt;p&gt;OWASP Top 10. Rotate your secrets. Use HTTPS. Thanks, very helpful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real gap in 2026 isn't knowledge — it's friction.&lt;/strong&gt; Developers know they should scan their containers, audit their git history, and check for exposed endpoints. They just don't, because the tooling used to be either expensive, enterprise-only, or a full-time job to configure.&lt;/p&gt;

&lt;p&gt;That's changed. The open-source security stack is quietly excellent now. These 8 tools prove it.&lt;/p&gt;

&lt;p&gt;I'm not picking by GitHub stars or conference popularity. I'm picking by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Runs in CI without a plugin ecosystem&lt;/strong&gt; — if it can't slot into GitHub Actions in under 10 minutes, it won't survive a sprint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actionable output&lt;/strong&gt; — tells you what to fix, not just that something's wrong&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actively maintained&lt;/strong&gt; — last commit in the past 90 days matters more than total stars&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero or near-zero config to get started&lt;/strong&gt; — friction kills adoption, every time&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The open-source security stack now covers secrets detection, container scanning, runtime monitoring, and file safety — for free, in minutes — and there's no excuse not to use it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/QMHoU66sBXqqLqYvGo/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/QMHoU66sBXqqLqYvGo/giphy.gif" alt="This is fine dog" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Trivy — One scanner for containers, IaC, and repos&lt;/li&gt;
&lt;li&gt;Semgrep — Catch security bugs before they ship&lt;/li&gt;
&lt;li&gt;Trufflehog — Find the secrets you forgot you committed&lt;/li&gt;
&lt;li&gt;Gitleaks — Stop secrets from ever entering git history&lt;/li&gt;
&lt;li&gt;pompelmi — The file scanning layer Node apps keep skipping&lt;/li&gt;
&lt;li&gt;OWASP ZAP — Automated web security testing without a pen tester&lt;/li&gt;
&lt;li&gt;Falco — Runtime visibility into what your containers actually do&lt;/li&gt;
&lt;li&gt;Nuclei — Scan your own attack surface before someone else does&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1) Trivy — One scanner for containers, IaC, and repos
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A fast, comprehensive vulnerability scanner covering containers, filesystems, Git repos, Kubernetes configs, and IaC — one binary, one command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most teams scan their application code and ignore the OS packages baked into their Docker images. &lt;strong&gt;That's where a growing share of supply chain attacks land.&lt;/strong&gt; Trivy closes this gap with a single &lt;code&gt;trivy image your-image:tag&lt;/code&gt;. It also scans Terraform and Kubernetes configs for misconfigurations, which means one tool covers three separate concerns most teams handle with three separate paid products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; DevOps engineers shipping containers, backend teams using GitHub Actions, anyone moving to Kubernetes who hasn't audited their manifests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/aquasecurity/trivy" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://trivy.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aquasecurity/trivy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Faquasecurity%2Ftrivy" alt="Trivy preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2) Semgrep — Catch security bugs before they ship
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A static analysis tool that runs custom YAML rules against your codebase to catch security bugs, anti-patterns, and banned API usage at the source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; AI coding assistants are shipping code faster than review cycles can catch. &lt;strong&gt;LLMs confidently produce SQL concatenation, insecure deserialization, and hardcoded credentials — because they've seen a million examples of each.&lt;/strong&gt; Semgrep's open ruleset catches these patterns before they hit a PR. One rule catches every instance across the entire codebase. You can also write your own rules for internal patterns — things your team has agreed never to do — and enforce them automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Security engineers, teams using Copilot or Cursor, code review automation in monorepos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/semgrep/semgrep" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://semgrep.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/semgrep/semgrep" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fsemgrep%2Fsemgrep" alt="Semgrep preview" width="1200" height="600"&gt;&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%2Fmmamwjcxrninnvil87ui.gif" 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%2Fmmamwjcxrninnvil87ui.gif" alt="Fry not sure" width="320" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Trufflehog — Find the secrets you forgot you committed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A secrets scanner that searches git history, S3 buckets, GitHub repos, and CI logs for credentials — and then verifies whether they're still live against the actual provider APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; "I'll rotate that later" costs companies millions every year in breach costs. The difference between Trufflehog and every other secrets scanner is verification. &lt;strong&gt;It doesn't just find strings that look like API keys — it confirms whether they're active.&lt;/strong&gt; That distinction kills false positives. Verified positives demand action in a way pattern matches never do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Security audits, incident response when a key might have leaked, teams inheriting a codebase they didn't write.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/trufflesecurity/trufflehog" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://trufflesecurity.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/trufflesecurity/trufflehog" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Ftrufflesecurity%2Ftrufflehog" alt="Trufflehog preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4) Gitleaks — Stop secrets from ever entering git history
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A fast secrets scanner built for pre-commit hooks and CI pipelines — catches credentials before they're committed, not after.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Trufflehog is your forensic tool. Gitleaks is your firewall. &lt;strong&gt;The moment a secret hits git history, it's effectively public — every contributor, every fork, every CI log has it.&lt;/strong&gt; One &lt;code&gt;gitleaks protect --staged&lt;/code&gt; in your pre-commit config prevents this entirely. It runs in milliseconds. The ROI on one caught credential is incalculable. This should be in every project's &lt;code&gt;.pre-commit-config.yaml&lt;/code&gt; by default, and it isn't — that's the gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Individual developers, open-source maintainers, teams onboarding junior engineers who haven't internalized "never commit credentials."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/gitleaks/gitleaks" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/gitleaks/gitleaks" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fgitleaks%2Fgitleaks" alt="Gitleaks preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5) pompelmi — The file scanning layer Node apps keep skipping
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (Clean, Malicious, ScanError). No daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most Node.js apps that accept file uploads have no malware scanning whatsoever. &lt;strong&gt;With AI tools making obfuscated payloads trivially easy to generate, that's a gap that's actively being exploited.&lt;/strong&gt; pompelmi wraps ClamAV's battle-tested engine behind a single async function call. You pass it a file path, you get a typed result back. Five lines of code and your upload endpoint has enterprise-grade file scanning — something most teams either skip entirely or outsource to a $200/month API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Node.js apps handling user uploads, internal tools processing documents from external sources, SaaS platforms where shared file storage is a trust boundary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://i.giphy.com/media/xT9IgDECfnfLzBM8M8/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xT9IgDECfnfLzBM8M8/giphy.gif" alt="Guy typing fast" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6) OWASP ZAP — Automated web security testing without a pen tester
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source web application scanner that finds vulnerabilities like XSS, SQL injection, broken authentication, and misconfigured headers through active and passive scanning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; A professional penetration test costs $10k–$50k and happens once a year if you're lucky. &lt;strong&gt;The window between "last pentest" and "next pentest" is exactly where most breaches happen.&lt;/strong&gt; ZAP closes that window by running automated scans on every deploy in CI. It doesn't replace a pentester — it eliminates the embarrassing findings so your pentest budget goes toward the hard stuff, not the obvious stuff that should never have shipped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Web developers, QA engineers, startups that can't afford quarterly pentests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/zaproxy/zaproxy" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.zaproxy.org" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/zaproxy/zaproxy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fzaproxy%2Fzaproxy" alt="OWASP ZAP preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7) Falco — Runtime visibility into what your containers actually do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A runtime security tool that uses eBPF to monitor syscalls in containers and Kubernetes, alerting on anomalous behavior based on configurable rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Vulnerability scanning tells you what &lt;em&gt;could&lt;/em&gt; happen. &lt;strong&gt;Falco tells you what's happening right now.&lt;/strong&gt; If a container suddenly reads &lt;code&gt;/etc/shadow&lt;/code&gt;, spawns a shell, or opens an unexpected outbound connection, Falco fires an alert. Cryptomining and lateral movement attacks increasingly target containerized workloads specifically because runtime visibility is rare. Falco is the difference between detecting a breach in minutes versus discovering it in a quarterly audit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; DevSecOps teams, Kubernetes operators, anyone running multi-tenant infrastructure where container escape is a real threat model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/falcosecurity/falco" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://falco.org" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/falcosecurity/falco" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Ffalcosecurity%2Ffalco" alt="Falco preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8) Nuclei — Scan your own attack surface before someone else does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A fast, template-based vulnerability scanner that checks your infrastructure, APIs, and web apps against thousands of known CVEs, exposed endpoints, and misconfigurations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Bug bounty hunters use Nuclei. Red teams use Nuclei. Nation-state threat actors have their own version of Nuclei. &lt;strong&gt;The only question is whether you're running it on yourself before they do.&lt;/strong&gt; Thousands of community-contributed templates cover everything from exposed &lt;code&gt;.env&lt;/code&gt; files to misconfigured S3 buckets to outdated login panels. Running &lt;code&gt;nuclei -u your-domain.com&lt;/code&gt; takes 5 minutes and routinely surfaces things that have been quietly public for months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Security engineers, developers managing their own infrastructure, bug bounty hunters, anyone who's never actually tested what their domain exposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/projectdiscovery/nuclei" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://nuclei.projectdiscovery.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/projectdiscovery/nuclei" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fprojectdiscovery%2Fnuclei" alt="Nuclei preview" width="1200" height="600"&gt;&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%2Ftxuvg2xf9pcylz0tcxnu.gif" 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%2Ftxuvg2xf9pcylz0tcxnu.gif" alt="Mic drop" width="400" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The open-source security stack has quietly caught up to the threat landscape — the only question is whether your workflow has.&lt;/p&gt;

&lt;p&gt;The teams doing security right in 2026 aren't buying more tools. They're building on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shift-left scanning that blocks issues before a commit is made&lt;/li&gt;
&lt;li&gt;Runtime visibility, not just pre-deploy checks&lt;/li&gt;
&lt;li&gt;Verified detection over noisy pattern matching&lt;/li&gt;
&lt;li&gt;Zero-friction CI integration that runs on every push&lt;/li&gt;
&lt;li&gt;Open-source tooling you can audit, extend, and trust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security used to be something you bolted on before a compliance audit. The teams shipping with confidence now treat it the same way they treat linting — automatic, opinionated, and non-negotiable from day one.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the one security tool you'd refuse to ship without?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>8 Open-Source Frameworks for Building AI Agents That Actually Work in 2026</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Mon, 27 Apr 2026 06:02:00 +0000</pubDate>
      <link>https://forem.com/sonotommy/8-open-source-frameworks-for-building-ai-agents-that-actually-work-in-2026-1hhm</link>
      <guid>https://forem.com/sonotommy/8-open-source-frameworks-for-building-ai-agents-that-actually-work-in-2026-1hhm</guid>
      <description>&lt;p&gt;Most "AI agent" tutorials show you how to build a chatbot with memory.&lt;/p&gt;

&lt;p&gt;That's not an agent. That's a stateful chatbot with a good PR team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real agent makes decisions, calls tools, recovers from failures, and produces outputs your users actually care about.&lt;/strong&gt; The gap between demo and production is where most of these frameworks live or die.&lt;/p&gt;

&lt;p&gt;I've watched teams ship with half the tools on this list and abandon the other half after hitting walls they didn't expect. This is the ones that survived contact with real users.&lt;/p&gt;

&lt;p&gt;I'm not ranking by GitHub stars or VC funding. I'm ranking by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it actually hold up when the happy path breaks?&lt;/li&gt;
&lt;li&gt;Can you debug it when something goes wrong at 2am?&lt;/li&gt;
&lt;li&gt;Does it have real escape hatches, or does it lock you into its abstractions?&lt;/li&gt;
&lt;li&gt;Would I bet a production system on it?&lt;/li&gt;
&lt;li&gt;Is the community solving real problems, not just demo problems?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The AI agent frameworks worth betting on in 2026 are the ones built around state, control flow, and real tool integration — not just "wrap GPT-4 in a while loop."&lt;/p&gt;
&lt;/blockquote&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%2Fyhjbc01d3kndr3k0yprh.gif" 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%2Fyhjbc01d3kndr3k0yprh.gif" alt="Michael Scott YES" width="370" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;LangGraph — Stateful agent orchestration without the chaos&lt;/li&gt;
&lt;li&gt;CrewAI — Multi-agent teams that divide work, not just route messages&lt;/li&gt;
&lt;li&gt;Flowise — Visual LLM pipelines that actually ship&lt;/li&gt;
&lt;li&gt;AutoGen — Agent-to-agent collaboration with real observability&lt;/li&gt;
&lt;li&gt;Open Interpreter — Your agent can run code now, not just suggest it&lt;/li&gt;
&lt;li&gt;pompelmi — The security scan your agent skips when handling uploads&lt;/li&gt;
&lt;li&gt;Dify — Full LLM app platform for teams who don't want to start from scratch&lt;/li&gt;
&lt;li&gt;Semantic Kernel — Grounding agents in real enterprise data&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1) LangGraph — Stateful agent orchestration without the chaos
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A graph-based framework for building stateful, multi-step AI agents where each node is a function and edges define control flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most agents fail because "retry on error" isn't a strategy — it's hope. LangGraph gives you actual control flow: conditional edges, human-in-the-loop checkpoints, and persistent state across steps. &lt;strong&gt;The moment your agent needs to pause, branch, or recover from a failed tool call, you need a graph, not a chain.&lt;/strong&gt; With AI-generated code now part of most dev workflows, the agents that handle edge cases are the ones teams keep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; backend engineers building multi-step pipelines, teams running agents in production with real error budgets, anyone who's been burned by a chain that silently fails mid-run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/langchain-ai/langgraph" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.langchain.com/langgraph" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/langchain-ai/langgraph" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Flangchain-ai%2Flanggraph" alt="LangGraph preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2) CrewAI — Multi-agent teams that divide work, not just route messages
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A framework for orchestrating role-based AI agents that collaborate on tasks — each agent has a defined role, goal, and set of tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Single-agent systems plateau fast. The ceiling isn't the LLM — it's one agent trying to research, write, validate, and format in a single context window. &lt;strong&gt;CrewAI lets you split cognition the same way you'd split a team.&lt;/strong&gt; Researcher hands off to writer hands off to reviewer. In 2026, this pattern is becoming standard for anything beyond one-shot generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; content pipelines, research automation, code review workflows, teams that want agents to mirror how humans actually collaborate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/crewAIInc/crewAI" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.crewai.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/crewAIInc/crewAI" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FcrewAIInc%2FcrewAI" alt="CrewAI preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://i.giphy.com/media/xT9IgDECfnfLzBM8M8/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xT9IgDECfnfLzBM8M8/giphy.gif" alt="guy typing fast" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3) Flowise — Visual LLM pipelines that actually ship
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A drag-and-drop UI for building LLM apps and agent workflows — think n8n but for AI pipelines, with a Node.js backend you can self-host.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Not every team has an ML engineer. Flowise lets non-specialists build RAG pipelines, chatbots, and agent flows without writing orchestration code. &lt;strong&gt;The real unlock is that it exports to working code — you're not locked into the visual layer forever.&lt;/strong&gt; As companies mature their AI tooling, Flowise is where experiments start before graduating to LangGraph or custom code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; product teams prototyping AI features fast, solo founders validating ideas before committing to an architecture, developers who want a working demo to show stakeholders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/FlowiseAI/Flowise" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://flowiseai.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/FlowiseAI/Flowise" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FFlowiseAI%2FFlowise" alt="Flowise preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4) AutoGen — Agent-to-agent collaboration with real observability
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Microsoft's open-source framework for building multi-agent systems where agents can converse, delegate tasks, and solve problems collaboratively with structured message passing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; AutoGen's recent releases have doubled down on the part most frameworks ignore: what actually happened during that run? &lt;strong&gt;You can trace exactly which agent said what and why a decision was made&lt;/strong&gt; — which matters enormously when your agent is touching production systems or user data. The enterprise observability angle is why it's in more Fortune 500 pilots than its star count suggests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; enterprise teams with compliance requirements, developers who need audit trails, research teams studying agent behavior and failure modes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/microsoft/autogen" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://microsoft.github.io/autogen/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/microsoft/autogen" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fmicrosoft%2Fautogen" alt="AutoGen preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5) Open Interpreter — Your agent can run code now, not just suggest it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A locally-running implementation of the code interpreter spec that lets an LLM write and execute code on your machine in a conversational interface — fully self-hosted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; The gap between "here's the Python you should run" and "I ran it and here's the output" is enormous. &lt;strong&gt;Open Interpreter closes that gap locally — no cloud execution, no data leaving your machine.&lt;/strong&gt; As data privacy becomes non-negotiable for enterprises, the ability to run code-executing agents on-prem is no longer a nice-to-have. The sandboxing added in recent versions makes it viable outside personal use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; data analysts who want a local Jupyter alternative, developers automating local workflows, teams with data residency requirements who still want code execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/OpenInterpreter/open-interpreter" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://openinterpreter.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/OpenInterpreter/open-interpreter" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2FOpenInterpreter%2Fopen-interpreter" alt="Open Interpreter preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://i.giphy.com/media/a5viI92PAF2LU/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/a5viI92PAF2LU/giphy.gif" alt="cat on computer" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6) pompelmi — The security scan your agent skips when handling uploads
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed &lt;code&gt;Verdict&lt;/code&gt; — &lt;code&gt;Clean&lt;/code&gt;, &lt;code&gt;Malicious&lt;/code&gt;, or &lt;code&gt;ScanError&lt;/code&gt;. No daemons to manage, no cloud dependency, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; AI agents increasingly accept file inputs — PDFs, images, code, documents from users. &lt;strong&gt;Most implementations ship without any malware scanning because "users won't upload malware" is a threat model, not a defense.&lt;/strong&gt; With LLM-assisted attacks becoming more sophisticated, an agent that processes an uploaded file without scanning it is a liability waiting to surface. pompelmi sits between the upload and the agent — one function call, one verdict, done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Node.js agents that accept file uploads, backend developers adding a security layer without standing up new infrastructure, teams that want ClamAV coverage without the ops overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7) Dify — Full LLM app platform for teams who don't want to start from scratch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source LLM app development platform with a backend, visual workflow builder, RAG pipeline support, model management, and observability — self-hostable on Docker in minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most teams are reinventing the same scaffolding: prompt versioning, RAG connectors, model switching, usage tracking. &lt;strong&gt;Dify ships all of that in one self-hosted platform, which means you skip months of infrastructure work and start with the actual problem.&lt;/strong&gt; The model-agnostic layer means you're not locked into OpenAI — swap in local Llama or Mistral without touching your application logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams building internal AI tools, startups that need production-ready AI infrastructure fast, developers who want to own their stack without building it from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/langgenius/dify" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://dify.ai" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/langgenius/dify" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Flanggenius%2Fdify" alt="Dify preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8) Semantic Kernel — Grounding agents in real enterprise data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Microsoft's open-source SDK for integrating LLMs into applications — with a plugin architecture, memory connectors, and native support for function calling across C#, Python, and Java.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most agent frameworks assume you're building greenfield. Semantic Kernel assumes you have existing systems — a CRM, a database, internal APIs — and you need to connect an LLM to them without rebuilding everything. &lt;strong&gt;The plugin model means you're wrapping existing code, not replacing it.&lt;/strong&gt; For enterprises already running .NET or Java stacks, this is the path of least resistance to adding real AI capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; enterprise .NET and Java teams, developers connecting agents to existing internal systems, teams that need production-grade memory and retrieval without switching languages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/microsoft/semantic-kernel" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://learn.microsoft.com/en-us/semantic-kernel/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/microsoft/semantic-kernel" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fmicrosoft%2Fsemantic-kernel" alt="Semantic Kernel preview" width="1200" height="600"&gt;&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%2Ftxuvg2xf9pcylz0tcxnu.gif" 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%2Ftxuvg2xf9pcylz0tcxnu.gif" alt="mic drop" width="400" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The AI agent space is littered with frameworks that are great at demos and fall apart the moment real users touch them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ones that survive production treat failure as a first-class citizen, not an afterthought.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why the frameworks worth using in 2026 are built around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explicit state management, not implicit context accumulation&lt;/li&gt;
&lt;li&gt;Real control flow with branches and checkpoints, not just chained prompts&lt;/li&gt;
&lt;li&gt;Security layers that exist before the problem surfaces, not after the incident report&lt;/li&gt;
&lt;li&gt;Observability that tells you what happened, not just what the output was&lt;/li&gt;
&lt;li&gt;Self-hostable by default, because data residency is now a requirement, not a preference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building agents is no longer experimental. It's engineering. Treat it that way.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which framework has actually made it to production in your stack?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>9 Tools Big Tech Uses Internally (Now Open Source)</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Sat, 25 Apr 2026 12:59:02 +0000</pubDate>
      <link>https://forem.com/sonotommy/9-tools-big-tech-uses-internally-now-open-source-1j4g</link>
      <guid>https://forem.com/sonotommy/9-tools-big-tech-uses-internally-now-open-source-1j4g</guid>
      <description>&lt;p&gt;Most "best tools" lists are just GitHub trending with extra steps.&lt;/p&gt;

&lt;p&gt;Same 10 repos. Same README marketing. Nothing that shows you how teams shipping at scale actually build their internal systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The actually interesting tools got built by engineers who had no choice but to build them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spotify needed to navigate 2,000 microservices. Uber needed workflows that didn't die silently. YouTube needed MySQL to scale horizontally. None of them built these tools for GitHub stars — they built them to survive the week.&lt;/p&gt;

&lt;p&gt;That's the list.&lt;/p&gt;




&lt;p&gt;I picked these based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Genuine internal origin&lt;/strong&gt; — built and used in production before being open-sourced, not a side project that got donated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Still actively maintained&lt;/strong&gt; — real commits in 2025–2026, active issues, responding maintainers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solves a problem you'll actually hit&lt;/strong&gt; — not theoretical Google-scale problems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not already a commodity&lt;/strong&gt; — nothing that's been in every DevOps job listing for five years&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High complexity/value ratio&lt;/strong&gt; — tools that take a day to set up but save months&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The best infrastructure tools in 2026 aren't built by startups chasing a community — they're built by engineers who got tired of waiting for someone else to solve the problem.&lt;/p&gt;
&lt;/blockquote&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%2Fyhjbc01d3kndr3k0yprh.gif" 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%2Fyhjbc01d3kndr3k0yprh.gif" alt="Michael Scott YES" width="370" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Backstage — Spotify's developer portal, now the IDP standard&lt;/li&gt;
&lt;li&gt;Temporal — Uber's durable workflow engine for code that can't fail mid-run&lt;/li&gt;
&lt;li&gt;Vitess — YouTube's MySQL sharding layer, now powering PlanetScale&lt;/li&gt;
&lt;li&gt;Envoy — Lyft's proxy that became the foundation of the service mesh market&lt;/li&gt;
&lt;li&gt;OpenFGA — Auth0's Zanzibar-style fine-grained authorization&lt;/li&gt;
&lt;li&gt;pompelmi — The zero-dep file scanner every serious prod team builds internally and never ships&lt;/li&gt;
&lt;li&gt;Turborepo — Vercel's monorepo build system with remote caching&lt;/li&gt;
&lt;li&gt;OpenTelemetry Collector — The observability pipeline every cloud provider adopted&lt;/li&gt;
&lt;li&gt;Buf — Protobuf tooling that makes gRPC schema management survivable&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1) Backstage — Spotify's developer portal, now the IDP standard
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A framework for building internal developer portals — software catalogs, scaffolding, docs, and plugin-based integrations unified in one UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Spotify open-sourced Backstage because managing 2,000+ microservices without a catalog is organized chaos. &lt;strong&gt;The internal developer platform (IDP) space was previously only accessible to companies with a dedicated platform engineering team — Backstage changed that.&lt;/strong&gt; If your engineers spend 20 minutes finding the right service or figuring out who owns a repo, that's a product problem dressed as a process problem. In 2026, the question isn't whether you need an IDP. It's why you haven't set one up yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; platform engineering teams, orgs with 10+ services, DevOps leads trying to cut onboarding time, teams drowning in scattered Confluence docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/backstage/backstage" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://backstage.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/backstage/backstage" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fbackstage%2Fbackstage" alt="backstage preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2) Temporal — Uber's durable workflow engine for code that can't fail mid-run
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A workflow orchestration engine where application state is durable by default — your code resumes exactly where it left off after crashes, restarts, or deploys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Cron jobs fail silently. Queues lose messages. Sagas get complicated faster than anyone wants to admit. &lt;strong&gt;Uber built Temporal (originally Cadence) because every existing alternative broke under real load — and the same breaking points hit every team that tries to orchestrate multi-step async work.&lt;/strong&gt; The explosion of AI agents and multi-step pipelines in 2026 has made durable execution a baseline requirement. If your workflow can fail in the middle and leave a user in an unknown state, that's a bug.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; long-running business processes, AI agent orchestration, payment and fulfillment flows, async pipelines where partial failure is unacceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/temporalio/temporal" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://temporal.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/temporalio/temporal" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Ftemporalio%2Ftemporal" alt="temporal preview" width="1200" height="600"&gt;&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%2Frzs0vzzfds0vgl2kk8bl.gif" 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%2Frzs0vzzfds0vgl2kk8bl.gif" alt="Spongebob head explode" width="350" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Vitess — YouTube's MySQL sharding layer, now powering PlanetScale
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A database clustering system for horizontal scaling of MySQL — the same system handling YouTube's query volume since 2010.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most teams hit MySQL limits and immediately start planning a full migration to Postgres or a managed cloud DB. &lt;strong&gt;Vitess proves that migration is often the wrong answer.&lt;/strong&gt; PlanetScale was built entirely on top of it, which means the operational understanding and tooling is now mature enough for teams well outside Google's infrastructure. Compute is cheap. Full DB migrations are expensive, slow, and high-risk. Vitess gives you a third option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams already on MySQL hitting read/write bottlenecks, orgs that can't afford a full DB migration, high-throughput SaaS apps with uneven load patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/vitessio/vitess" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://vitess.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vitessio/vitess" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fvitessio%2Fvitess" alt="vitess preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4) Envoy — Lyft's proxy that became the foundation of the service mesh market
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A high-performance L7 proxy and communication bus built at Lyft, now the underlying layer of Istio, AWS App Mesh, and most major service mesh products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Nginx handles traffic. Envoy understands services. &lt;strong&gt;The moment you need retries, circuit breaking, distributed tracing, and gRPC support in the same proxy — nothing else comes close.&lt;/strong&gt; Lyft built it because no existing proxy could handle their microservice topology. It's now the de facto standard for any team running services at scale. If you're using a service mesh, you're almost certainly using Envoy without knowing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; microservice architectures, teams running on Kubernetes, engineers needing deep per-request observability at the network layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/envoyproxy/envoy" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://envoyproxy.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/envoyproxy/envoy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fenvoyproxy%2Fenvoy" alt="envoy preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5) OpenFGA — Auth0's Zanzibar-style fine-grained authorization
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An open-source authorization system based on Google's Zanzibar paper — the same model behind Google Drive and Docs permissions — built and production-tested by Auth0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Role-based access control breaks down the moment you need "user X can edit document Y only if they're in project Z and the document isn't locked." &lt;strong&gt;Auth0 built OpenFGA because RBAC doesn't model real-world permission graphs — it approximates them, badly.&lt;/strong&gt; With AI agents now needing scoped, auditable access to specific resources across multiple systems, authorization models that seemed over-engineered in 2022 are now the minimum viable approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; multi-tenant SaaS products, platforms with document or resource-level permissions, teams building AI agents that need bounded, auditable access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/openfga/openfga" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://openfga.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openfga/openfga" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fopenfga%2Fopenfga" alt="openfga preview" width="1200" height="600"&gt;&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%2Fmmamwjcxrninnvil87ui.gif" 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%2Fmmamwjcxrninnvil87ui.gif" alt="Fry not sure meme" width="320" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6) pompelmi — The zero-dep file scanner every serious prod team builds internally and never ships
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (Clean, Malicious, ScanError). No daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Every team that accepts file uploads eventually writes something like this internally — a ClamAV wrapper buried in a utils folder that never gets cleaned up, documented, or tested properly. &lt;strong&gt;pompelmi is what that internal util should have been from the start: typed, tested, and actually installable in one line.&lt;/strong&gt; With LLM-powered tools now generating and accepting files at scale, scanning uploads before they reach your storage layer isn't paranoid — it's baseline. You don't build a ClamAV wrapper because you want to. You build it because you got burned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Node.js apps handling file uploads, SaaS platforms processing user-generated content, teams adding a security layer without adding new infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7) Turborepo — Vercel's monorepo build system with remote caching
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A high-performance build system for JavaScript/TypeScript monorepos with task pipelines, incremental computation, and shared remote cache.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Vercel built Turborepo because managing 15+ packages in a single repo with a chain of &lt;code&gt;npm run build&lt;/code&gt; calls is a slow way to hate your CI. &lt;strong&gt;The caching alone — skipping work that hasn't changed — cuts CI time by 40–80% on most real codebases.&lt;/strong&gt; Remote caching means your teammates benefit from builds you already ran. In a world where AI-assisted development moves at a different pace than legacy CI pipelines, waiting 12 minutes for a green check is a product bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams with shared component libraries, full-stack TypeScript monorepos, frontend platform teams with multiple apps deploying from one repo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/vercel/turbo" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://turbo.build" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vercel/turbo" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fvercel%2Fturbo" alt="turbo preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8) OpenTelemetry Collector — The observability pipeline every cloud provider adopted
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A vendor-agnostic agent for collecting, processing, and exporting telemetry (traces, metrics, logs) — the common layer between your app and any observability backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Datadog and New Relic are great until you see the bill at 10M spans per day. &lt;strong&gt;OpenTelemetry lets you instrument once and route anywhere — swap backends without rewriting a single line of instrumentation.&lt;/strong&gt; Every major cloud provider now supports it natively. If you're still vendor-locked on your observability pipeline, you're one contract renewal from a painful, expensive migration. The CNCF graduating it in 2023 wasn't a formality — it was the industry agreeing this is the standard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; platform engineers building internal observability stacks, teams tired of vendor lock-in, anyone running services across multiple cloud providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/open-telemetry/opentelemetry-collector" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://opentelemetry.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/open-telemetry/opentelemetry-collector" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fopen-telemetry%2Fopentelemetry-collector" alt="opentelemetry-collector preview" width="1200" height="600"&gt;&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%2Ftag0psfo61k73ern75wl.gif" 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%2Ftag0psfo61k73ern75wl.gif" alt="rocket launch" width="480" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9) Buf — Protobuf tooling that makes gRPC schema management survivable
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A build system, linter, breaking change detector, and schema registry for Protocol Buffers — with remote plugin execution and a full BSR (Buf Schema Registry) for sharing schemas across teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; gRPC is excellent until you try to manage &lt;code&gt;.proto&lt;/code&gt; files across 8 teams without accidentally breaking a consumer. &lt;strong&gt;Protobuf has no standard toolchain, and it shows — &lt;code&gt;protoc&lt;/code&gt; is a command-line puzzle from 2008.&lt;/strong&gt; Buf is what Google and Stripe already have internally: enforced compatibility rules, centralized schema distribution, and CI that fails before you ship a breaking change. With more internal services and AI APIs moving to gRPC for performance in 2026, the schema management problem goes from annoying to blocking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams using gRPC or Protobuf internally, platform engineers managing API schemas across multiple services, anyone doing API versioning where backward compatibility matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/bufbuild/buf" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://buf.build" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bufbuild/buf" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fbufbuild%2Fbuf" alt="buf preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://i.giphy.com/media/3oz8xIsm0opeB6iA92/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/3oz8xIsm0opeB6iA92/giphy.gif" alt="Oprah you get a car" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Every tool on this list started as a private repo someone had to fight to get open-sourced.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why the most interesting open-source releases right now aren't from startups optimizing for community growth. They're from engineering teams that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hit a wall that no existing tool could solve&lt;/li&gt;
&lt;li&gt;Built something internal that actually worked under real load&lt;/li&gt;
&lt;li&gt;Eventually decided the maintenance cost of keeping it private was higher than publishing it&lt;/li&gt;
&lt;li&gt;Didn't design for adoption — and ended up getting adopted anyway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backstage, Temporal, Vitess — all went through internal reviews, legal clearance, and months of cleanup before anyone outside the company could use them. That friction is actually a signal. If a team put in that work to open-source something they didn't have to share, it's usually because the tool genuinely solved something hard.&lt;/p&gt;

&lt;p&gt;The irony is that the tools most worth your time have the least marketing behind them.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which internal tool are you surprised wasn't open-sourced sooner?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>7 Open-Source Security Tools Every Developer Ignores (But Shouldn't)</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Sat, 25 Apr 2026 10:56:15 +0000</pubDate>
      <link>https://forem.com/sonotommy/7-open-source-security-tools-every-developer-ignores-but-shouldnt-4b86</link>
      <guid>https://forem.com/sonotommy/7-open-source-security-tools-every-developer-ignores-but-shouldnt-4b86</guid>
      <description>&lt;p&gt;Most "developer security" articles start with "use HTTPS" and end with "sanitize your inputs."&lt;/p&gt;

&lt;p&gt;That advice is from 2012. You already know it.&lt;/p&gt;

&lt;p&gt;The real security gaps in 2026 aren't about what you know — they're about what you never set up because it felt like DevSecOps overhead reserved for enterprise teams with dedicated security engineers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It isn't.&lt;/strong&gt; Every tool on this list runs in CI, takes under an hour to wire up, and catches real bugs in real codebases. Not theoretical vulnerabilities. Real ones.&lt;/p&gt;

&lt;p&gt;Here's what I'm actually using to evaluate these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it catch something before a human would?&lt;/li&gt;
&lt;li&gt;Can a solo dev add it without a week of config?&lt;/li&gt;
&lt;li&gt;Does it integrate with GitHub Actions / standard CI without a paid tier?&lt;/li&gt;
&lt;li&gt;Is it actively maintained and production-trusted?&lt;/li&gt;
&lt;li&gt;Does it have a clear, non-corporate output format?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The best security setup isn't a compliance checklist — it's a few focused tools that run automatically and fail loudly before anything ships.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Trivy — scan containers, repos, and IaC before they ship&lt;/li&gt;
&lt;li&gt;Gitleaks — stop leaking secrets into git history&lt;/li&gt;
&lt;li&gt;Semgrep — static analysis that actually catches logic bugs&lt;/li&gt;
&lt;li&gt;pompelmi — file scanning with zero daemon overhead&lt;/li&gt;
&lt;li&gt;OSV-Scanner — Google's open dependency vulnerability scanner&lt;/li&gt;
&lt;li&gt;OWASP ZAP — web app attack surface testing, automated&lt;/li&gt;
&lt;li&gt;Falco — real-time runtime threat detection for cloud-native&lt;/li&gt;
&lt;/ol&gt;







&lt;h2&gt;
  
  
  1) Trivy — Scan containers, repos, and IaC before they ship
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A fast, all-in-one vulnerability scanner from Aqua Security that targets container images, filesystems, git repos, and infrastructure-as-code files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Supply chain attacks are now the default attack vector. You can write perfect application code and still ship a vulnerable base image or a misconfigured Terraform module. &lt;strong&gt;Trivy catches both in a single pass.&lt;/strong&gt; It integrates with GitHub Actions in about 10 lines of YAML and produces SARIF output that feeds directly into GitHub's Security tab — no third-party dashboard needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; CI/CD pipelines, container security, IaC misconfiguration detection, dependency auditing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/aquasecurity/trivy" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://trivy.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aquasecurity/trivy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Faquasecurity%2Ftrivy" alt="trivy preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h2&gt;
  
  
  2) Gitleaks — Stop leaking secrets into git history
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A SAST tool that scans git repos, files, and stdin for hardcoded secrets — API keys, tokens, passwords, private keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; GitHub's secret scanning catches some things after the fact. Gitleaks catches them before the push. &lt;strong&gt;The difference between a scanned repo and a breached one is often a single accidental commit.&lt;/strong&gt; It ships as a pre-commit hook and a CI step, and it's fast enough that you won't notice it running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Pre-commit hooks, CI pipelines, auditing legacy repos, team enforcement policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/gitleaks/gitleaks" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://gitleaks.io" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/gitleaks/gitleaks" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fgitleaks%2Fgitleaks" alt="gitleaks preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h2&gt;
  
  
  3) Semgrep — Static analysis that actually catches logic bugs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A lightweight static analysis engine with a pattern syntax that maps almost directly to the source code you're reading — no AST required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most linters catch style. Semgrep catches &lt;code&gt;exec(user_input)&lt;/code&gt;. &lt;strong&gt;The difference is that you write rules that look like the code you're trying to prevent&lt;/strong&gt; — not abstract patterns no one on your team understands. The community rule registry covers OWASP Top 10 for every major language, and it runs in CI without a paid tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; SAST, code review automation, enforcing security standards across a team, detecting insecure patterns in OSS contributions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/semgrep/semgrep" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://semgrep.dev" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/semgrep/semgrep" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fsemgrep%2Fsemgrep" alt="semgrep preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h2&gt;
  
  
  4) pompelmi — File scanning with zero daemon overhead
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any file and returns a typed Verdict (Clean, Malicious, ScanError). No daemons, no cloud, no native bindings, zero runtime dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; If your app accepts user file uploads — PDFs, ZIPs, images, Office docs — you have an attack surface most developers never close. &lt;strong&gt;Malware in uploaded files is one of the oldest and most reliably successful attack vectors, and most Node.js stacks have no defense against it.&lt;/strong&gt; pompelmi gives you antivirus scanning as a function call: &lt;code&gt;const verdict = await scan(filePath)&lt;/code&gt;. Ship it in your upload handler and you're done. No daemon process to babysit, no cloud API to rate-limit you, no C++ binding to compile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; File upload endpoints, user-generated content pipelines, Node.js backend security hardening, self-hosted apps that can't send files to a cloud scanner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h2&gt;
  
  
  5) OSV-Scanner — Google's open dependency vulnerability scanner
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A CLI tool from Google that queries the Open Source Vulnerabilities (OSV) database against your project's dependency lock files — covering npm, pip, Go, Cargo, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; &lt;code&gt;npm audit&lt;/code&gt; is noisy and often wrong. OSV-Scanner queries a unified, cross-ecosystem database that Google maintains for its own production systems. &lt;strong&gt;It surfaces real, exploitable vulnerabilities with call-graph analysis — not just "this transitive dep has a CVE from 2019."&lt;/strong&gt; It outputs JSON for easy CI integration and ignores noise by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Multi-language monorepos, CI vulnerability gates, dependency auditing, replacing &lt;code&gt;npm audit&lt;/code&gt; / &lt;code&gt;pip-audit&lt;/code&gt; with one tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/google/osv-scanner" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://google.github.io/osv-scanner" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/google/osv-scanner" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fgoogle%2Fosv-scanner" alt="osv-scanner preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h2&gt;
  
  
  6) OWASP ZAP — Web app attack surface testing, automated
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; The Zed Attack Proxy — an open-source DAST tool from OWASP that actively probes your running web application for vulnerabilities by acting as a man-in-the-middle proxy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Static analysis only sees your source code. ZAP sees your app the way an attacker does — by hitting it with actual HTTP requests. &lt;strong&gt;The gap between "my code looks safe" and "my app is safe" is exactly what ZAP covers.&lt;/strong&gt; The Automation Framework lets you run a full scan in CI with a single Docker command and fail the build on high-severity findings — no GUI required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; DAST in CI/CD, API security testing, OWASP Top 10 coverage, pre-release security gates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/zaproxy/zaproxy" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.zaproxy.org" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/zaproxy/zaproxy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fzaproxy%2Fzaproxy" alt="zap preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h2&gt;
  
  
  7) Falco — Real-time runtime threat detection for cloud-native
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A CNCF project that uses eBPF to monitor system calls and Kubernetes audit logs, triggering alerts when behavior deviates from a defined policy — in real time, in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters in 2026:&lt;/strong&gt; Most of the tools on this list prevent vulnerabilities before deploy. Falco catches what slips through after deploy. &lt;strong&gt;If a container starts executing a shell, reading &lt;code&gt;/etc/shadow&lt;/code&gt;, or making unexpected network connections, Falco fires before the attacker gets far.&lt;/strong&gt; It's the runtime equivalent of an intrusion detection system, and it's now the standard for production Kubernetes security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Kubernetes production clusters, runtime anomaly detection, compliance requirements (PCI, SOC 2), post-incident forensics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/falcosecurity/falco" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://falco.org" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/falcosecurity/falco" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Ffalcosecurity%2Ffalco" alt="falco preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Security isn't a phase you add at the end — it's a pipeline you build once and run forever.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security isn't a phase you add at the end — it's a pipeline you build once and run forever.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why the best security setups in 2026 are about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shifting left — catch it before it ships, not after it's breached&lt;/li&gt;
&lt;li&gt;Zero-friction tooling — if it's annoying to run, it won't get run&lt;/li&gt;
&lt;li&gt;Defense in depth — static analysis + secret scanning + DAST + runtime coverage&lt;/li&gt;
&lt;li&gt;Ownership — individual developers owning security, not just a dedicated team&lt;/li&gt;
&lt;li&gt;Open source — transparent tools you can audit, extend, and trust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The seven tools above cover your code, your containers, your dependencies, your uploaded files, your running app, and your production cluster. That's end-to-end.&lt;/p&gt;

&lt;p&gt;If I missed something obvious, drop it in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What would be your #1 pick?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>7 Open-Source Tools That Make File Upload Security Actually Manageable</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Fri, 24 Apr 2026 13:02:00 +0000</pubDate>
      <link>https://forem.com/sonotommy/7-open-source-tools-that-make-file-upload-security-actually-manageable-1da9</link>
      <guid>https://forem.com/sonotommy/7-open-source-tools-that-make-file-upload-security-actually-manageable-1da9</guid>
      <description>&lt;p&gt;Every web framework tutorial shows you how to accept a file upload.&lt;br&gt;
Almost none show you what to do next.&lt;br&gt;
You validate the Content-Type header. You check the extension. You think you're done.&lt;/p&gt;

&lt;p&gt;You're not.&lt;/p&gt;

&lt;p&gt;The default file upload stack leaves you exposed on four fronts: parsing security, file type spoofing, size abuse, and malware. These 7 tools close each gap without requiring a dedicated security team.&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%2Fpqkxff3rxx9tsl2utxqe.gif" 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%2Fpqkxff3rxx9tsl2utxqe.gif" alt="developer accepting file uploads without any validation" width="360" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The average web app's file upload security posture in production. Source: &lt;a href="https://giphy.com/gifs/3oKIPnAiaMCws8nOsE" rel="noopener noreferrer"&gt;Giphy&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; File upload security requires a stack, not a single library. These 7 tools cover parsing, validation, and scanning end-to-end.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;pompelmi&lt;/strong&gt; — antivirus scanning before the file touches permanent storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;multer&lt;/strong&gt; — secure multipart parsing with built-in size and field limits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;busboy&lt;/strong&gt; — low-level streaming parser for fine-grained upload control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;file-type&lt;/strong&gt; — detect the real file type from magic bytes, not the filename&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mime-types&lt;/strong&gt; — map MIME types reliably without trusting user input&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sharp&lt;/strong&gt; — re-encode images to eliminate embedded payloads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;archiver&lt;/strong&gt; — control archive creation to prevent zip bomb and path traversal risks&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  1) pompelmi — scan files before they land
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A minimal Node.js wrapper around ClamAV that scans any uploaded file and returns a typed verdict — Clean, Malicious, or ScanError. Zero runtime dependencies, no cloud, no daemon required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; The file upload attack surface doesn't start with storage — it starts with what you accept. A PDF that passes as &lt;code&gt;application/pdf&lt;/code&gt; can still carry a macro payload. An image can embed executable content. pompelmi adds a scanning layer before any file touches your database or object storage, running ClamAV locally so no user data ever leaves your server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Express, Fastify, NestJS, Next.js, SvelteKit, any Node.js app that accepts user file uploads&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fpompelmi%2Fpompelmi" alt="pompelmi preview" width="800" height="400"&gt;&lt;/a&gt; | &lt;a href="https://pompelmi.app" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pompelmi" rel="noopener noreferrer"&gt;
        pompelmi
      &lt;/a&gt; / &lt;a href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;
        pompelmi
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Minimal Node.js wrapper around ClamAV — scan any file and get Clean, Malicious, or ScanError. Handles installation and database updates automatically.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/pompelmi/pompelmi/./src/grapefruit.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fpompelmi%2Fpompelmi%2FHEAD%2F.%2Fsrc%2Fgrapefruit.png" width="96" alt="pompelmi logo"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;pompelmi&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;ClamAV for humans&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://www.npmjs.com/package/pompelmi" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/afa9095da8c286a9d2f798ae9d02cfcf6db0ae0efc625cdf7ee757b8af5e9924/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f706f6d70656c6d692e737667" alt="npm version"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/95c61c397ca3825757ec835268e50886b2c10ddc4f0676e1222b19037610927f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4953432d626c75652e737667"&gt;&lt;img src="https://camo.githubusercontent.com/95c61c397ca3825757ec835268e50886b2c10ddc4f0676e1222b19037610927f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4953432d626c75652e737667" alt="license"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/489444e15856929c362ce966520a248149a338daec3ec32dec3f83554d46caca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706c6174666f726d2d6d61634f532532302537432532304c696e757825323025374325323057696e646f77732d6c69676874677265792e737667"&gt;&lt;img src="https://camo.githubusercontent.com/489444e15856929c362ce966520a248149a338daec3ec32dec3f83554d46caca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706c6174666f726d2d6d61634f532532302537432532304c696e757825323025374325323057696e646f77732d6c69676874677265792e737667" alt="platform"&gt;&lt;/a&gt;
  &lt;a href="https://www.npmjs.com/package/pompelmi?activeTab=dependencies" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/aae95fbaa83bc6a3f4597f3a75da45ea46ec236fc324617f0e5a2f15e07fe750/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646570656e64656e636965732d302d627269676874677265656e" alt="zero dependencies"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;A minimal Node.js wrapper around &lt;a href="https://www.clamav.net/" rel="nofollow noopener noreferrer"&gt;ClamAV&lt;/a&gt; that scans any file and returns a typed &lt;code&gt;Verdict&lt;/code&gt; Symbol: &lt;code&gt;Verdict.Clean&lt;/code&gt;, &lt;code&gt;Verdict.Malicious&lt;/code&gt;, or &lt;code&gt;Verdict.ScanError&lt;/code&gt;. No daemons. No cloud. No native bindings. Zero runtime dependencies.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of contents&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#quickstart" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#how-it-works" rel="noopener noreferrer"&gt;How it works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/pompelmi/pompelmi#api" rel="noopener noreferrer"&gt;API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#pompelmiscanfilepath-options" rel="noopener noreferrer"&gt;pompelmi.scan()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#docker--remote-scanning" rel="noopener noreferrer"&gt;Docker / remote scanning&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#examples" rel="noopener noreferrer"&gt;Examples&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/pompelmi/pompelmi#internal-utilities" rel="noopener noreferrer"&gt;Internal utilities&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#clamavinstaller" rel="noopener noreferrer"&gt;ClamAVInstaller()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#updateclamavdatabase" rel="noopener noreferrer"&gt;updateClamAVDatabase()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#supported-platforms" rel="noopener noreferrer"&gt;Supported platforms&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#installing-clamav-manually" rel="noopener noreferrer"&gt;Installing ClamAV manually&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#testing" rel="noopener noreferrer"&gt;Testing&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#security" rel="noopener noreferrer"&gt;Security&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/pompelmi/pompelmi#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;
&lt;br&gt;


&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quickstart&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install pompelmi&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; scan&lt;span class="pl-kos"&gt;,&lt;/span&gt; Verdict &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'pompelmi'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;result&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-k"&gt;await&lt;/span&gt; &lt;span class="pl-en"&gt;scan&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'/path/to/file.zip'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;result&lt;/span&gt; &lt;span class="pl-c1"&gt;===&lt;/span&gt; &lt;span class="pl-v"&gt;Verdict&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;Malicious&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-k"&gt;throw&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Error&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'File rejected: malware detected'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;

&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;

&lt;strong&gt;Validate&lt;/strong&gt; — pompelmi checks that the argument is a string and that the file exists before spawning anything.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Scan&lt;/strong&gt; — pompelmi spawns &lt;code&gt;clamscan --no-summary &amp;lt;filePath&amp;gt;&lt;/code&gt; as a child process and reads the exit code.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Map&lt;/strong&gt; — the exit…&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pompelmi/pompelmi" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;





&lt;h2&gt;
  
  
  2) multer — multipart parsing with limits built in
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Express middleware for handling &lt;code&gt;multipart/form-data&lt;/code&gt; with configurable file size limits, field count caps, and pluggable storage engines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Unbounded multipart parsing is a DoS vector. A malicious client can send a multi-gigabyte upload or thousands of fields and exhaust server memory before any route handler runs. Multer's &lt;code&gt;limits&lt;/code&gt; configuration rejects requests that exceed your thresholds before the full payload is consumed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Express apps, REST APIs with file upload endpoints, any multipart form processing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/expressjs/multer" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fexpressjs%2Fmulter" alt="multer preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/expressjs" rel="noopener noreferrer"&gt;
        expressjs
      &lt;/a&gt; / &lt;a href="https://github.com/expressjs/multer" rel="noopener noreferrer"&gt;
        multer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Node.js middleware for handling `multipart/form-data`.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Multer &lt;a href="https://npmjs.org/package/multer" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/648084009c40bcd9433dda11bace84907ae9c65560ac917c52c8ba7a2484d3fc/68747470733a2f2f62616467656e2e6e65742f6e706d2f762f6d756c746572" alt="NPM Version"&gt;&lt;/a&gt; &lt;a href="https://npmjs.org/package/multer" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/645346cbf26ebeb55e5ced6b348d58d0103ff21c173678ae90b86d4bf833373b/68747470733a2f2f62616467656e2e6e65742f6e706d2f646d2f6d756c746572" alt="NPM Downloads"&gt;&lt;/a&gt; &lt;a href="https://github.com/expressjs/multer/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/expressjs/multer/actions/workflows/ci.yml/badge.svg" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://coveralls.io/r/expressjs/multer?branch=main" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b5716f81741f3142f4b5c80b7cad87b6b9396147027fd2ed231435cd6c1f80fe/68747470733a2f2f62616467656e2e6e65742f636f766572616c6c732f632f6769746875622f657870726573736a732f6d756c7465722f6d61696e" alt="Test Coverage"&gt;&lt;/a&gt; &lt;a href="https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/multer" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3cd9397cc17901a7e29fe36b99ca97956838f04923dd5e272d4e9c0e167abe2d/68747470733a2f2f6170692e73636f7265636172642e6465762f70726f6a656374732f6769746875622e636f6d2f657870726573736a732f6d756c7465722f6261646765" alt="OpenSSF Scorecard Badge"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Multer is a node.js middleware for handling &lt;code&gt;multipart/form-data&lt;/code&gt;, which is primarily used for uploading files. It is written
on top of &lt;a href="https://github.com/mscdex/busboy" rel="noopener noreferrer"&gt;busboy&lt;/a&gt; for maximum efficiency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Multer will not process any form which is not multipart (&lt;code&gt;multipart/form-data&lt;/code&gt;).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Translations&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This README is also available in other languages:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-ar.md" rel="noopener noreferrer"&gt;العربية&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Arabic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-zh-cn.md" rel="noopener noreferrer"&gt;简体中文&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Chinese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-fr.md" rel="noopener noreferrer"&gt;Français&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;French&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-ko.md" rel="noopener noreferrer"&gt;한국어&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Korean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-pt-br.md" rel="noopener noreferrer"&gt;Português&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Portuguese (BR)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-ru.md" rel="noopener noreferrer"&gt;Русский язык&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Russian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-es.md" rel="noopener noreferrer"&gt;Español&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Spanish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-uz.md" rel="noopener noreferrer"&gt;O'zbek tili&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Uzbek&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-vi.md" rel="noopener noreferrer"&gt;Việt Nam&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Vietnamese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/expressjs/multer/blob/main/doc/README-tr.md" rel="noopener noreferrer"&gt;Türkçe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Turkish&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ npm install multer&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Multer adds a &lt;code&gt;body&lt;/code&gt; object and a &lt;code&gt;file&lt;/code&gt; or &lt;code&gt;files&lt;/code&gt; object to the &lt;code&gt;request&lt;/code&gt; object. The &lt;code&gt;body&lt;/code&gt; object contains the values of the text fields of the form, the &lt;code&gt;file&lt;/code&gt; or &lt;code&gt;files&lt;/code&gt; object contains the files uploaded via the form.&lt;/p&gt;
&lt;p&gt;Basic usage example:&lt;/p&gt;
&lt;p&gt;Don't forget the &lt;code&gt;enctype="multipart/form-data"&lt;/code&gt; in your form.&lt;/p&gt;
&lt;div class="highlight highlight-text-html-basic notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;form&lt;/span&gt; &lt;span class="pl-c1"&gt;action&lt;/span&gt;="&lt;span class="pl-s"&gt;/profile&lt;/span&gt;" &lt;span class="pl-c1"&gt;method&lt;/span&gt;="&lt;span class="pl-s"&gt;post&lt;/span&gt;" &lt;span class="pl-c1"&gt;enctype&lt;/span&gt;="&lt;span class="pl-s"&gt;multipart/form-data&lt;/span&gt;"&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;input&lt;/span&gt; &lt;span class="pl-c1"&gt;type&lt;/span&gt;="&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/expressjs/multer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  3) busboy — streaming multipart parsing for full control
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A low-level streaming multipart parser for Node.js that processes uploads without buffering the entire payload in memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Multer is the right default. Busboy is the right tool when you need to act on files before they're fully received — streaming to S3, scanning chunks in flight, or enforcing byte-level limits mid-stream. It trades abstraction for control, which is what high-volume or security-critical pipelines need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; High-volume uploads, streaming directly to cloud storage, custom upload pipelines, apps where memory pressure matters&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/mscdex/busboy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fmscdex%2Fbusboy" alt="busboy preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mscdex" rel="noopener noreferrer"&gt;
        mscdex
      &lt;/a&gt; / &lt;a href="https://github.com/mscdex/busboy" rel="noopener noreferrer"&gt;
        busboy
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A streaming parser for HTML form data for node.js
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Description&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A node.js module for parsing incoming HTML form data.&lt;/p&gt;
&lt;p&gt;Changes (breaking or otherwise) in v1.0.0 can be found &lt;a href="https://github.com/mscdex/busboy/issues/266" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are using node v18.0.0 or newer, please be aware of the node.js
HTTP(S) server's &lt;a href="https://nodejs.org/docs/latest/api/http.html#httpcreateserveroptions-requestlistener" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;requestTimeout&lt;/code&gt;&lt;/a&gt;
configuration setting that is now enabled by default, which could cause upload
interruptions if the upload takes too long.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Requirements&lt;/h1&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://nodejs.org/" rel="nofollow noopener noreferrer"&gt;node.js&lt;/a&gt; -- v10.16.0 or newer&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Install&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install busboy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Examples&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Parsing (multipart) with default options:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;http&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'http'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;busboy&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'busboy'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-s1"&gt;http&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;createServer&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;req&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;res&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-c1"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;req&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;method&lt;/span&gt; &lt;span class="pl-c1"&gt;===&lt;/span&gt; &lt;span class="pl-s"&gt;'POST'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
    &lt;span class="pl-smi"&gt;console&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;log&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'POST request'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
    &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;bb&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;busboy&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-c1"&gt;headers&lt;/span&gt;: &lt;span class="pl-s1"&gt;req&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;headers&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
    &lt;span class="pl-s1"&gt;bb&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;on&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'file'&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;name&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;file&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;info&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-c1"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
      &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; filename&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mscdex/busboy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  4) file-type — detect real file types from magic bytes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A library that reads the first bytes of a file (magic bytes) to identify its true MIME type — regardless of the filename or Content-Type header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; File extension and Content-Type are user-controlled. An attacker renames a &lt;code&gt;.exe&lt;/code&gt; to &lt;code&gt;.jpg&lt;/code&gt; and your extension check passes. Magic byte detection reads the actual file signature — the bytes operating systems and compilers use to identify formats. Combined with an allowlist, it's the only reliable layer for type verification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Image upload validation, document processing, any upload workflow where file type matters for security&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/sindresorhus/file-type" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fsindresorhus%2Ffile-type" alt="file-type preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sindresorhus" rel="noopener noreferrer"&gt;
        sindresorhus
      &lt;/a&gt; / &lt;a href="https://github.com/sindresorhus/file-type" rel="noopener noreferrer"&gt;
        file-type
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Detect the file type of a file, stream, or data
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 title="file-type" class="heading-element"&gt;
    &lt;a rel="noopener noreferrer" href="https://github.com/sindresorhus/file-type/media/logo.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fsindresorhus%2Ffile-type%2FHEAD%2Fmedia%2Flogo.jpg" alt="file-type logo"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Detect the file type of a file, stream, or data&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The file type is detected by checking the &lt;a href="https://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files" rel="nofollow noopener noreferrer"&gt;magic number&lt;/a&gt; of the buffer.&lt;/p&gt;
&lt;p&gt;This package is for detecting binary-based file formats, not text-based formats like &lt;code&gt;.txt&lt;/code&gt;, &lt;code&gt;.csv&lt;/code&gt;, &lt;code&gt;.svg&lt;/code&gt;, etc.&lt;/p&gt;
&lt;p&gt;We accept contributions for commonly used modern file formats, not historical or obscure ones. Open an issue first for discussion.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install file-type&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;This package is an ESM package. Your project needs to be ESM too. &lt;a href="https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;. For TypeScript + CommonJS, see &lt;a href="https://github.com/Borewit/load-esm" rel="noopener noreferrer"&gt;&lt;code&gt;load-esm&lt;/code&gt;&lt;/a&gt;.&lt;/strong&gt; If you use it with Webpack, you need the latest Webpack version and ensure you configure it correctly for ESM.&lt;/p&gt;
&lt;div class="markdown-alert markdown-alert-important"&gt;
&lt;p class="markdown-alert-title"&gt;Important&lt;/p&gt;
&lt;p&gt;File type detection is based on binary signatures (magic numbers) and is a best-effort hint. It does not guarantee the file is actually of that type or that the file is valid/not malformed.&lt;/p&gt;
&lt;p&gt;Robustness against malformed input is best-effort. When…&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sindresorhus/file-type" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&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%2F3hcvc1mhqf3kz258vrvu.gif" 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%2F3hcvc1mhqf3kz258vrvu.gif" alt="developer discovering a renamed .exe in their image uploads" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Checking file extensions vs checking magic bytes. Source: &lt;a href="https://giphy.com/gifs/5nvQ7fBWhPVXXOcfRI" rel="noopener noreferrer"&gt;Giphy&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5) mime-types — reliable MIME type mapping
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A comprehensive MIME type lookup library mapping file extensions to MIME types and vice versa, maintained against the IANA database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Writing your own MIME allowlist is a maintenance burden with consistent gaps. mime-types provides the full IANA database in a maintained package. Use it with file-type for a two-layer check: magic bytes confirm the real format, MIME mapping drives your content handling logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Upload type allowlisting, Content-Type header generation, file serving middleware&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/jshttp/mime-types" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Fjshttp%2Fmime-types" alt="mime-types preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jshttp" rel="noopener noreferrer"&gt;
        jshttp
      &lt;/a&gt; / &lt;a href="https://github.com/jshttp/mime-types" rel="noopener noreferrer"&gt;
        mime-types
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The ultimate javascript content-type utility.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;mime-types&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://npmjs.org/package/mime-types" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9a455a2e35b02e3d1542effc1d0b30378f8d206b2bc48afd365fe6c9b0c869d5/68747470733a2f2f62616467656e2e6e65742f6e706d2f762f6d696d652d7479706573" alt="NPM Version"&gt;&lt;/a&gt;
&lt;a href="https://npmjs.org/package/mime-types" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/00fbe60b39cd57aa72e0b8bf415ad143dde7a41d713755c7840f28fa5d13bd1d/68747470733a2f2f62616467656e2e6e65742f6e706d2f646d2f6d696d652d7479706573" alt="NPM Downloads"&gt;&lt;/a&gt;
&lt;a href="https://nodejs.org/en/download" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/23d295879d695e9ef0f35fbf9c18fc56d88cfda5d268442d1962735c935aaa7a/68747470733a2f2f62616467656e2e6e65742f6e706d2f6e6f64652f6d696d652d7479706573" alt="Node.js Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/jshttp/mime-types/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b3f23fbecea85148d7d2ddc65ba1e920b96731c304d5f9500bb86764a2c494d/68747470733a2f2f62616467656e2e6e65742f6769746875622f636865636b732f6a73687474702f6d696d652d74797065732f6d61737465723f6c6162656c3d6369" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://coveralls.io/r/jshttp/mime-types?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/67148bd512e5b566a900e4c443ff4024ff22e3888522771648502cecf99b8dcf/68747470733a2f2f62616467656e2e6e65742f636f766572616c6c732f632f6769746875622f6a73687474702f6d696d652d74797065732f6d6173746572" alt="Test Coverage"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The ultimate javascript content-type utility.&lt;/p&gt;
&lt;p&gt;Similar to &lt;a href="https://www.npmjs.com/package/mime" rel="nofollow noopener noreferrer"&gt;the &lt;code&gt;mime@1.x&lt;/code&gt; module&lt;/a&gt;, except:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No fallbacks.&lt;/strong&gt; Instead of naively returning the first available type
&lt;code&gt;mime-types&lt;/code&gt; simply returns &lt;code&gt;false&lt;/code&gt;, so do
&lt;code&gt;var type = mime.lookup('unrecognized') || 'application/octet-stream'&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;new Mime()&lt;/code&gt; business, so you could do &lt;code&gt;var lookup = require('mime-types').lookup&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;.define()&lt;/code&gt; functionality&lt;/li&gt;
&lt;li&gt;Bug fixes for &lt;code&gt;.lookup(path)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Otherwise, the API is compatible with &lt;code&gt;mime&lt;/code&gt; 1.x.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This is a &lt;a href="https://nodejs.org/en/" rel="nofollow noopener noreferrer"&gt;Node.js&lt;/a&gt; module available through the
&lt;a href="https://www.npmjs.com/" rel="nofollow noopener noreferrer"&gt;npm registry&lt;/a&gt;. Installation is done using the
&lt;a href="https://docs.npmjs.com/getting-started/installing-npm-packages-locally" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;npm install&lt;/code&gt; command&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ npm install mime-types&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Note on MIME Type Data and Semver&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This package considers the programmatic api as the semver compatibility. Additionally, the package which provides the MIME data
for this package (&lt;code&gt;mime-db&lt;/code&gt;) &lt;em&gt;also&lt;/em&gt; considers it's programmatic api as the semver contract. This means the MIME type resolution is &lt;em&gt;not&lt;/em&gt; considered
in the semver bumps.&lt;/p&gt;
&lt;p&gt;In the past the version of &lt;code&gt;mime-db&lt;/code&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jshttp/mime-types" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  6) sharp — re-encode images to strip dangerous payloads
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A high-performance Node.js image processing library that converts, resizes, and re-encodes images using libvips.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; An image that passes file-type validation can still contain EXIF metadata with XSS payloads, embedded scripts, or polyglot content that triggers vulnerabilities in downstream image parsers. Re-encoding through sharp strips all of this — the output is a clean, verified image. For any app serving user-uploaded images to other users, this step is non-negotiable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Profile photos, user-generated image content, any pipeline that stores and serves uploaded images&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/lovell/sharp" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Flovell%2Fsharp" alt="sharp preview" width="1200" height="600"&gt;&lt;/a&gt; | &lt;a href="https://sharp.pixelplumbing.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/lovell" rel="noopener noreferrer"&gt;
        lovell
      &lt;/a&gt; / &lt;a href="https://github.com/lovell/sharp" rel="noopener noreferrer"&gt;
        sharp
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;sharp&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d67b9b942197ac50f871ce2090c96f3ac34a07c2ca899e6daaa04d44a9bcd3d1/68747470733a2f2f73686172702e706978656c706c756d62696e672e636f6d2f73686172702d6c6f676f2e737667"&gt;&lt;img src="https://camo.githubusercontent.com/d67b9b942197ac50f871ce2090c96f3ac34a07c2ca899e6daaa04d44a9bcd3d1/68747470733a2f2f73686172702e706978656c706c756d62696e672e636f6d2f73686172702d6c6f676f2e737667" width="160" height="160" alt="sharp logo" class="js-gh-image-fallback"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The typical use case for this high speed Node-API module
is to convert large images in common formats to
smaller, web-friendly JPEG, PNG, WebP, GIF and AVIF images of varying dimensions.&lt;/p&gt;
&lt;p&gt;It can be used with all JavaScript runtimes
that provide support for Node-API v9, including
Node.js (^18.17.0 or &amp;gt;= 20.3.0), Deno and Bun.&lt;/p&gt;
&lt;p&gt;Resizing an image is typically 4x-5x faster than using the
quickest ImageMagick and GraphicsMagick settings
due to its use of &lt;a href="https://github.com/libvips/libvips" rel="noopener noreferrer"&gt;libvips&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Colour spaces, embedded ICC profiles and alpha transparency channels are all handled correctly
Lanczos resampling ensures quality is not sacrificed for speed.&lt;/p&gt;
&lt;p&gt;As well as image resizing, operations such as
rotation, extraction, compositing and gamma correction are available.&lt;/p&gt;
&lt;p&gt;Most modern macOS, Windows and Linux systems
do not require any additional install or runtime dependencies.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Documentation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Visit &lt;a href="https://sharp.pixelplumbing.com/" rel="nofollow noopener noreferrer"&gt;sharp.pixelplumbing.com&lt;/a&gt; for complete
&lt;a href="https://sharp.pixelplumbing.com/install" rel="nofollow noopener noreferrer"&gt;installation instructions&lt;/a&gt;,
&lt;a href="https://sharp.pixelplumbing.com/api-constructor" rel="nofollow noopener noreferrer"&gt;API documentation&lt;/a&gt;,
&lt;a href="https://sharp.pixelplumbing.com/performance" rel="nofollow noopener noreferrer"&gt;benchmark tests&lt;/a&gt; and
&lt;a href="https://sharp.pixelplumbing.com/changelog" rel="nofollow noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Examples&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/lovell/sharp" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  7) archiver — create archives without exposing attack surfaces
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A streaming archive creation library for Node.js supporting zip, tar, and other formats with programmatic entry control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; When you generate archives for users programmatically, archiver gives you explicit control over what's included — preventing path traversal, setting compression ratios, and limiting which files can enter the archive. When you own archive creation, you define the attack surface rather than inheriting it from user input.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Download bundles, backup generation, export features, any server-side archive creation workflow&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://github.com/archiverjs/node-archiver" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2F1%2Farchiverjs%2Fnode-archiver" alt="node-archiver preview" width="1200" height="600"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/archiverjs" rel="noopener noreferrer"&gt;
        archiverjs
      &lt;/a&gt; / &lt;a href="https://github.com/archiverjs/node-archiver" rel="noopener noreferrer"&gt;
        node-archiver
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      a streaming interface for archive generation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Archiver&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A streaming interface for archive generation&lt;/p&gt;
&lt;p&gt;Visit the &lt;a href="https://www.archiverjs.com/" rel="nofollow noopener noreferrer"&gt;API documentation&lt;/a&gt; for a list of all methods available.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install archiver --save&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;fs&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;"fs"&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-v"&gt;ZipArchive&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;"archiver"&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-c"&gt;// create a file to stream archive data to.&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;output&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;fs&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;createWriteStream&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;__dirname&lt;/span&gt; &lt;span class="pl-c1"&gt;+&lt;/span&gt; &lt;span class="pl-s"&gt;"/example.zip"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;archive&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;ZipArchive&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-c1"&gt;zlib&lt;/span&gt;: &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-c1"&gt;level&lt;/span&gt;: &lt;span class="pl-c1"&gt;9&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-c"&gt;// Sets the compression level.&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-c"&gt;// listen for all archive data to be written&lt;/span&gt;
&lt;span class="pl-c"&gt;// 'close' event is fired only when a file descriptor is involved&lt;/span&gt;
&lt;span class="pl-s1"&gt;output&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;on&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;"close"&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-k"&gt;function&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-smi"&gt;console&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;log&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;archive&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;pointer&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-c1"&gt;+&lt;/span&gt; &lt;span class="pl-s"&gt;" total bytes"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
  &lt;span class="pl-smi"&gt;console&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;log&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;
    &lt;span class="pl-s"&gt;"archiver has been finalized and the output file descriptor has closed."&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-c"&gt;// This&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/archiverjs/node-archiver" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;File upload security is a pipeline, not a single check. Parse with size limits, detect real types from magic bytes, map to allowed MIME types, sanitize image content, scan for malware, and control any archive generation.&lt;/p&gt;

&lt;p&gt;Skip any step and you have a gap. Use all seven and you have a defensible upload stack that doesn't trust user input at any layer.&lt;/p&gt;

&lt;p&gt;What's your current file upload pipeline missing?&lt;/p&gt;

</description>
      <category>security</category>
      <category>node</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Pompelmi: The minimalist ClamAV wrapper for Node.js (Zero Dependencies)</title>
      <dc:creator>Tommaso Bertocchi</dc:creator>
      <pubDate>Fri, 24 Apr 2026 10:40:07 +0000</pubDate>
      <link>https://forem.com/sonotommy/pompelmi-the-minimalist-clamav-wrapper-for-nodejs-zero-dependencies-14n2</link>
      <guid>https://forem.com/sonotommy/pompelmi-the-minimalist-clamav-wrapper-for-nodejs-zero-dependencies-14n2</guid>
      <description>&lt;p&gt;Checking file uploads for malware shouldn't be a headache. Most Node.js wrappers for ClamAV rely on unstable stdout parsing or heavy native bindings. &lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Pompelmi&lt;/strong&gt; to be different: it's a "ClamAV for humans" wrapper that focuses on stability and simplicity.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Runtime Dependencies:&lt;/strong&gt; Built 100% on Node.js built-ins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exit-Code Reliability:&lt;/strong&gt; It uses ClamAV's documented exit codes (0, 1, 2) instead of brittle regex parsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Native Bindings:&lt;/strong&gt; No &lt;code&gt;node-gyp&lt;/code&gt; or compilation required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Support:&lt;/strong&gt; Works with local &lt;code&gt;clamscan&lt;/code&gt; or remote &lt;code&gt;clamd&lt;/code&gt; via TCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform:&lt;/strong&gt; macOS, Linux, and Windows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📦 Quickstart
&lt;/h3&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;pompelmi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Verdict&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pompelmi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./untrusted-file.zip&lt;/span&gt;&lt;span class="dl"&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;result&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;Verdict&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Malicious&lt;/span&gt;&lt;span class="p"&gt;)&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="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Threat detected!&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;Check it out on GitHub and let me know what you think!&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com" rel="noopener noreferrer"&gt;https://github.com&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://pompelmi.app" rel="noopener noreferrer"&gt;https://pompelmi.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>node</category>
      <category>security</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
