<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicholas Toledo</title>
    <description>The latest articles on DEV Community by Nicholas Toledo (@nicholas_toledo_5a6f9e576).</description>
    <link>https://dev.to/nicholas_toledo_5a6f9e576</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3451687%2F413060e7-6593-4c39-b8b9-b81f3e7406a4.png</url>
      <title>DEV Community: Nicholas Toledo</title>
      <link>https://dev.to/nicholas_toledo_5a6f9e576</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nicholas_toledo_5a6f9e576"/>
    <language>en</language>
    <item>
      <title>I built a free in-browser EU CRA Article 14 checker — paste a lockfile, nothing uploaded</title>
      <dc:creator>Nicholas Toledo</dc:creator>
      <pubDate>Mon, 14 Sep 2026 09:32:01 +0000</pubDate>
      <link>https://dev.to/nicholas_toledo_5a6f9e576/i-built-a-free-in-browser-eu-cra-article-14-checker-paste-a-lockfile-nothing-uploaded-1a8n</link>
      <guid>https://dev.to/nicholas_toledo_5a6f9e576/i-built-a-free-in-browser-eu-cra-article-14-checker-paste-a-lockfile-nothing-uploaded-1a8n</guid>
      <description>&lt;p&gt;I wanted to make the EU Cyber Resilience Act Article 14 question answerable in ten seconds, without installing anything.&lt;/p&gt;

&lt;p&gt;So: &lt;strong&gt;&lt;a href="https://cra.toledotechnologies.com/check/" rel="noopener noreferrer"&gt;cra.toledotechnologies.com/check&lt;/a&gt;&lt;/strong&gt; — paste a &lt;code&gt;package-lock.json&lt;/code&gt;, &lt;code&gt;requirements.txt&lt;/code&gt;, &lt;code&gt;go.sum&lt;/code&gt;, &lt;code&gt;Cargo.lock&lt;/code&gt;, &lt;code&gt;Gemfile.lock&lt;/code&gt;, &lt;code&gt;composer.lock&lt;/code&gt;, &lt;code&gt;gradle.lockfile&lt;/code&gt;, or a CycloneDX/SPDX SBOM. Get an answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question it answers
&lt;/h2&gt;

&lt;p&gt;Since &lt;strong&gt;11 September 2026&lt;/strong&gt;, Article 14 of the CRA has been enforceable: if a vulnerability in a product you've placed on the EU market is being &lt;strong&gt;actively exploited&lt;/strong&gt;, you owe an early warning to your national CSIRT and ENISA within &lt;strong&gt;24 hours&lt;/strong&gt; of becoming aware.&lt;/p&gt;

&lt;p&gt;The operative word is &lt;em&gt;exploited&lt;/em&gt;. Not "critical". Not "CVSS 9.8". Not "there's a PoC". That distinction is the entire ballgame, and it's why your scanner's severity-sorted output is answering a different question than the regulator is asking.&lt;/p&gt;

&lt;p&gt;The checker resolves your declared dependencies against &lt;a href="https://osv.dev" rel="noopener noreferrer"&gt;OSV.dev&lt;/a&gt;, maps every advisory to its CVE aliases, and intersects that with the &lt;a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" rel="noopener noreferrer"&gt;CISA KEV catalogue&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nothing is uploaded
&lt;/h2&gt;

&lt;p&gt;It runs entirely in your browser. Your file contents never reach a server of mine — package names and versions go to the public OSV.dev API for lookup, and the KEV comparison happens locally in the page. No account, no logging, no backend of mine involved at all.&lt;/p&gt;

&lt;p&gt;One implementation note that might save you time if you build something similar: &lt;strong&gt;CISA's KEV feed sends no CORS headers&lt;/strong&gt;, so you cannot fetch it from a browser. I mirror it same-origin (US Government work, public domain) with explicit provenance fields in the JSON so the copy can't be mistaken for the authoritative source. OSV.dev &lt;em&gt;does&lt;/em&gt; send CORS headers and can be called directly from the client.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No known-exploited components found
Checked 3 components against KEV catalogue 2026.09.11 (1709 entries).

3 component(s) do carry published advisories that are not on the KEV
list. That is ordinary patching work — not a reporting clock.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not clean:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2 known-exploited components — decision required

CVE-2021-45046   org.apache.logging.log4j:log4j-core 2.14.1   Known
CVE-2021-44228   org.apache.logging.log4j:log4j-core 2.14.1   Known

Early warning   24 hours   2026-09-15 09:30:26 UTC
Notification    72 hours   2026-09-17 09:30:26 UTC
Final report    14 days    2026-09-28 09:30:26 UTC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What it deliberately doesn't claim
&lt;/h2&gt;

&lt;p&gt;A KEV hit &lt;strong&gt;does not&lt;/strong&gt; mean you must file. KEV evidences exploitation &lt;em&gt;somewhere in the world&lt;/em&gt;; Article 14 asks about exploitation &lt;em&gt;in your product&lt;/em&gt;. If the vulnerable path isn't reachable in your build, the answer may be no — and the Commission's July 2026 guidance is explicit that reachability matters for third-party components. No scanner can make that call.&lt;/p&gt;

&lt;p&gt;Equally, a clean result is not a certificate. KEV lags and isn't exhaustive. Your own telemetry or a customer's incident report can start the clock before CISA lists anything.&lt;/p&gt;

&lt;p&gt;Whatever the result: write down what you knew and when you knew it. A documented decision &lt;em&gt;not&lt;/em&gt; to report is defensible. An undocumented one isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI version
&lt;/h2&gt;

&lt;p&gt;For CI, the full tool walks your whole repo across twelve lockfile formats and exits non-zero on a match — &lt;a href="https://github.com/ntoledo319/cra-watch" rel="noopener noreferrer"&gt;github.com/ntoledo319/cra-watch&lt;/a&gt;, MIT, stdlib only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ntoledo319/cra-watch@v1.0.0&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;fail-on-match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;false'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it on a &lt;strong&gt;schedule&lt;/strong&gt;, not just on push. The KEV catalogue grows continuously — a repo that was clean yesterday can become a reporting question today with no change to your code.&lt;/p&gt;

&lt;p&gt;If you hit a lockfile format it mangles, open an issue. I'd rather fix it than be confidently wrong in public.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Not legal advice; I'm not a lawyer. Verify against Regulation (EU) 2024/2847 and your coordinating national CSIRT before filing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>showdev</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>13 advisories, 0 reporting triggers: severity is not exploitation under the EU CRA</title>
      <dc:creator>Nicholas Toledo</dc:creator>
      <pubDate>Mon, 14 Sep 2026 09:22:33 +0000</pubDate>
      <link>https://dev.to/nicholas_toledo_5a6f9e576/13-advisories-0-reporting-triggers-severity-is-not-exploitation-under-the-eu-cra-3hdh</link>
      <guid>https://dev.to/nicholas_toledo_5a6f9e576/13-advisories-0-reporting-triggers-severity-is-not-exploitation-under-the-eu-cra-3hdh</guid>
      <description>&lt;p&gt;I spent this morning reading the CISA KEV catalogue against a dozen real repositories, and I want to write down something that surprised me — because I think it's the thing most teams are going to get wrong about the EU Cyber Resilience Act.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Since 11 September 2026, Article 14 of the CRA has been enforceable. If a vulnerability in a product you've placed on the EU market is being &lt;strong&gt;actively exploited&lt;/strong&gt;, you owe an early warning to your national CSIRT and ENISA within 24 hours.&lt;/p&gt;

&lt;p&gt;Everyone reading that sentence hears "vulnerability" and thinks about their scanner output. That's the mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually found
&lt;/h2&gt;

&lt;p&gt;I scanned a real project this morning — 649 distinct components across a &lt;code&gt;package-lock.json&lt;/code&gt; and a &lt;code&gt;Cargo.lock&lt;/code&gt;. The result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Advisories  13 component(s) carry at least one known advisory
  KEV feed    1709 entries, catalogue 2026.09.11

  NO KEV MATCHES.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thirteen components with published advisories. &lt;strong&gt;Zero&lt;/strong&gt; on the known-exploited list.&lt;/p&gt;

&lt;p&gt;Now, thirteen advisories would light up any dependency scanner. If you were treating scanner output as your CRA trigger, you'd have thirteen things that look like they might start a 24-hour clock. In reality, on this evidence, you have &lt;strong&gt;none&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The inverse is also true and more dangerous. I built a fixture with &lt;code&gt;log4j-core 2.14.1&lt;/code&gt; in it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  2 KEV MATCH(ES) - MANUAL DECISION REQUIRED NOW

  CVE-2021-44228  (GHSA-jfh8-c2jp-5v3q)
    component      org.apache.logging.log4j:log4j-core 2.14.1  [Maven]
    known as       Apache Log4j2 Remote Code Execution Vulnerability
    KEV listed     2021-12-10   ransomware use: Known
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One component. Two known-exploited CVEs. That's the one that deserves a human in the room, and it would have been item #7 of 13 in a severity-sorted list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Severity is not exploitation
&lt;/h2&gt;

&lt;p&gt;This is the whole point and it's worth being blunt about it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CVSS 9.8&lt;/strong&gt; describes how bad it would be &lt;em&gt;if&lt;/em&gt; exploited.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KEV listing&lt;/strong&gt; describes that it &lt;em&gt;is being&lt;/em&gt; exploited, in the real world, right now.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Article 14 turns on the second one. Most vulnerability tooling optimises for the first. So the list you've been living with — sorted by severity, triaged by "critical/high/medium" — is not the list that answers the regulatory question. It's a different question with a different answer set, and the overlap is smaller than you'd guess.&lt;/p&gt;

&lt;p&gt;There's a second-order effect that I think is underrated: treating every critical CVE as a potential reporting trigger doesn't just waste time, it produces &lt;strong&gt;over-reporting&lt;/strong&gt;, and over-reporting to a regulator is its own kind of problem. You want the small true list, not the big cautious one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part where I'm honest about the limits
&lt;/h2&gt;

&lt;p&gt;I wrote a tool to do the intersection (&lt;a href="https://github.com/ntoledo319/cra-watch" rel="noopener noreferrer"&gt;&lt;code&gt;cra-watch&lt;/code&gt;&lt;/a&gt;, MIT, stdlib-only, no account). But I want to be straight about what it can't do, because compliance tooling that overclaims is worse than no tooling:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A KEV listing doesn't mean you must report.&lt;/strong&gt; KEV says a vulnerability is being exploited &lt;em&gt;somewhere in the world&lt;/em&gt;. Article 14 asks whether it's being exploited &lt;em&gt;in your product&lt;/em&gt;. If the vulnerable code path isn't reachable in your build, the answer may genuinely be no. The Commission's July 2026 guidance is explicit that reachability matters for third-party components. No scanner can make that call — a person has to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KEV isn't the legal definition either.&lt;/strong&gt; It's a US government catalogue. It lags, and it isn't exhaustive. Your own telemetry or a customer's incident report can start the clock before CISA ever lists the CVE.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clean output isn't a certificate.&lt;/strong&gt; It means two public sources don't currently intersect for your dependency graph. Useful, dated, reproducible. Not immunity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd actually do on Monday
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the intersection, not the severity sort.&lt;/strong&gt; You want the short list, and it probably is short.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put it on a schedule, not on push.&lt;/strong&gt; This is the bit people miss. The KEV catalogue gains entries continuously. A repo that was clean yesterday can become a reporting question today with zero code changes on your side. A one-off audit answers a question about the past.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide who presses send, before you need to know.&lt;/strong&gt; Under a 24-hour clock, the most common failure isn't technical — it's four people each assuming someone else owns the decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write down what you knew and when.&lt;/strong&gt; Whatever you decide, the contemporaneous record is what defends it later. A documented decision &lt;em&gt;not&lt;/em&gt; to report is defensible. An undocumented one is very hard to defend.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tool is free and I'd rather it were widely used than gated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ntoledo319/cra-watch/main/cra_watch.py &lt;span class="nt"&gt;-o&lt;/span&gt; cra-watch
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x cra-watch &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./cra-watch scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three lines in CI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ntoledo319/cra-watch@v1.0.0&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;fail-on-match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;false'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you find a case where it gets the intersection wrong, open an issue — I'd rather fix it than be confidently wrong in public.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Not a lawyer, not legal advice. Verify against Regulation (EU) 2024/2847 and your coordinating national CSIRT's guidance before filing anything. I also sell a &lt;a href="https://cra.toledotechnologies.com" rel="noopener noreferrer"&gt;process kit&lt;/a&gt; for the decision-and-filing side; the scanner is free and always will be, and it isn't crippled or time-limited.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The EU's 24-hour vulnerability reporting clock started 3 days ago. Here's a free tool to check if it applies to you.</title>
      <dc:creator>Nicholas Toledo</dc:creator>
      <pubDate>Mon, 14 Sep 2026 09:05:11 +0000</pubDate>
      <link>https://dev.to/nicholas_toledo_5a6f9e576/the-eus-24-hour-vulnerability-reporting-clock-started-3-days-ago-heres-a-free-tool-to-check-if-1b5p</link>
      <guid>https://dev.to/nicholas_toledo_5a6f9e576/the-eus-24-hour-vulnerability-reporting-clock-started-3-days-ago-heres-a-free-tool-to-check-if-1b5p</guid>
      <description>&lt;p&gt;On &lt;strong&gt;11 September 2026&lt;/strong&gt;, the first enforceable deadline under the EU Cyber Resilience Act arrived. Almost nobody I've spoken to noticed, because the headline date everyone has in their calendar is December 2027.&lt;/p&gt;

&lt;p&gt;That's the date most of the CRA applies. But Article 14 — the reporting obligation — has been live since the 11th.&lt;/p&gt;

&lt;p&gt;Here's the short version:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If a vulnerability in a product you've placed on the EU market is being &lt;strong&gt;actively exploited&lt;/strong&gt;, you owe an early warning to your coordinating national CSIRT and ENISA &lt;strong&gt;within 24 hours&lt;/strong&gt; of becoming aware of it. Then a fuller notification within 72 hours. Then a final report within 14 days of a fix being available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Penalties top out at €15 million or 2.5% of worldwide annual turnover (Article 64(2)).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One relief that's worth knowing and often gets left out:&lt;/strong&gt; under Article 64(10)(a), those administrative fines do &lt;em&gt;not&lt;/em&gt; apply to microenterprises and small enterprises for missing the &lt;em&gt;24-hour&lt;/em&gt; early-warning deadline specifically. That relief covers the deadline only — not the duty to report, and not the 72-hour or final-report stages. If you're a small team, the headline fine number you keep seeing quoted is probably not the one that applies to you.&lt;/p&gt;

&lt;p&gt;And the part that catches people: under Article 69(3), this covers products &lt;strong&gt;already on the EU market&lt;/strong&gt;. Not just things you ship after the deadline. That thing you shipped in 2022 that's still being sold? In scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Products with digital elements" is broader than you think
&lt;/h2&gt;

&lt;p&gt;It's software, hardware, remote data-processing solutions, and components placed on the market separately. If you're outside the EU but sell into it through an importer, distributor, or authorised representative, the obligation can still reach you. Being in Ohio doesn't exempt you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The word that matters is "exploited"
&lt;/h2&gt;

&lt;p&gt;This is where I think most teams are going to get it wrong, in both directions.&lt;/p&gt;

&lt;p&gt;Article 14 is &lt;strong&gt;not&lt;/strong&gt; triggered by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a critical CVE in your dependency tree&lt;/li&gt;
&lt;li&gt;a CVSS 9.8&lt;/li&gt;
&lt;li&gt;a proof-of-concept on GitHub&lt;/li&gt;
&lt;li&gt;your scanner going red&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's triggered by evidence that the vulnerability is &lt;strong&gt;actually being exploited in the real world&lt;/strong&gt;, in your product. That's a much smaller set. Most CVEs never meet it.&lt;/p&gt;

&lt;p&gt;The Commission's July 2026 guidance also clarified something useful about third-party components: if an actively exploited vulnerability comes from a component you integrated, a report is required when that vulnerability is being actively exploited &lt;strong&gt;in your product&lt;/strong&gt;. If the vulnerable code isn't reachable in your build, an Article 14 report isn't required on that basis.&lt;/p&gt;

&lt;p&gt;So the question isn't "do I have CVEs." Everyone has CVEs. The question is: &lt;em&gt;is any of what I ship on the list of things being exploited right now?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A free tool for exactly that question
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/ntoledo319/cra-watch" rel="noopener noreferrer"&gt;&lt;code&gt;cra-watch&lt;/code&gt;&lt;/a&gt; to answer it. MIT licensed, Python standard library only, no account, no telemetry, no signup.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ntoledo319/cra-watch/main/cra_watch.py &lt;span class="nt"&gt;-o&lt;/span&gt; cra-watch
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x cra-watch
./cra-watch scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reads your lockfiles, resolves them against &lt;a href="https://osv.dev" rel="noopener noreferrer"&gt;OSV.dev&lt;/a&gt;, and intersects the result with the &lt;a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" rel="noopener noreferrer"&gt;CISA Known Exploited Vulnerabilities catalogue&lt;/a&gt; — the closest thing to a public register of what's genuinely being exploited in the wild.&lt;/p&gt;

&lt;p&gt;Clean run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Advisories  13 component(s) carry at least one known advisory
  KEV feed    1709 entries, catalogue 2026.09.11

  NO KEV MATCHES.

  Nothing in your dependency graph appears on the CISA Known Exploited
  Vulnerabilities catalogue. On this evidence there is no Article 14
  24-hour reporting trigger from a listed component today.

  You do still have advisories on 13 component(s).
  Those are ordinary patching work, not a reporting clock. Article 14
  is about ACTIVE EXPLOITATION, not severity.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note what it does there: 13 components have advisories, and it explicitly tells you those are &lt;strong&gt;not&lt;/strong&gt; a reporting trigger. That distinction is the whole point. Your scanner's wall of red is patching work. This is a different question.&lt;/p&gt;

&lt;p&gt;The other answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  2 KEV MATCH(ES) - MANUAL DECISION REQUIRED NOW

  CVE-2021-44228  (GHSA-jfh8-c2jp-5v3q)
    component      org.apache.logging.log4j:log4j-core 2.14.1  [Maven]
    known as       Apache Log4j2 Remote Code Execution Vulnerability
    KEV listed     2021-12-10   ransomware use: Known

  If you confirm exploitation in your product, the clock is:

    Early warning     within 24h    2026-09-15 08:40:10 UTC
    Notification      within 72h    2026-09-17 08:40:10 UTC
    Final report      within 14d    2026-09-28 08:40:10 UTC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Supports 12 lockfile formats (npm, yarn, pnpm, pip, poetry, Pipfile, go.sum, Cargo, Gemfile, composer, NuGet, gradle) plus CycloneDX and SPDX SBOMs.&lt;/p&gt;

&lt;p&gt;Exit codes are CI-friendly: &lt;code&gt;0&lt;/code&gt; clean, &lt;code&gt;1&lt;/code&gt; KEV match, &lt;code&gt;2&lt;/code&gt; nothing scannable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it on a schedule, not on push
&lt;/h2&gt;

&lt;p&gt;This is the bit I'd emphasise. The KEV catalogue gains entries continuously. A repo that was clean yesterday can become a reporting question today &lt;strong&gt;without a single line of your code changing&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cra-watch&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[{&lt;/span&gt; &lt;span class="nv"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;6&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt; &lt;span class="pi"&gt;}]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;curl -fsSL https://raw.githubusercontent.com/ntoledo319/cra-watch/main/cra_watch.py -o cra-watch.py&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python3 cra-watch.py scan&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A one-off audit answers a question about yesterday.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the tool deliberately does not do
&lt;/h2&gt;

&lt;p&gt;I want to be straight about the limits, because compliance tooling that overclaims is worse than no tooling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A KEV listing is not proof of exploitation in your product.&lt;/strong&gt; KEV says a vulnerability is being exploited &lt;em&gt;somewhere in the world&lt;/em&gt;. Article 14 asks whether it's being exploited &lt;em&gt;in the thing you shipped&lt;/em&gt;. If the vulnerable code path is unreachable in your build, the answer may genuinely be no. The tool can't assess reachability. A person has to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KEV is not the legal definition of "actively exploited."&lt;/strong&gt; It's a US government catalogue. It lags, and it isn't exhaustive. Your own telemetry or a customer's incident report can start the clock before CISA lists anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clean output is not a compliance certificate.&lt;/strong&gt; It means two public data sources don't currently intersect for your dependency graph. That's useful and reproducible. It isn't immunity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It only sees declared dependencies.&lt;/strong&gt; No vendored code, no static linking, no container base images, no your-own-source analysis.&lt;/p&gt;

&lt;p&gt;Whatever the output, the thing to actually do is &lt;strong&gt;write down what you knew, when you knew it, and why you decided as you did.&lt;/strong&gt; That contemporaneous record is what defends the decision later — far more than any scanner output.&lt;/p&gt;

&lt;h2&gt;
  
  
  The harder half
&lt;/h2&gt;

&lt;p&gt;Finding the shortlist is the easy part, and it's the part software can do.&lt;/p&gt;

&lt;p&gt;The hard part is the decision under a 24-hour clock: who's accountable for pressing send, what an early warning says when you still know almost nothing (answer: very little — it's &lt;em&gt;designed&lt;/em&gt; to be thin, and you file it anyway), and what evidence defends a decision &lt;strong&gt;not&lt;/strong&gt; to report when someone asks eight months later.&lt;/p&gt;

&lt;p&gt;I also put together a &lt;a href="https://cra.toledotechnologies.com" rel="noopener noreferrer"&gt;CRA 24-Hour Reporting Kit&lt;/a&gt; covering that process side — decision tree, the three clocks worked in UTC, fill-in templates for all three filings, an evidence log, and a 30-minute tabletop exercise. That one's paid ($149), and it's the only thing I'm selling here. The scanner is free and always will be; it's not crippled, time-limited, or a trial.&lt;/p&gt;

&lt;p&gt;If you only take one thing from this post, take the scanner and the cron job. The deadline is real, it's already passed, and most teams haven't checked.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm not a lawyer and none of this is legal advice. Verify against Regulation (EU) 2024/2847 and guidance from your coordinating national CSIRT before filing anything. If I've got something wrong, tell me in the comments — I'd rather fix it than be confidently wrong in public.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>compliance</category>
      <category>devops</category>
    </item>
    <item>
      <title>Turn Any Web Page into Markdown with NoHustle API</title>
      <dc:creator>Nicholas Toledo</dc:creator>
      <pubDate>Fri, 22 Aug 2025 04:57:01 +0000</pubDate>
      <link>https://dev.to/nicholas_toledo_5a6f9e576/turn-any-web-page-into-markdown-with-nohustle-api-3h1a</link>
      <guid>https://dev.to/nicholas_toledo_5a6f9e576/turn-any-web-page-into-markdown-with-nohustle-api-3h1a</guid>
      <description>&lt;p&gt;Scraping web content is tedious. NoHustle API converts any URL to clean Markdown in one GET request.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Zero Setup Required
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://nohustle-api.onrender.com/url2md?url=https://example.com/article"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💪 What It Handles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript-rendered pages&lt;/strong&gt; - Waits for content to load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean text extraction&lt;/strong&gt; - Removes ads, navigation, footers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proper formatting&lt;/strong&gt; - Headers, links, lists preserved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large articles&lt;/strong&gt; - Handles long-form content reliably&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔧 Integration Examples
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&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;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://nohustle-api.onrender.com/url2md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&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;url&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;https://news.ycombinator.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;markdown&lt;/span&gt; &lt;span class="o"&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;text&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;markdown&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;cURL in CI/CD:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Archive article as Markdown&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://nohustle-api.onrender.com/url2md?url=&lt;/span&gt;&lt;span class="nv"&gt;$ARTICLE_URL&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; archive/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y%m%d&lt;span class="si"&gt;)&lt;/span&gt;.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great for content archiving, research tools, or feeding LLMs clean text.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Try it Now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🌐 &lt;a href="https://huggingface.co/spaces/ntoledo319/nohustle-removebg?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;Try in Browser →&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;(Hugging Face Space)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📫 &lt;a href="https://www.postman.com/nohustle-api?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;Run in Postman →&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;(One-click collection)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ &lt;a href="https://rapidapi.com/no-hustle-api-no-hustle-api-default/api/no-hustle-api?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;RapidAPI →&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;(Managed hosting)&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;More NoHustle endpoints:&lt;/strong&gt; &lt;a href="https://nohustle-api.onrender.com?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;https://nohustle-api.onrender.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>automation</category>
      <category>nocode</category>
      <category>python</category>
    </item>
    <item>
      <title>Remove Image Background via API (Free tier, no paid upstreams)</title>
      <dc:creator>Nicholas Toledo</dc:creator>
      <pubDate>Fri, 22 Aug 2025 04:57:01 +0000</pubDate>
      <link>https://dev.to/nicholas_toledo_5a6f9e576/remove-image-background-via-api-free-tier-no-paid-upstreams-3dec</link>
      <guid>https://dev.to/nicholas_toledo_5a6f9e576/remove-image-background-via-api-free-tier-no-paid-upstreams-3dec</guid>
      <description>&lt;p&gt;Need to remove backgrounds from images without paying for expensive APIs? NoHustle API does it for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 One POST, Clean Results
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;@sample.jpg https://nohustle-api.onrender.com/remove-bg &lt;span class="nt"&gt;-o&lt;/span&gt; clean.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✨ What You Get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PNG with transparency&lt;/strong&gt; - Perfect for overlays, logos, product shots&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No subscriptions&lt;/strong&gt; - Free tier covers most use cases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast processing&lt;/strong&gt; - Usually under 3 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No watermarks&lt;/strong&gt; - Clean output, ready to use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔧 Code Examples
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image.jpg&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;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://nohustle-api.onrender.com/remove-bg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&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;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clean.png&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;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;JavaScript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&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="nx"&gt;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;formData&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fileInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&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;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://nohustle-api.onrender.com/remove-bg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;formData&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;blob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perfect for e-commerce, design workflows, or any app that needs clean product images.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Try it Now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🌐 &lt;a href="https://huggingface.co/spaces/ntoledo319/nohustle-removebg?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;Try in Browser →&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;(Hugging Face Space)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📫 &lt;a href="https://www.postman.com/nohustle-api?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;Run in Postman →&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;(One-click collection)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ &lt;a href="https://rapidapi.com/no-hustle-api-no-hustle-api-default/api/no-hustle-api?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;RapidAPI →&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;(Managed hosting)&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;More NoHustle endpoints:&lt;/strong&gt; &lt;a href="https://nohustle-api.onrender.com?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=nohustle_launch" rel="noopener noreferrer"&gt;https://nohustle-api.onrender.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>automation</category>
      <category>nocode</category>
      <category>python</category>
    </item>
  </channel>
</rss>
